From 20b4663887bbb79830d9f2199b31e060abe28ad3 Mon Sep 17 00:00:00 2001 From: IMback Date: Mon, 3 Sep 2018 20:47:01 +0200 Subject: [PATCH] improved serial handeling added aux state info --- CMakeCache.txt | 111 +++-- WirelessRelay.h | 1 + main.cpp | 16 +- pwm.cpp | 4 +- pwm.h | 3 +- rgbcontroller | Bin 59884 -> 65376 bytes rgbcontroller.hex | 1116 +++++++++++++++++++++++---------------------- serial.cpp | 79 ++-- serial.h | 5 +- 9 files changed, 676 insertions(+), 659 deletions(-) diff --git a/CMakeCache.txt b/CMakeCache.txt index 841ffd5..1beacc8 100644 --- a/CMakeCache.txt +++ b/CMakeCache.txt @@ -18,82 +18,80 @@ AR_AVRDUDE:FILEPATH=/usr/bin/avrdude //Path to a program. -CMAKE_AR:FILEPATH=/usr/bin/ar +CMAKE_AR:FILEPATH=/bin/ar -//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or -// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel. +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... CMAKE_BUILD_TYPE:STRING= //Enable/Disable color output during build. CMAKE_COLOR_MAKEFILE:BOOL=ON //CXX compiler -CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ +CMAKE_CXX_COMPILER:FILEPATH=/bin/c++ //A wrapper around 'ar' adding the appropriate '--plugin' option // for the GCC compiler -CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar +CMAKE_CXX_COMPILER_AR:FILEPATH=/bin/gcc-ar //A wrapper around 'ranlib' adding the appropriate '--plugin' option // for the GCC compiler -CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/bin/gcc-ranlib -//Flags used by the compiler during all build types. +//Flags used by the CXX compiler during all build types. CMAKE_CXX_FLAGS:STRING= -//Flags used by the compiler during debug builds. +//Flags used by the CXX compiler during DEBUG builds. CMAKE_CXX_FLAGS_DEBUG:STRING=-g -//Flags used by the compiler during release builds for minimum -// size. +//Flags used by the CXX compiler during MINSIZEREL builds. CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG -//Flags used by the compiler during release builds. +//Flags used by the CXX compiler during RELEASE builds. CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG -//Flags used by the compiler during release builds with debug info. +//Flags used by the CXX compiler during RELWITHDEBINFO builds. CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG //C compiler -CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc +CMAKE_C_COMPILER:FILEPATH=/bin/cc //A wrapper around 'ar' adding the appropriate '--plugin' option // for the GCC compiler -CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar +CMAKE_C_COMPILER_AR:FILEPATH=/bin/gcc-ar //A wrapper around 'ranlib' adding the appropriate '--plugin' option // for the GCC compiler -CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib +CMAKE_C_COMPILER_RANLIB:FILEPATH=/bin/gcc-ranlib -//Flags used by the compiler during all build types. +//Flags used by the C compiler during all build types. CMAKE_C_FLAGS:STRING= -//Flags used by the compiler during debug builds. +//Flags used by the C compiler during DEBUG builds. CMAKE_C_FLAGS_DEBUG:STRING=-g -//Flags used by the compiler during release builds for minimum -// size. +//Flags used by the C compiler during MINSIZEREL builds. CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG -//Flags used by the compiler during release builds. +//Flags used by the C compiler during RELEASE builds. CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG -//Flags used by the compiler during release builds with debug info. +//Flags used by the C compiler during RELWITHDEBINFO builds. CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG -//Flags used by the linker. +//Flags used by the linker during all build types. CMAKE_EXE_LINKER_FLAGS:STRING= -//Flags used by the linker during debug builds. +//Flags used by the linker during DEBUG builds. CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= -//Flags used by the linker during release minsize builds. +//Flags used by the linker during MINSIZEREL builds. CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= -//Flags used by the linker during release builds. +//Flags used by the linker during RELEASE builds. CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= -//Flags used by the linker during Release with Debug Info builds. +//Flags used by the linker during RELWITHDEBINFO builds. CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= //Enable/Disable output of compile commands during generation. @@ -103,54 +101,64 @@ CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF CMAKE_INSTALL_PREFIX:PATH=/usr/local //Path to a program. -CMAKE_LINKER:FILEPATH=/usr/bin/ld +CMAKE_LINKER:FILEPATH=/bin/ld //Path to a program. -CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make +CMAKE_MAKE_PROGRAM:FILEPATH=/bin/make -//Flags used by the linker during the creation of modules. +//Flags used by the linker during the creation of modules during +// all build types. CMAKE_MODULE_LINKER_FLAGS:STRING= -//Flags used by the linker during debug builds. +//Flags used by the linker during the creation of modules during +// DEBUG builds. CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= -//Flags used by the linker during release minsize builds. +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= -//Flags used by the linker during release builds. +//Flags used by the linker during the creation of modules during +// RELEASE builds. CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= -//Flags used by the linker during Release with Debug Info builds. +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= //Path to a program. -CMAKE_NM:FILEPATH=/usr/bin/nm +CMAKE_NM:FILEPATH=/bin/nm //Path to a program. -CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy +CMAKE_OBJCOPY:FILEPATH=/bin/objcopy //Path to a program. -CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump +CMAKE_OBJDUMP:FILEPATH=/bin/objdump //Value Computed by CMake CMAKE_PROJECT_NAME:STATIC=rgbcontroller //Path to a program. -CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib +CMAKE_RANLIB:FILEPATH=/bin/ranlib -//Flags used by the linker during the creation of dll's. +//Flags used by the linker during the creation of shared libraries +// during all build types. CMAKE_SHARED_LINKER_FLAGS:STRING= -//Flags used by the linker during debug builds. +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= -//Flags used by the linker during release minsize builds. +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= -//Flags used by the linker during release builds. +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= -//Flags used by the linker during Release with Debug Info builds. +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= //If set, runtime paths are not added when installing shared libraries, @@ -160,23 +168,28 @@ CMAKE_SKIP_INSTALL_RPATH:BOOL=NO //If set, runtime paths are not added when using shared libraries. CMAKE_SKIP_RPATH:BOOL=NO -//Flags used by the linker during the creation of static libraries. +//Flags used by the linker during the creation of static libraries +// during all build types. CMAKE_STATIC_LINKER_FLAGS:STRING= -//Flags used by the linker during debug builds. +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= -//Flags used by the linker during release minsize builds. +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= -//Flags used by the linker during release builds. +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= -//Flags used by the linker during Release with Debug Info builds. +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= //Path to a program. -CMAKE_STRIP:FILEPATH=/usr/bin/strip +CMAKE_STRIP:FILEPATH=/bin/strip //If this value is on, makefiles will be generated without the // .SILENT directive, and all commands will be echoed to the console @@ -349,7 +362,7 @@ CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STRIP CMAKE_STRIP-ADVANCED:INTERNAL=1 //uname command -CMAKE_UNAME:INTERNAL=/usr/bin/uname +CMAKE_UNAME:INTERNAL=/bin/uname //ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 diff --git a/WirelessRelay.h b/WirelessRelay.h index d2a4fc5..f02299e 100644 --- a/WirelessRelay.h +++ b/WirelessRelay.h @@ -19,6 +19,7 @@ private: public: WirelessRelay(const uint16_t id); WirelessRelay(); + void setTimeout(uint64_t timeout); void init(const uint16_t id); void on(); void off(); diff --git a/main.cpp b/main.cpp index d3b5e10..231fd7d 100644 --- a/main.cpp +++ b/main.cpp @@ -9,7 +9,7 @@ #include "rgbled.h" #include "eeprom.h" -#define MAX_RELAYS 32 +#define MAX_RELAYS 16 #define COMMAND_BUFFER_SIZE 32 #define SNPRINTF_BUFFER_SIZE 64 @@ -35,7 +35,7 @@ inline static void printHelp(Serial* serial) relay list : Print list of saved Wireless Relays.\n\ relay machine [on/off] : Get machine readable relay state when state changes.\n\ relay [on/off] [nn] : Turn on/off nth relay.\n\ - relay state : Get machine readable relay state.\n\ + state : Get machine readable state.\n\ erase : Erase epprom.\n\ rgb [on/off] : Turn on/off RGB leds at current value.\n\ rgb print : Print current RGB value.\n\ @@ -50,7 +50,7 @@ inline static void printHelp(Serial* serial) void writeState( WirelessRelayStore* relays, Pwm16b* auxPwm, Serial* serial ) { serial->write("ST"); - serial->write(auxPwm.isOn() ? auxPwm.getValueA() : 0); + serial->write(auxPwm->isOn() ? auxPwm->getValueA() >> 8 : 0); serial->putChar(','); serial->write(relays->count); for(uint8_t i = 0; i < relays->count; i++) @@ -61,7 +61,7 @@ void writeState( WirelessRelayStore* relays, Pwm16b* auxPwm, Serial* serial ) serial->putChar('\n'); } -void relayDispatch(WirelessRelayStore* relays, char* inBuffer, Serial* serial) +void relayDispatch(WirelessRelayStore* relays, Pwm16b* auxPwm, char* inBuffer, Serial* serial) { if( strncmp(inBuffer, "add", 3) == 0 && inBuffer[3] != '\0') { @@ -106,7 +106,7 @@ void relayDispatch(WirelessRelayStore* relays, char* inBuffer, Serial* serial) snprintf(buffer, SNPRINTF_BUFFER_SIZE, "RELAY: %u turned on\n", selected); serial->write(buffer, SNPRINTF_BUFFER_SIZE); - if(relays->printState) writeState(relays, serial); + if(relays->printState) writeState(relays, auxPwm, serial); } else serial->write("No sutch Relay\n"); } @@ -119,7 +119,7 @@ void relayDispatch(WirelessRelayStore* relays, char* inBuffer, Serial* serial) snprintf(buffer, SNPRINTF_BUFFER_SIZE, "RELAY: %u turned off\n", selected); serial->write(buffer, SNPRINTF_BUFFER_SIZE); - if(relays->printState) writeState(relays, serial); + if(relays->printState) writeState(relays, auxPwm, serial); } else serial->write("No sutch Relay\n"); } @@ -240,7 +240,7 @@ void serialDispatch(Serial* serial , WirelessRelayStore* relays, RgbLed* rgbled, { if(length > 4 && strncmp(buffer, "relay", 5) == 0) { - relayDispatch(relays, buffer+6, serial); + relayDispatch(relays, auxPwm, buffer+6, serial); } else if(length > 2 && strncmp(buffer, "rgb", 3) == 0) { @@ -348,7 +348,7 @@ int main() if(doorTow) openCount++; if(openCount > 60000) { - serial.write("Door Open Warning\n"); + serial.write_p(PSTR("Door Open Warning\n")); openCount = 0; } diff --git a/pwm.cpp b/pwm.cpp index 2f0e6ff..0fd07c6 100644 --- a/pwm.cpp +++ b/pwm.cpp @@ -25,7 +25,7 @@ Pwm16b::Pwm16b( volatile unsigned char *timerControlRegisterA, volatile unsigned bool Pwm16b::isOn() { - return (*_timerControlRegisterA != (1<)jxheY)ODD$f|%DAhH>fnIvQZmjos(3M3}ru9JjJNH8QJ35(WhCILlU zNJ0WyTS059^|7tE)U`VHu@>7tMr)te+CDlgDz1bY1lN4u=Wd@npG=T$uiqa(FJ$K2 zbI(2Z+;h)8cb(7Y`urseEX!gl3}D4f#WH}5{)(}|_|9N1Hjqtc@hpy~cc={b-aTFX z5#0d%QT~h>1T^t9HxTqUM5a-C`ApyjH1R(~S+tQpyyJm^!#n=)Z}{67b0R+8+S+wa`6)bi6>q{H_h`Op8Tr~z=!@4p_I>%MIZlmk6+M3kbii*?*f8!NH z*@}kJReq5GgzK^k^Omg02fi4Q!i$ztS?l~mSspUhZCK+%Mk7*l;?n9@mFd#z>Z@uR zsm#>6(#A%AeNAdzy1EfrW6;izi43M(=Z3B6Kv3AMTDB;QjJm1OF}`e%c{z+ za3S#TGC%U8`8}CsRgJDn|3+8Mx;1Oc{Pk#&^`%wSrDfHA*L-0W4Rc&WDWe%G{nd45 z+<@n}T*Z~O8(fW*FrK>l+BJ2JDSh(y6-#qK{yd0#Q59(X4Gk_{q5e3CYU{iL00%GE zs;j!Rq4C5FNbip9E*BUSl8vD`ky=~fYA9U~s|pvXp+A{q!zpv+N+*^JVOA=w-d|eI zbu1KtUWsIefz?GGyHLLvn79sl`OtYp&@JAg`1X+qpSdpuyvC_r4_mxwW(Wlyk z=ub|br7tJ$C?YZd(;g1&i;F0JbzSvji0dzQbv!ByJmTDh*i-jAl?&LlEZ z-aq;Z1*W1^6${;&BeRL<2DpaEiRjG9F6o6_Yu3S9%KR>OWPXZFbwse~9q`77WH!|jo?K>kLunE8~G)6~Lz>dBq;K+8x>x3cY`P|A64& z*4Xyl>3gF7a%@Uy_ko8)R&Zkb{pk-!?K?Iy^xOAe3k?cR+WEB=*YQOB-Z`&Ey>u+D zqcM7T$2p^hV*>Em9bb2~|1$8)l3#xQz0bZE-KpZozt{9wbm!sr-uC$IiQBujzqS1q z>jUdM*1@==r@uVcs)t1;6-`3lDxb?*ODA(Tx-n2bZ zzOMGS+QZAd%6i{g8Co0qEpiPU`XWAihUbO~Lr+;-rsQ-}+!ebxwJ=l{Dha)e*tDV5 z`|11lF_l)};NG}bCwyw<2F&y$$t|HnDW6(Rf#YL#_bBSU*4N)}ifx-XA}Oxp{^6wu z0wb(o$pOLXla51OtHIr@<6Es=t;11@uf4YY`u1(@yV`%={#?6Le)h`$JpSh6w^)~1 ztF5c8`H;H;bs?!Ij=1T}nC`~lr&dc~%aoX&+F!FU>uU`)g{V!acCDc;@pmN7Lz&N7 zwZ7{MEO0$AaBE=O_M7lW6p8KIwr>r!g?4SEO2Q&F{AJSX@W?hzG5*ck4sH zfvm5^5cM`+Q%n3Wj(5EIT>P{D^IUvue5+F*&$a%%byw@Q*6UkqTYa#CRWkqKm_uC) zAjehv?Yh6$^QpBNHGiqQ_8n2m;h6Z#5(|#&)}oT94fX5P*i6a?ybwrCbntET!aNMN0jACW-DbpgfZ8LA% z`N0>h0nq-Z3CFF&m-QC70@KIdex%y^zoZu}YNK0Xe=xBrzAZ7Xehq(wMn=v zwj{@`(B-`aO}w z#(fe=zAaq7ZSS;&e%`eZ-28{^8t3&0DFUIUma>EOp#fcssJ!=ViX2Ii&|D4dqh062 z;(uWY3nSgV_p-D9TnnGG)l#~p-bno>&_j8C5?l50+R)wzz4CC3s;SE1;W_>kTlLY} z&^ulEkZaWkYq`H5em^-%{5s-aPo?jj@q77qdwgR1Tj&>E_}jMq)(`q?lUpCZ>+#_` zs4eb7&$#tD)kcvddyPw03%QkKIY+;?nnG=DcTAboeTyfjdzfGhLE9E`ek;*7THc;gZcjOJHSewsoWcOwbsq>@2Y*tW~n{a^45xut=UKAnqFpjhuyY{TD0v~!%IPZh}$^n zSEarLo3r)n;rdtG<}yEFQH@`Vss5lY^vkaP{5yH~ z-8=1mcne0z^Q=pdbI;H%Q%*gSyI*-k@v~)CP?~%I8LRlFhFUDP^Ikx8gI^HISV~%kjn9$tOC3I2RP5!*b;8gNKedwk$M|4-dr}A9a<@5|< zWUaQui1)XF>#eqf@5LRNaLj6I33w{I6G9BWj(ZjcDa3V;)HQVaM;2{=0)_BGCsELembqL-`nI$`97T5(+?* z68n5|XXw3@K_4W9rhMQI<$VBO3R`^HTF6rcRduY0SI5F)uJjc=Yn5JkeSxs0ow0#r zDr4%Q{V7M1haO4@O+N%ahrs6$@rehYhleM$uN}~IpdGV@>CsocOL&s-aLke9eaUxO zlYHkE{LCtVEtVW0OQ5t>QG)-t_9IPd5@XnzzTR%QNB)7Zro$y+2JFsh?lKj<_hf+3mjhK@6$!lFS=M5hC z18N=D@$=zRb~J~AnXgAZf2?WW*Vc&kt)1^3!$`NiZUFVj=+4CU#9t(~k4Q@0e(v@H z%%^s3KfJwndv4o{%+>br0C(FX16-q1VkL~7##a*6wU7|FecH6`1=^={N7v>d~KD3az;1xwcp1~+Hp*; z1)ThEwq6MZL&q(vmAT$K=Ghqrk1^ywX@(rVQA6#ONKqe=kPVL*H5I?!)q}+y8@wH*is>ENm)K9u+2IdAT16K#8j?Idy>v@uM`%cU1medXD)4sO$ z$A6NT6qvQ$+Hr_$KDtx2@XgkjSXsDGlAEkn+GX?j?Zc=oKjZDDY_u`3YUGgM-m!m) zs_UlIsliD*ZW;T7sJ)*&pZ)6K#mAaq^W%E{-sRf)Qg>eA1u;v;UJ(`D^FBtqC#>cV z$Ok<)R9Henv+5^g^`cMMGlA&N{U7{2G@?17d1Uh`&C#8qHp}X68(_Ht?lxuxLam_( zEi34apVRsNv5ZuAXWA5Ziz|?HrmN-M555R_q?b~;a#1^GJ!1_BR>W^eoY}em*qxTE zGieH_KmMc-wJ4)s{{7~#f?K#eO`XkCnp$rB;LecpInkXJSpSs-l{_a=iwLEhpcWD8 z{GX`B@Q%!3hmHM$53PT#MncB^^+qH7zT~Du$5Unm=D>5XlmWpVoi}z4?bv^;dCK-F zrI_l)W?GuzugZJFq8kOIvfvE!*!2JQ5hOV?z7s?Sq<*212u_w<)Q5;gh?t z*53wC`8VsMwlCXS1A$PxJEn(xkHC!Bnb1rrO@ZbT8h3<8itG4l_-$Bm&gecA_$(mC zq-|!rtcmN4xSX;>=*}h?JI+EiJdSy*ca8bswc1n)zWn)qH}iwOwaXV^zDRKueujtLoT)tX5Qu zzgeSr4G9))R@^eLWmNN+=F!b#n-gvralXwQrKj|(B35vE@1>FpYsN*`?Fk_^(b7J%9%@cWxD$Wyc5V@)i zzSXf`TBDjvZp^!J@{Q@6JtKw&%i=do+mN^*{-V?iCgz_xqGx!=pJIoDUuj{9=k=rS zq;`iwmw&NrIQAM{Zxpl+hyUI+GqmKu z7hNg)mhC$Z-1+Yv#b?3cp~0E>TyFSMo=PkmJ>^q+qJ(v%H3U+TG6R&iSS#`EjZi} zwYNv;c-!IDk6ocaVQa1{ci%Bu4UmOmFA%xtU&+PKcM)82@oQbxhZLWKe75}|Ec2{5 zwB3l>;LV$9SJW4z5(MY(Zzj+DJ&fsr5x(HDRi(S3>V>!p#f*p3ub1)CT5zye2onM^Z!#d(R9*V!{tEgAvI-ZS>`f}ha z%h1OjiZATU?R0le>O8lgpukrU-PzjN)LGYA+IfA!wt`)Ve;nVNIJmW^Ei@~p>Z zr93eH>G5A#vB3utpHBQZu{ZIav5!O@j5-?S>b__EBf}03J36c)aYN#k#5)pC>!>1ZIiE&1-`hYmiSa!&B`5Ygv! zyY>;)o*s8FA^p@Nz+#R2;D=jNZcn~H`N7arDKml_L+=77@`m<3o8k(Vgz8`$t%r76 z@yTqsci4(yq~pcbrPe9na!JpYz_#yhnH|&pRM)A2$vXy=H0?X2IaG#zkwRXmF7!KV z8qZ%5y&?K*tMH@QDW13)p(&&5dQv}_6hG55t|#Zi^pqjN)c1Jo=#2N%Krv;OJCri| z+`)hAS@_kM;0N{_kMC_T3+|8w49#G zjzPh=jx$Fz$G1%cMe$5`@RQSfS~~-sWVdZ2FmD{$ly++OO@*5a_a2Mx{KER1l~-7p z>+Zg_&1!8r_0%5bdh*zo@plZ1?z|?nb64xE8+SF$YKt9_6y5nVSm}EQjzEebqhfD5 z{iba<-G1xTP;$#@Eio-Sdj|xmwXL1x`+sKTV}GRT)@yDRyB8}*EDc;4xag~)!PG$Z zW?DH7@A;l}oUeounp1Whgyl~j^&s(ohxi{KS&hBDtym3>#R%OJ2=qStJaJlLeQIqF z9J986wYhD3Z=mgZi~QDu&u>P}ZQN$`gI{1Z7S~ZQ^4+crl0C_;kSlF>&&_F7-R_>I zv`e~M(yDq~rOClt({j3-(sOzyl}rszE=ekx5}aN#DLCz`X+if#+3|DS8+)eq4nZ&Q z-Q|V`ic>}gw}!GgoSxz;8y>t3eQfGi)z7=ihXilQ9MR*d91z@+nb%`V7#Q(<*X^mh zzT3HcyL)=iaLkN%9k`<2Aqd+uedba9MD2kWO4~YKcR-H)(#y1n<>t0&UkBQJmeQpsVNS=9P{C;z zMCXmVV9?rQ?*unxj_AHAGw0}WYg%tquq3cH&>YwvpgKnLSX2rdzGc`Q!>CrN>+4f? z_QnLmdxER7K4m6)!Mzxbt{-`S%KhWK!OdASdQz`@nB&g~{yp`x>z_;6mic`5xSlPu zukL;<*pzi@_m-?l-46v*Q(dJGr#$*~Z1Cn;n@XNYi3uk44h`-~-BI!+e8P0_9UOG+ zb3^8K z8X0sGcGT@XbA}fuUp6iQaGlipS!l_Ek&kqowfSh*BcsOk%pEr%cq!~Q10DwLa-cON zD9+lP);l)n`D$Qr%e$?p)t0wgai%kzmvTwB2YvA7{Z_DPf7VyG?pLk$qfyyZ3V2W% zmv$WMdZ436%ByJZPB_|??uzLteA%>uPrE*~ZV2oQ3<%O%CV9tx^vqGC?wGb^8qJ{x zx0V*xA~jS_+U!l+`uh?AK;WO zC#tcBRw`ZS>36hjX-Q}q5!aw-&#ech zO?O{##N`PbIn+_Rz2^EF?84JX{qur7p>tk&G<4Q0tKv5%-jw*g#JeX}#$TPdHL-2t z-4j>Gi&5b2iLO^-;5pB2n;DwAYebU!RQDC0?QeccBlCjPg>|`C6#vRg$3E>^ zkXnHFdFkW27hmD|Dz_+a`+!$|a_s%CM?*jE+==z@2FxL!>U`-K+e!Oj(R_>_nlhy0 zqRxe#S)J2(T3LKU;-Ll240STb)uc;Bk16sT@P80>btGzsYe^<7URC#HGb$#0@@!6)$JFAttVliMvjd zT+3E0otIxU$92X!*J3ZeE_MxN;T6ZZn-di*NO3~O^hzOF|UUe3}y3&GH;r=56ak#sN!Xe4aHs0 zayAH`jHMfJIpDJhiO_(*CIS$?kH01Y5PpxpCIS%tj=v@X5JuzfXcLFP(|`*N_y-1j z(16F|!m7$U-+-$PIB3A18StQicHR^NKF@$JHsC)P@XSGW-dqE|%z#@Ac#i?^HQ@aQ z{FMPu#ARGnuX7CeN&{{&;GY`ss|NhJ0Z+#TUd3~n0oNGtb_4#U0e@(~qoZs-^9^{t z0q->6#|`*z20SF%<}=fPiw!tn!1o#OZw&ZD10EA&^UOEk8Uy~m0e2bjUk%uTp(|aT zVZg-(TxGzm2E2#E-(?hj!{O^V{3eI5=Wq{)n>ajt7?l;^@DvU=b9gR?H*vU#!<#w0 zn#1iJZszb#4&TY)A9DC{4&Tq=KXUk|96rL~hdCTSoXUNi!^s?ehQsG^_yrEH;_&Y{ zyqUv);qYz_zscceIDCM^uXFeihmUgjBMy&IaR3t}Jcd(2r}!qCiNJ4?FeP~z9G(nb z$)BQL$S_FbqZqmn4_+1{B_*0+3{5EU!|}@j5m1Dz8Dq-;KY?)7b=0K{Ti1p9o%Hg=G=m#b!!8$&)Q%lILsie~8O7nZrV! z$%Z_W!{i})3SNc=m%)onwmee}d8V?-28}Jx^nT^ZL<9eU%ag_kjy;3gD2>ZARl?NP znG#lYCtVRejrE%(j4#MZ7!kbqb%`zKY-mN{XS1mW>^9&`1D<2R=V&++Wr*NqSxodc zDmRNQ*Z6GAMHJ0kR-xf+wpzn;SiOelvTF=@ive#n;M+8u&30(`Z1z13pTq9b@Y(EV zfERGRWozpW0;gmP0akgF06&aB3S=jTpxZ*^O+srB+{*dn8tszH?SHq#+igTWOoSB4 zhhkoqCy*ST$C72t%jPj#&+|~42wvnk&wwx0a6Y@zfNkC88~R+xHfoy1%+}|5hThI& zyEV-c_K=2`vNtqbz}_+7k2QQNJFeji*aSWrP#te(E)CzxrfRsDO*i071D>Pd6>Oe{ zFJwy$nC6=lyzC-YqT!3#Y6Gs<@TIKLfSWaZIoqP)D_FY$cWBthzOUgc*rOWuv1c?~ z!uD(U3f8URGWNBG%USdQC386&W55$MT*0Plcohyx75yrfq2Vfaj)t#dg&MAAH5y*S zt~KBe4cD^W8oq(utKqfmK?8oufS=WH1A9@!jqGIu{-cK1vo|%ok#%eMI`+8%NAnSz z+OCNW*KmN1(Qpf!V8AmqyqVG5pMsa&z%n(wm7S&Go7p13d(a1)Kqb}Bg2}~3 ztDo@SSW{ zE>ydO04u*uc6w0erG9Z*9AiDaU%bR&F`s$K=oc^Xz99O=OL`uaBJ<)4I{z(w@!(~@ zle2Ha|Bksd{(p=<^0J<5dD%gukG#X|dCoz-C*ozVuw2dO6+ZS;)XVt8_%HBqB6!(fnLX$ED{I&IzwtdAih9`r zc8|s%H0C*f4r`-&NfW}iqNg@e{gK+}Wwg=6spPv3aagp)A>J-x&U1*jm+)za`21hA z;~_o&r}iQ~6uj&`0dV*OL+2kDe(7U9C-<_$+E;to5ku!k48L^5m^XgHYGesmr&zW= zkFt9;{-~~_mmOnIX#8hvuK~ZV;V;oq*WY64u2_HAMx zF+$%2IG25_*K0xGvhjC2#}BmRaKs3&vJp%=zvmlxsO!UJR>{3+Q8CV41OyWGwpx%Po@p{ayVvJOc> zsVx-jWoO7%Bt1;kb@8%k)+oux%VzR6`Vf3J0XIkrN_!V-4NLIpntm9UgQA2-HodkT zrSrOt_D!=$CJI>RTA2a_JlnG8GnqzPWLZs`CdabpDs!#xYy8<(P{Ze1FK9T=`n`rz ztk*T{wQRqUZ;`K1^*yL%9>%`Z^uyTKfYqA)Lrt^LBHxlYP3Wpy?q zK)M=(yo%?bQ$%4{Jz6xsRe7T|ei)zYD*B-sztoy6Th+^!St$mbrr{;lIR?+^I`1%+ zt7(RDU!nM?XqqBx0ccbmGc^8bzSdK6=4$*fcCo?pQoxGm0!_2RB7dmzo~QA{SeZe; zMB^{E$~DhRtU3d3)bQopXOb344_h^UiM2z+mssD^@I}^-HGGA2zlMF5J?|>PZ+`5$ zKcMA#n*9oRRj+3>{&MS&z@H6!$Ym*39Aqf~+{Dr>e6cGzoM9ybUc=$p7Pc?hwH(gj zeg9?-&$ZO9UJ&UjgaEuD<)pr^VDfFhf(+k7-XyllBA5d8GX;Br=SX~bF&m4P5yDTG zF!5AFt zre~r|#b`YMQv8&|uVEIz*sC0V8D5#Oqa6M22&LH|ATLbuP4nNJV16<1CU$EN% z*Kl|bqc;5xhaY730p7*o2iQv*zJvV*u#lmHy$AR~PIEIm4)_%g2iUv;nD=t{a&|f3 zu`@}Ai3Z0y^ghh2Qd^E^I>rm$EXzJX)T163rOBmiMx;dVkUjjzZH! zbE+{{KTXfoNj93RQ=q!uj^gHX*(Pw<$7P$qWm_X*#gpVDdJ0}PQ2-oPs{+C&8gmSn zUbj-YaWV&$`(yCg$jhC~VNvd6PSeTD4L{c-dJ6rY>m?cMlq93>|M(f-n<(q2T(+5v zU?JN~uIJxz*=FjpNGC)?!OLLyGI()fG+e{8j5bQu=apVqs+cuU-gGYWpE>_z-Ht)U z5Z@vEVXDLf=~Ka^&mp52+s|d5&0!()Y_3ls^K2~x$xQSVyt;=FoTX_9mLwcMS&#$H z(d812-M{AY{`ECv$OV3aqz~d-&4xmN=irY5$-jt0!VZ_Au;|%@KZg-4dtttSnRfq(C#ATSv>Bqn@bJ<+Z zXO@Ib`yrlcd{O+ppjW}m&Nlp*utQ4oV$_nu7vOVrKgB)7oT2-SG1_PBGnZ=r;ANF) zKM^SJ0s~flgYe1@ysXr?&#=-s7c1A}vX}Ywewr7jWli9z#_^&ts;sqq4_~y!mD&!2 zNLKX?0dB`11!{}CI3)bomEiLW=r)Ocmk~@M1%C?m0#8Bd)5g0vUdgjs%ky15j!;=j z2C8>8X#N*vx#Y~?Z4M9OeCVTGLeze0y?G2Y3Z``BBO3rW;g7=i@z+EE!nbQrp@(np znhHI9d)KsyE8^R`rvKi%rk*VFIpnDryBm|lB+T~6zfmCnsbHKdaU6Z%EQ7;pKe5D1ntqgZG4P82D;htO`)kGjb&ZcQ#;+*jEH#QLgMs?Xu#0UgGh;POJbWK0XdKh?Bmzf&xX3tVa1k!Pk00bJdl0ox( z*}epK1I|U8(pq>3re6e0@p-!w4F#Mb3V_3kg7ByD(NEQ7j;4>&VFjZ~mLqBum9 z%)`lO5J>0BA_$gfj;HpeKz!2ht>jP9c}H2qpT9(75_4gk2Cspf?j8NVX5muPl4cD1PD0J=$ohTHaef{El%5Z5VX~j zK7{XkB~1FKwxdAu-VYg8aQ&xoSm-}Z>y7kJG!&folL@Ev|B$BX-`}1FdZm-Sntqh! z0$%Clj~bt;*9ast$w7f+{u5}{bD6U_EM(5s{+wuuh63$Ts6g;g8S$d`#%cI$J(AEK zf=lD)7;CpYEf4J{kWZjMvcYZfK(ZyA%2+3t4J`&($VNBZMIhM-Pr=Lb1t4Ktwnc_) z=jpcavhxku78tTEHDp_+bw#pe%MwVoMJV?%E?Xgog=~eIKgmWk6uj&L0dTlj!^Bhd zLgHBn`qw$n6&w~kSA_8-8Va=MpaShVs6af2$O!Sg5cE-4j3i-yfMCJ%GR|{4@VUUN zK29a*$2mJr)_kjE0mztzkU7Jhr zcy5%h&nLe-3Yh$Mx`b)5*`ltaS78{ z`HF67riNy0Ri z9fBVAL69V@i3t7za4ujuE#h+o!c%bmUQb{NKS7V11S>t$c^|bA1uB=?jslhYIe5lk zT9bscKY~TMiDBguo`P3vpWsOX$?=nnvL+jIHgP5>@=nonHj+Wj2S|nlOf)BP8P4Fa zkl_s7?qnxKLqY8u2zZ)N-|0rV({+8lum-j3;AJzQQ4t7s88FF20e30&JdJQ_-bixh zB6BvEGnvCe&g3v%5e)?|nD$vebU}gqO*@R2GHxysRuncu`gsFKavSbWW#q zNZeIkubx4Y3^|++eGqKh!<>F)xZEKF$&*fRfh$a>tB^RfFwy#*k@6KLQs*3uEYMB^_p{Kh558OJ5Yef!Id z-#A>x?uL!pL?;4|h*BEWO zhWj-d@kXM7=dh3@loeNg!k%Sn+VwM zYuD>~QG1b{Q=oDuqbxTsH^5<0ZonuPzun{1qFkb<;MF@v1h)tz$F~@Ld{e*WrbN&~ zx#U9Qv|7KELN*0cx*9XTJ#P}qY8hm&arPMSx93elKi{4=HE~6Jd*1Z#J#X3vM-*u- z(*b{_o*$BfK{yF-`y^j?G2mRlG*_vWF!|N*N?46AoZ4W!=ony^O>6aQ>Htje|r(!MXP}M4*AcQu}SXBcbN%UaT(ESU`9=obvLiUKB`% zI`Dsp%dnKgLWZSWhF7>eOEn*=FVRz=`H~7=R$z?Fg~pgtq{lBW-mz-Sv)mYqSLpGV z=16M(OwSXr=TVpFyELRfHLj2Z4?>=UT>df+3;D~!bVxK5ylkZaI9zVX>^EetFy<1g zjJZUGo(qu-6C@{+VK4Z9$z>SKVIjj{PCp4(a%qiBbx)Qs*-w^)ReOO5Y5r6fqM^|Lvuj2hwz^pBme#yVw_cpCDO;sAtdfoHohA$R;J?_gnaRfe zqBHcqJ+0|-HGQ&iW;f56ho>6z@Y%-PJI7eF&qJ>gfzB7oHGHm~W7F9|qsA{V?jSAJ zb8o6gv!o&2)}z98T(?ym7P_tCI=O}Gwkk}wL{GsvHx^jJS8F?=vXq@rSsRh}4qjFb zhecU6TIbYuL_@)OH%#%Ndt$b|)f+ZeujTaO7cOcq!V8T^mf+cF^!-L-J+;p0^KHEBdgHwBdVQAX1(*9ZpBs$3rZ=!( zX#9=FZ>YEM-(*pe7f*Z$YML#^Z>zWRdtQQOEBlkCx!HK;!_6$D@wXUvP;WGz^Kg^# z+sT`Zd#AS<&v|HN!!5yxo}r=ckrGV5f22UL{VbX`{<|=NZ^N(aI0cY^0u=I4R;v7-R@xZ2L2kr>U{IKyb|waPxIeU)7ppH ze5iC-UUrA^EQnTiyXMnsJQt$PcrHX6vwxr1sh<&%1fEaGywrc);Qtiwzjtz2^xr#m z|Dyg&G!(r01~b7w(0+iP2V$Q^-evUP-A13iThCj(>~6#NK4bXX9~%AihlcNc#@P4x z5g)Jr2$@Mgby_yJ;gj7)pLO&7Ql-zWn*K+|9>@zupS{o6JG~D#Nk#DDMuOdcf5Q8( zlHp#>({1!+xAw_&SAQ$mC>fsB^gl74of6c)%l5MW(wZjtE-gb)Kik2}eu^iQFs5X9 zQ}cB5XGBmID)$+kSKO&kG91_RKQ;RDWBRUz7hd3Ho%b<3AwvW&d&KDDj~e~@G5(uP zqN2PXOM0@m9to4ZCE(NOTR{}up; zUohZb_bY#z%v-Lg*OXS(q^zu~W2u$3Yy7Eol~vVMb#UFo?3r-CPU59tVbGq3x&Mr!yn+*{(iIJMwH?^X=wp0|6)i)86bFSGl&Th!S zd(o@sp!A#>XHz|MX3U+Ho|cuFJ(oVS<|ac8nRBbwl&%s)h!J8g<0A5pbu|rDtLWjw zim%5_3dxj;b3-F@-5#a7uy4txF9)vr^faM*59gqC2?ldn-yCQJ-cHm2syKrVuXnE( zjS8LTHe?IV=|r41d$w5}T?@2|U5gA*dSttXf6aAkvxrnT%?@pt+n}m68|>0-K1yKD zU@lX6a%M28T3dWHwiZ7Vjpa$pp6f}2N^BA|Iafs%)sCkLF1-HW$!!<;gg#&exedgH z=gAHi%oZ^+6ef6B^&>=NuR&QZ)qX+**q$K*Ob{(-G6El~2G}RhAWTyjw;={+&kIX~9Cl|+lU9l#oGu^@=4hsi8u%8}m#!4OISmFT2|UD`GceO(IVJ<1-iJuq4y54TM%TP=aj+Y+ zI8A95X*-oP5=qlIi%pjepei3u*oRtbUkT|eE^T!65is4>HP;8HGK5RF70!j@>3xcF zXx%32Lusp@YmQUudi0gfZVg*HO>T;5w}>sKChQ}H-74I`!lmHUeX`h%#08h4=B-@0 zZVfl#47+i-1cHH)?r0996obfajfjS2P&(R0*VSjxIGRP%^pVZcD&d5EsO?6v+pw=b zBDIJqT%tr5Xq3^8ZhEz+N&cwKXhx~gP$Qw!IkB!=CR8QLAYvO0%@B1Or`EO1 zgeC|*Tky8=s6F9@B$*jX6jYVa8G_u#qlSdXaEL;A<#~m&P-EaB6Bpe`kTpfQ$l$B? zmp15%Wr_Nt+B}mZQPet9)LNwJN@j_=tKyugLIs&-nYzMRLJ`o1QK+3N)RCEGh^s4~ zC6tnxZDzGog=#V}S)!U&7!}Qy+EEn^OOpzc^`sS}Qa!Scl%^|@Ew!Vn7@jDVBWk#&bfYwu>~Osp2~L&N+lG-Nbz+NXCQ7A1#1x-< z&T?8=D9FxXiC@Jn&Q z2#8fR>sE%Xt8#=s(GKQnD@XP+pc|^L(Jbsv2G&>xN)e&G22V!Wx(dGVfx5^Wc(O=V z_>6TmtNe{&l2uffu4*6*%se?Q1F}*fJoAj?^fby;?XQvXjBJY6t>Y|mpmSoL0~HHb zgU(0kst7mq%S(4dmy#k|h*4hJSjxq4L#0HMF(WxgF3}b&UXssyw8t&8DuFZ<-bq$qLogT9ZXY&*(L4&_>x!vuQv4?3Oj6|CATy{|vUIXQCXejbm zmtHOVF|C6e(tZ4mP@)Tya%p_OM0ifN>d#&V)>*H+j%$`!)ft;-N$KxC$*82++&g(9y7Ao{kp_{$dzj(gQ!~L zuf+(+4JJ+X`^XgxvsZ`29=FXb|7vcxRW;fwB33ek2xL8LYjhJwP)AyAjkNOGii#5v zrXyWaq95tDR!&G(OSY5;R@r}x&E^bjX89ZI{3{#%<@|+gLI&C}G3`+~pcC@-WP))R zGg-!5R=8n}C$mg;!E|_|2CP`nKK1j(=6aET751$C^?7nsrOg%It7sQx9=Sd~iNl;l z4&nYjInX^t4s=M$L8=gQ31^mhsu0X&#Kg(xuPMb|xGbG2iwP7wfYi3IhH@;PDnH_h*WmMWKD%H<11qE{4NSXu1x6<)ZyINgW; zm1SkzGP!KV%mK1-M=A4p`p;J$Hh)Q1{iRQxNVafky!NyOOw7Ww&BDD#-}J6)ygE;s znlj;tC55}5Oi_(&bV$xYb}<>9rx_YmRl&q=eN$RSG0_h7f)OajQm5od$)3?+N$|qT9Cy}9s;fPubZy&>T zC})K1hNQL=;ypE6b<_+RE5EU$iUo_alNmkvo4O&o!@r{&W~c!gVhb(Orzb-V&=TFZ z8>;RozE9NsX2brn%XIHU2gLvWx*p^q9m_nb=Q;C)ce@PbO8V5nunWPl-(CkEcDem@ zx(qemM=VFGKw6O~PW7X_{7UXOR8se$yncF| z@GwF|O&p=aDJLV#R2?o-nGyRN?UHgo5m8}bnu^ffklR*|+1rX%l`X*zgjizI)+)9H ze03YvsNO^J!G6;XlhSqGX#?c9AsbR7idy} z7|t3?>(N9-HWTa)fQdjaw9#3dw?Io-sO_**0BU*ztIar@51)i9uJfaUVqOhm>>Yr( zu6BdJUSdfO>=XbkD^uL)m&-cZLgq?`W{e&^8*YgY^%^afLqeGzkHH64L(^mDh)r9^ zkr^wOVSX!bD)>|H7xsp(9C6GAcWUiSNspc%PLHlrTw7gLKEJja+X#FZqCM*V1(H1^ z{3~24PkI>F{K`t*O$$pKVGDBP!S41q7vx|~^Iyrt?)-)IexRlFa*`n`oI~V1RZ^=# z2hC~d#qI`rPzxt8`VlxTAo~)!Qoc(!KW{8p1%1n&9bN^jyEp@^yJ&l*x^`8STzG{S zIh&{0uBJ$qs63V|QF$y`WO!K_)R$})a%upvjJgwza#8>n>S7!;3nibbhC-NbQEe^uq8!WUVr+fMEldxcT{L87me$u}c}-(2omG_5 zsjY|3Clp{DrvUWKo=XI@V8Om!cE()36z4me9w^q%uW6}%AVePc2<${)7oijzRkE>X zd&n(uk4GqKo7rjPlCYI~sV6Hxzp$uasZVSP(P7T&$~g-_hdoKWAsc4eFsG2RVT+OP zby9?mPfqqqkl$ZdU%Muyk_yX|h0*qokC(-ZB6jPl@*JgsJ||2#IA`p#tj4yG5)k{j zs~Rh{e8`b)me4l?DBQfJTtkJP?6BPj-gJd>4qYhs993ETh1o(E9y%`K4i*he@6X1p zhYLaTQ`R7MMY*1^`NOK_P&-5Iq=9tK##_};SBf`;pICsE-yi~xM&_-nsK78rWnn*! zVS`3C6^ioIuPW08Nncyom**<1>&k`n=pQ7b2Q{)YqHb83_RR>w3{h2^R_xODQ!C;8 zlzNp~vA<6>Aftkbg&B9chj#?jOSUubFSbTuk>R;Xcx)XuP!IHp_KGNrDw{5$aTtd% zCu`2!dg^d3u9Bs$Yp72xU0sD&81hdNopO>-;tIX__ILAHqt* zpsLcDA0{lzSGsx4F=rCdG#y3bQM(W^yqHM!@F*5E%(rk!!MwaBK3~JSGT&k!>K(Bk z(@_QbF-G?}7jg|_aMSLG+($OoFddTGG#EWh8u%10aTpE!eHe{90u7w7N#n`rOG77} zCQXKLePQxsnJyDDr=|DhL+6CL0(25;GWDeO&5-5vqr%j}3q~h5`DA8B;Nvh^Oho%A ziw;RmKGMI3mqk5KwGt{|L>$eL9-;au!N}lfo2*C~9Bq>pLGN_VYKk4f46+?flhe2I zbn0qy$%;VYXp7kqbVz5gCL50@+pd=M%nP}Nqhm>@z~kAD2FeuK;8RYv!;4} zmJpiCLsRLKJ38L{#}4k0!#=mmfvErRu^lo|)8iz}Jhj6)BT0uLfe%x3z9~*EnefnJ zJw?Zz4JUtMM~9#^1xGfTN6I}pIuWIzP-D%L7c2!LpVxsGpUDYv=Btgbu=6@PP>om~ zpUsAE1PMO%nu0~BJhh{;degpXL#3F{N+X@vg&X-do!G(LjaKK&Rr^p+pV$>) z1}rCi^4J}g-GD7SUnS<$i*a3Jqu5Kx=F11#7-=l6s&*vE%@OG+#W_7LAxIZXhu3_n z1pouCygELY<_oyz3{}t)f;J@GxSJ2>6SgmoVT~)(LkAMJn?Umj3({z=M~~aC(BdUk zSit1x_vI3!PQg!ZyH_>juc>RiS}b(!<82|YgZl~CW=TF$X!|tYKH(ND zsSQs~6XGzQ`*F%ZSE$XJtL~yYAl9wCrBwl9)A$4;%ftRkaY)KNq0|B_(kw}iIIC96o@})MI@vi8t-FP@;OltvI*wx1SXm_($8=QA2T{0UtjH9x zJvc|q!d8kkD28AolTtOV#;9Dznjh{$7DY2=yCgZ9()AXV3kyBIAjeRTA8PO=8SKc& zWS69~2&ypFlB!zM2)1+qlCGce9O$eJI}d!VmZm4#!k609Pg~qRV;yHsTx=S90ON@c z(dAtbC6t}5&nTiuu-~a}X>qj(RYdYrx_63#p$)sG=@6W^G|3azE~e~~gKRcsH?-unwAHoWS!2} z3;)Q@R@mMVUm%2GYz7J&e*4fls!>h6UvUPwpxWtqmeE7NrQM z7tX1ldo*CghvRVK6JDdC1xbHphaY4+u9#p>5b+KT7)Fo*>j{I}zCsgO;{N6v{ZOl! z26oKN3pBLG>bGiPb4N$jPIP-Fa`hryo{21L-xGw$bjCpfMkaZ62J>pOLb7>af&ClG zN!**!i^wnwJ|Wi=+?s)>b7<4PK$e0Pabt>mj@kn|0jc(idJMzRCEN){BRzCr;zQm} zdS*w#+U_GVlbgVp*O60qWR?9(W$a79+p+&-(R}@k{E}mhJR?Cvo!m7mh{PASLgDbw{bmcl?%{A3Qs^*uDn;q{wuf4Ui=z9v?m_*% zulE+^gbz$7b;AnmjOyCgJ;bO4A8X#Q()(P(B`QZ7sgn8vM?bec)E(d+0c$XNQK|6!b0F1?pBfUVnN#Pl}AcH;RQz` z_;*~aQu}}O(+x2?(x-=Z=hU_$?^n`%BYmByvx&fxNk30Ta>Cy=|jmd`Y1MHH^X9ycQeI6SWd+J5&9W&+hUsC z3_3fJ16M<@z0kwhE2cwOUPZo@OyfVgQ^eGHe0D&o;+(>`n#{9d@$5*DIgn6QLuUe| zb&c!lbvD5ci4FYf6rXy~?j@gkV3wfnDvJcT5jAU5x0O`_UtkMgDb>%bPII2Hx*K$T z=2}vb&MBHiYvX_=ao%!joudQt(2yeAMtwj=wZg_$=5&IQ_tWT2&w6jI}c5R_? znpUb3b#v+VFjJLo;f$104Bf)KH6KL@U!*8?nyL1a-hbnl0r-?v+@g>dBB@_GE<}=V z5rbl#eIb&N|G&5pNp67VC2CtB$)CkplE=8 zFGQj_4KjNO(-$Jc35+o?>_VjTuqM0;j+KoNss9U+;YIdyA<}t(qh=d0L}TQa?H&0- zBv=@Ak9;ArFHPhNk|2C3KiXgO~@B&>bf+ zd{8%{m>4s7%;p&8*TXpRu}yaAFbh=Ws(lJNqEeFun{l6UL{=d}M^OyL%{w|dVyncc zOkkM}+T2YWSJ~^t6=6Odp^P@QZGMWDUmqt*nw{8$4&SAyZ31PWD&-#>a_HKoYD;OS zoD&S%k>VIK4cmrI>O2eQ&!6L(zHr%!8LsSV>dnF*Jt{Kq!XkVk zG~tgB>S3)QB9K2$vb1rHe^qIET6P^UcwX;dCZBOPNIq>6@pvMR9!Rfe91t~#9$P$^ z9_!mXkPUI+8*e1QpEYfD=?>h z-^APi%=o)GM#?iEm;Q=0dxAJCgvev62-F`C7(UOxPE2QJPgdFy(Z>S zU?#t8Vjclz${$V4FMvtd_(@4@`2ji8%w9S#c&N37C|TCT0pSspCw{bYR@4o0w_9c&3<` zslcR7H!)`dlP;cOE9IF9Oh&p%GXt2}*(PQYFq!9=n1#S(c}>g$V6x9MG5NscTwr3n zz|6VW#MA&Y*Jom819O(W*keU*u+0_L2xCgyBl&fQ>Q&H^U)S`$+VOkT5zSp&?x zn@mhKF!NhY%vHd6cbb^Fz~ukH#4H15!96BsDKHD~GcikmS@fWZDFJ5jBPOOCnDZVt zF%`g^|E!5A1!l<$CdLQM(w8_!TJIIWEc?Ala}h8FubG$?z!d()#4HEqg11aeF)&33 zP0abg6n|i1&I4xo-%ZRpz^wR;W28KJz+CvXNs|lAMFR&=SCMvjE-=g*VVx0|fTyJn zNMZxyh7CJs7-Iu%aFAs!9toE}i7g(Pis4~M2B_u?n>%dr$a9AezypM%oQP;ABF2dr z>O>54B8EE=u}(ys6A|x3BsdWxoQPALh>=djC?{gH6EVh#80$ogb0SW4B2IH6#yb%c zoQR1|#OY2%q7&hAA|^QzlbwhuPDGLuafTBy)rpwqL`-)gW;hWuorp7?h-4>XmJ^ZU zM5HK+w0wVasfBcMQR&`a`N*C4ySOmyN_VI6e zNE`0Bi{Fv472YB@TQR@5$eky?=83QQY{k4HBrU%vZ)p)e=h4S}`Y5IkFMZ_UWAW1B z^F8=lP=wF<^NT!r;%lDxnvbt#%RQ`sr_kp-wiusmArXu0X*@eVfk_kD(59czmE(?ddf2W+L|h zm5$Y$5eBkBMhx=-<2|dCfTf=!J<1VRi%o$Zi1*Z(VW58VfJz@0CgC7KsHG=g9%(m!l znik4?1mCrYi?#Ov{(OBu;+R75^w|*ha>PkfM86*Kd5F_HnOSy)6YYkX2X+Zyb*Dlv8wdD5dR+Hu`+!x;`u7q44q$pE2c;iJoYwJVM--37p0(Gu~e_NU3L3jc}r zp9B7=q6|lRFF^cC*k2qlRDPAC{Pl=8>25TDZAJV#BmM&i{lB|^{OCW-{~-teUm{*8 z-VnKg>VV!T%h@ubZyy ze*jxb=~ff^BKZ)D6(LUV5VbI_U=Nw4sm+V_a>R%iuiTt?DG(xjPyN- z)4S5B2+H4u_#rsgW$1Jij|Q(Rkw~vhNfPI>qlpd>Izr^!_7? zKZW>(NT)#j$HJcP2afzRrT-3aB~KOUZy}yJun8%ozk%#+#CM~73Y7mt#H$T?zeL=u zZ*(;1FqpVOPyELrZl)(8{x$NG52o~VBc1rqNBor;R2r3cq_-IH+u?-BpAmf};)Q50 zGy{)sL!90(tT@09 zTc9kZzZ)F++YwjtQ-8e!@dWV8mhwD|crp$Rek+mYKXIh@I^x5yFJ^a20hCE6?Zy^2@+S3IBlJ5ZG zDv&;VC_kK050E5J6e?=g{}jZ7@P~KF^fM7JL}h7CMD)d^7;>%%WDm87*P(q0P32uj z^pJ-F)#nz(%fL^`e?Q_SNT>EE`o|Gh>xBf=_rDQ8g!0~y{;UN4>tX1F{59!gFVanU zUqhVU2ic5tlJ9-QOCXPGpHC1!4W0Kseb>3xGB%$hhQDV#zp?>I`y0^o%Sz1nTm4}ddeUdq`BHLN)7*& zX+KY3lFxjSZW8Z0^i?&~r_}iB@K|@e?$GUq>cSbRpQAG0O1$5t-dEPpkW$N1%4_X7 zJ)6D0(SfV3t*xUwQ@p5p`@X0TuXtEfTi#HW0X9B6=Bx3qLJJ!R|Hdlpv#$%Mx1&CP z9mtJ1FA+a~@(j$R;%-*Z*fz``9D zj8M#a@k{kIvcVJHRj2e5{%qM`AK@YwQvbO}vXLs*tgFTk2CHDxN?z&+sxsm_nStOJ z*Fd|HUSR|~Xslo7N7S3QJkN*Ga&f^j-;(@g3zv(L)Q=Zp)~;Gd&oSfAGi#s`^qU^) zrdxp*8}_7`Y81r<#*am68XA2bn6R%AjZlXtZPxf3q*3|n>uX>q{zkm~#gMh4w7P+W zRqaAvQMHSzmrV1JRjsRTtS!YGI`PB|VpE34{h_ad`MNra(}M(kctd769w1(B$Z9_$ zfRLW_u-{Wh`i-I?hPrc|m%o~0BV7cHz*YW~QT(*ft|7T-)skWNca0Jw{)`Rj5gv1B z>2OKT*An%Xb6-*?8hPktHe?=*JvY{Atn^c#@XFbaHs8Ngct1``VI^9&8DGqhb>cQvm&qGY(j%4txyE0AGS&%C4y z3Jj4ARWt;B!y_??gSg9oXQ>Om(Vl`+K6PEstSWf@ink z(z3F8|9X`|lNJRN%aaY*YT>&(*zN#;3#>D+A0@VXI12@0ONi4A;aJ8x@U8Z}2_<%5 z7{k^I--{xCw69e@6LG}^I0YsfFhEXsdb_H;XHzkki!k(=X&Pb~=V4{ou zUz}$~pxfY}d*BUmrcHS$sIpoNnDD;=U9?iJkw)|en!WNjvHOc+^EF@M-hd*)x1#%h@Rw11 literal 59884 zcmeIbdwi6|)dxNg*93CqBFM!o5anV>vPlRDs3c?oQ6MpZSW%aRY)CL9Aqf|)t-A>b zQj{bl;H_fSw(9F^yKBZ%o_k|Ax=1=#%j&o;SOo zrn;f7rmD(U=UShhn(eA@D5-0xtX?&UEvjj7mAKZIR8^L_R@SUpQ&L?vh|QT(R9v{w z<*O^H_aW-4tanu#boJ{>CFu-T$-0fMYF`<#cFip*LtzS0E#q7kPA%mU9JKIM4p_OC7Z(>_?pi)?-aP!BJ$tsS1~e+F zQ9p&)cw=_|(sU>I54!8Ar`Qs|1a&zTU+v)Efs;ZJk#D;Nam}bybzrH=LXS>D`gt8UIAyL}>BMp#%u1!z`AW*Tj)fx7E77hSDty({K>@C; zD5+lM>$M2k?_iqM)q+3jfFj6JT*8W6)eRLc&b>D|MM;jzpMsn{`EhsQU?ij9H;0^w z%U4Ub&@->mv2{)Cyk>=X|MHd9yGj~dE7#T4`OrYzr9@`Rdr42BAdqNV#X@)K$ZR4y z1FmdxB|3A8OZp<$nsu<5QlBe5GCxJ8x}#lJ;w4ji$;$nf?#QZcs1XS%d>~wTRZU&w z{N?b7;a166Ab$hdO#$WPG&L}yI&x|~`50dRJDQ6;egVw5+E*2s4c9Ej2nQdCLz>kC zMnugrRur9>ob+7B;kQEXJpcRWhlK73Jrp{$|JeRM!T!y$t#@WUH1ID+Cxq@i@Nmcq zj%~ds=i!0-jt&j|&qsd@^$U*MeZq=syD|R78G8r5b~LW7Br2wD*svH3`Cr|9qNDZM zz_Tl!{rZ-#Zi#AF@ng66AB$=~+}hn5zcXoP$IgH3+-`kr{m?oP_r)1+4F5;}+|J6D zSHbi5edE1JgMRbv zYJDC`)AIUbj#?`MHQwfsKSWwSin=w2w#MI_G#h0;XVrMGEwsS(?Y`RrJ9b`=4^bqw z?%264)DqgWbH~o4R{wz=J2xF_<*~T7=*0W2vO{&Dmm%xD(L}w&>u-vG{8-yN&&NOa z`{(1Eu0(T2ZjO+uS?!>&jV zc?XI@wkGP^Y#sa!HbGL}8NIQC^jv+|lxZH?wvo5(?BFX_A87w~3CFC%%eo6)fk`8p zk6dGQC%x6aOmzu82=+{RjF>2R=J?HXZ7%t!{YY_9tR?Q5)Tk9&^L=)P++kxU~1imZL@+d8@33E*1YDbg5i|?nkk!&}L=4pOzYO5Zyq|Q_wvd zd*ugfLq(ilr9qe5Rl+SRKJLo**M{;ssEtcPb-KLVt`#zUHEc4yV*%RuIc}%-Mz7kp zHZ-v#+>8Ij`bf7gSu?fATHacJin)^echmdCwApQ|s72ep7E^t=Hgu3%Kj~Mcz6P7K z_3P&PUG+(AXmfh=XRk^vt_W@9Iy@9p^J#79WiIoR7HRO_=*o|3L(g{f=JmDnSj*evLyRxv7ZV!WJA@ueI?2aZ8=TgBSQonf?8HvrL6zs)4yRWTV{MfsM#2B> zyWVO!_#q!P{Y`<4iq3=(!wi5lF6JRtR$~9BjvloV8fiX2V_aawlbwOINF(R5zLkNi z11}qM1b(71ooQ(NEP_SDvWo1c2*!AHJ+Ci%f*e|+#y zU;jP%&0`ze-mtcyoo|S~FZr&v-zEP~TT|#@YSe**(8L4jp*b`H9jJxQ3&|E@UPx&V zeVE$sAESjorqp>nRZzKOMcf_xfHnULZ{c%R$raZYidMTUHjqMPoON)2 z>XDQ|2NOb*4ua1?@PT&Uu;RgIOH4xR|MY1*(2DuQu&9dn2~QG!7=0vVU&`&)IPa{& z2dqM`x3Cl=uSi=uQ1JgWuJ1#AzhM*ER}Y@HuXD${w|!{sK5~==8ME<$&Y=&j#AqOL z{w8{8cS^9_h+Cnd4-IKgtlfKBbeAV+@=*BKjtqUM%E&RSduSMkJ%>LW_0^!nP<*h` zpkkpvc9`*mP~iQ8r)~T6*nqrF8l99pRLdRj?%Ag#-<$ei>ZXpw3HhJ@v4dLo#RGo; zZCu-?md{C$+}6#y=k4nwY#}=boL1 zcXsdex4g_kE&cj-w)F3NctiKZkG#hV{Y`#gnt`!)HSg@-*T1u0-|m*fEqhvaw7|xm zi*HV99@#!6blh?^4QWhlOlbWLyMCX4=S%E5DvRwq)EU~k4_pHN3V%~nyT2vKHg_NI zSh4eE7CytKu~W>l#q7GWr5s}n_24_BowMu1#*AL%J7HPP%=O_>_wGZZza9LlwSDwY z2j4hi&%hk`(~_1Q+!NdxeaJDxH&+EGtW7OjC%8Mu?JDDI0<+Yp_QF;%pWYL3Hcfph zxMXj%?O89g@`qp4zoh@#{(HMtyi0WmUiObdJ3X>z6f@L9%u&f=ud)0Gj>?v6N!idH z8~m-cth--u>%^NUZW`S__1Mi&9Eb)~2Y^pXxjk z>KL^*${L>7|N2g=C^7nV>uKvQs}*{!iEm5WoVMcfFRfL-y4R{q+n9Es<7QWG=TR#Z ze-iz0tcn@?aT7u#9nN{Xn2KuxUj5z^G1F zs4*?7{kSEpp?}|m)_#584}Bi;?+@(U8G1kGE3EK@Cpu(ZAGjqD7`|uT$WF4^U4tm@ z0@rkKZ5*+4U~SiJRvLQrjHby=J2u=r@wmlpG9WD2ANr=(k#4(nr6r_#GZYLdo|8uB z4o(?y?!c{`FXZg)zqa$ZbtwMZBxURAfn!+5WQ<6J4ZPoB=6P|%9|tCMxpwDvk+e~r z1wqa=IM<^7c&RlmbmyptqCOh-O~0}(^5ef4)MW*B7Fykh50B~|L@Ukfj~F(F-+5{bXaVFkCw6TQE^ae}{T%g48dlqZX7k5tY{ zq>^=bG;D@;$WrwY<=NW!_edEZN(gYN7x<*dBNk> z+NKpvnN8!HhBx(V`bFcG#=lu(TK|gAj>CHn|Jh31b=%GxcmCDd-m!Qnu>8nOVy3NnGUSzcfd=& zZGF;myd`mWLL+_q1C1+ajG=Mx5cKg{%#Bz_PVPJy_$naApB-kr)X%jCw9fO-5MJMekDaK+)?mb@27Q!K3x1+VGMQw{~Y^vY$*0X?7`TN zV?T{O65EB(vDo9WEUsT%RNSCA*L#JBS9}!Hc5iI*zQV&5hraGeIaqkO?Bg#xT%o*B z&Ed~Fri2!}`%OpczD4_v0e9htU*K=y;X%PE_`B-e{T&lSdGA$(-swm?oQL`OU-4ad zxb)rs>p1Jfy!Tdz{?L)~$wB1U+mXC);r>5&9Jf|(QMKJ32&CtKaYNwtKw4m2;uv`H z+na7^S`+wjpk~(E{ttBpLOYt27S{w;v7Vr{V?-$2fyWj1gy|(#BlNvwhXiOic zd5$!AR?iw2svCGc=eoXqmE;!QK7Z=4c7MQmtp%?`9Zl(#n%6jkSIO|g!wm!Xa$a*o z#O;FieMgn7)v$H44wCf8fyF%iQl$SJ+~48cCxiRD9h)%96aEMX{vGK)P#x>%jER%Cz!! zWo?AtHmmS(+rU@5gpPL{ZvNC23KTWxx$^cMrMW$Mv#9n}$VLBFT=GH(!7DELV@K6N z#peK@JCn~C5{I@+tO@>PGwptQgH(dxeA{O7(YIji3M6`iH$Ap>^YtSh>a2Kd(qofG zXAY)uX2@wn2Mp_^Ro;ZO@k!$+j>mRLOLWC(rM=ycUC;BZdTin;<|&G8Zh4e#LoWA` z6@Xm$d{=3v{ZwvN?NuS6i(^-B{*=#xquRG(Z`==#QSDm*^-taX%^6*+Ew1gl_+{S? zd^4`CEq>tfzHcrbGyI2w!NhN+QJ=$dl3ILzB{RZ zb5~1fYINJr_K!-vZ}c;xzqMk6_a!}(^l4Ie(w!q78F*me7Xw|LcaDB!@PWZ!3@%UF zkhC@F=A=<=l}A^AmmfTD#f;)vtHX+Fza#Wu=+MXAp_sOgp_gGUceO?R;PlRKtd=H! z)4pLx`c1~#pwI56-BF$I1>dvA?fSw>2+$fiuI(f2N+fn(VRdzk&6wOpDTx6qG%z?i zV_esJ)_5LgA>t8zq;ucl)4;21RxsgR!i+mIDYPFL>&TL>{h?0*jr$^y(vtGClm`zy zlX_n8>k!fBcDnWv)k9tB!Gz4yj{u7m>-~qerQVcsPs;tFr&A{fH-kdoI-# zToI~;Z8RU;ZN;as7|-CPgGtBptxK&T;PQj6t$`gs+Bz+|^XZP$1LJq~S>fMzP;;mV zJ)TNls5bPvHIe5pkJ=D*!YcY?TB-*vEc zU_xi%VJny)8n-JU@OpmCvu zk91Yje!-f<*B-{m|H1hE>7n$UTl%_oUe`AoG=a`=3!0lYJ#A9jkYHXYJ>)`PiVg1W z{-UFCe{-lAx%|kbIDOPnmR6tEm`1aWefwhCJ|249q7~7>ws9@4j1NDboSx8`n*QqN zXJ_PhPR+>es%YyMjBCThJHBNsC>Bpi4}N||S95!yo$R(HF{UkMs6XTM&g+Xd7rly= z$v4*9R(?@YUV7&ZEmpJt^wYbT>#3t#N8da+s{QKF?mf*@x9ssxZHY}xj%t4ZR(d#e z1X8>`H1_&4uHSL}O*fnsN@*I^6y3DDyHAi>+uBXO{{d?bb~`F>xcUaM7m=H|FmOd+ z*|&p&X@Q*0vqvl*7}Ir&b4~~?Us^i@N3EUTZf@Dx9ca1MBENP23!71M8@Cz#;Bkxk#+gGu=(s4wo#G0) zGVbX5Nk(O7dY3=r2c1nBm0hlql;8~+xt;#Z+^%se&I*oSk-TC;aMFr#!HM5a45ojQ z6F(z;W7k>T1JDb+x2Hn`i&KXNw}o;zoSEt>jS1d}K6ci(RWG>81_ZZfCw93iFh9=D z$1c1r4eiF?l(y$b?Mrs1PwI-nx^mCEH#fxwo3h=VP1DzQHlYtJ4~`Gg$;$OjaY*+h z7qnfJvcwu5%&|TT)x@nGbIiKK|B(Nz?!H0a)Y?!VZfC!-QntjkjT)L_HCZW}(>9Dx z9dQcu@t{xH?5Y@_+GI^QK04SmwK;VDX+Ie7AT;KO{gKXQv~_iSVNE=~xn<&sK#SK> zx^ySZXgd-r9CcAt{;-Sstv&jFa8q_-=k?jSUmUY0b`K1$2&@e>26hIhj!`@|FqOq@ z9end(s#V(hy42m>(ZTSZ;Hs!goq}F)H%6nSL+?qwXQU^%dHUq8v>!jr@n;4x>&{H<%KdS4FauWeNZTXm zi%n_QZH(@Gq%HH?p}};*4!fyqM$F=rj%xK)z9tu98UMWAT7H6`m^0fZw&0g>|{^V zjZGN&((HBH*VcU#C#7F>#N`egIoMXSv-;X9@;-ucd#G&0Xkn^&86 zdH&8vLh*0DcJ#}RxoL%nUywPnbN=P-Z}W=tclLSn-lHFNJR15%`|kEF?He$Me7gO$ zqii?rhDGr)eo*Rwwq@<}+NZZqxs#tI z-?gVX_F;U;=f<`5ANF&=kK%K;JZX+8VYxZu*D+Q~$UAn84`3eSxO}Z^Z8%Yv=g{I=FMsgVrN^g4SJo zYGVU9nQs~Uu!f@AkF|Ao^goj=UczvJOWf=dSCPiK7A;*kdrt8T*O}{F^F8>w#5IVC z%TSCiEwLWyxEVHQLH-YT4!Z6^x8!h3ZBdP@eqF=L3UNy+5)s|f<5z{4y1Z0VZG+|I z`g&SF*#W@4hf`k%h^dDDoTS@XJgL_k|cP zp)h{uh|xVX=5e#aL9Ad9^JFkj4Q{R!*5V@7vXZ)Leo0Q;*JNz|fCoH`4Z>Z_GS&}& z8Ot=_GQj5$5}_U+KLH50;o~O&;dl7>2|)M^A3p&I!*RFM&mr(M;35P5sR17_;L*5H zs`3^XaFqcE4frbq?$_7On`*!p81N+q{09S`($CJDXTZx1xXFMYGT>JYc)tOEYrtc1 zSyt8SJOjSMfSU~XzYTb=0e@}4lW@US@myrU)dsxNfS)zsLk2v2pv|YifY%%FZUcV8 zfZsOY0Z}%eDF(dQfCC2nO9OtzfDak)Y0);%IR;#9z_%H2hXMc1fGrrh($$#;yx4#% z4Y=8WAL8(j7=>3j{9_Kk!{KW=+{Ix(hhqj)Spg1D;BX^{XL5KGhl@G9nZv6&+{)ob z4)5mhtsK6K!%uMd9uEJB!~f0UBOHF1!|^dx?h_nN;qb3Hd;y1F;_xaCzs}*!9R3T3 z@8Iw|9R4+j-{tUI96re5FF5=OhZAF|Eb8@)rE>Ud4qw1w3q6{#RU9U7z}U4M9>w9C zIJ}V1>`@M1#NoXh?&R=kam2ri!xK3?iNhWaujKG@4!_0WwFZ4&JmnSTF6Hp!=;@4A zad$-qQ&l$>Hr| z2=2$>Y2yeU!r>!;lW}AI7WA8h@r>mGrW`H_gB=g4_)9cXf!`!yO7O5g^u>cm@~4Og zGKkU$9>~yzc<``jDJkIxGc=*Z$KYna2+8|o>zxScsD^PASC&;=#j)8uAP`@8lJ@KNl}vX9Em46Q_$E)xSSar zPDYV=EQ9OwTnVeXr%HMn>o-XlUyz3|B6#rhhtjQwO@rnXKAUB0I9Kb+1MCcq&tbDQ zoXajS;43to&B`@Aldab9Ijma4GZ}f=gnbn*anvJ82X z*?An^!TFrW?PrgK<3K0$bDp+C(hudO;9;`_z~MY?Cmv|`JelG_ZO_+m0lUnA%QQTP zt=I58cAbXLXSig`g9n;=K*JX@;nhfnh3tUF?_ghQxR42NN;EgHGc1wdVLMo|hA(1g z8E}q<7qdJKFJTvGcqzL=!xys(4PV0QG<+$$PQ%MtvxYBcw`h1ddsxGlv!^wD1q*3- zIr~(@E7)-jm$CtUR9#BhC=HjfWDWaRiiTIQb2MDZ7HN1jqd6l554)0GZNRM>Uc+wF z@K$z*hHKb82K=;!*RmHiT*rQ^;Rg0s4XIngb_L)EC(u|k8>5N{L3}Cu3;`zliA1ApiD<}{M88{(kwk0IT+*epe=Cpnf+51I*KqA(^#s_+7wxfT^#Ee%HeNu;_O!dfcIYM|mlDSgQay zywmXE?S|jprTw9Yy#jA1f``2Z@1@{Zz)Qh5X+3z@E$mW_zm=`f@J|iDbO+n0@jqja zYWOwwhK7H}-qG+~Y`=zoZuHY%uwxqk02`p~{FiKyhVNww8orMW(eQt!_Tt&HT=BMmtSBnY5a@q zcN%_~{XxU8uy+6p`}w(^GXx>4@?9ao^n4%%vY!JICj0pkbHLBJ{k+cMF(AleuN(IB zI=2~NKdtTO@93ptw zpIEVm|Ce2&;XgBbjQb0#)A+x#1`UVwIOSn~Gsc3yvu&E@9lp+{sE57B?$r4A`4}N| z`0dV*eLvNkN+~9~Y2l(93+ZV=IKh(NLa`LdFT7D1viaoCJ->{c8{4M*dhPzQ4 z5j@PY?Ecl)vinqjD_Ps;0P8#r546tLaI{sd;UuH)L|fGwA8*xZ7%~H{hd%x6F!#4N z0nTHcdM*)!SULFolH>bZYVJ*VB~J*jl80c@!$aS}Q?)Orm+~MB`>}+nttVkZ9|STP z>mY(f`wrJKP&*Qyf`^?Za}qql8Y$3#M_Ts$bChNGi&2*CV@F$aHT@{-0u7I|7HD{^ zMKV$FFqd_)00ED)sx>^;@@sg4wF$7$+bBzl$%4Qs8A5=m+(h5lkT!9|e2Z zL_`0RtYMsjbT!#%ixi9I@ZW$Bm9t;+p*5WgaW$X+Oye_+_R6yC@iE)7=jzif+h64v zeK42nA8aAROlvy<2p)E>bq9wCo@KqH;e6{=4HsB%YB=3`Tf=j$kcQ`3G$yLLyeJ!n z>Ovh!)#bMuKi`T1KJ`pd_ct{D85RS);`3LH9}LU2`Rv#D1(wU8e_!JV^ZuyHJ*e@8 zmOXzivNDjDf`=7Z*&1GC(O9Nr7%)W93}znS70(!rUxFtC?79rm_-DY?=5vO|4`!Dc ze3CVOnN@1gPty3otlXfVqVbnn_I!T1)c_g_9=6=tsNpNDO&Tt;Zq)E1%b43+w`=?l ztotBFKeuT771mq8FF;%8v2-gAY_0(8XIa)n zz-u_1Z6yJ|hQrgX5rBWf;hDTI-@@T@EwNi8`ZY*+2;uKLQnq9Rrha+{WVjc3lUb!j zFa_$T3ibfck@(|bLySF*N^6o#AfA+m0`YtUeEtlcXR!jS0`YG+9B*v~oOBl92Uz4Q z3OM{eyBF{(4u{yE0sn-?RKXFFOJF*BpM64TeM^4!;7=%~(Gu=`8jlyA<#w z4nNDT1iXO5PqH5Z{sD&{VOs!~bNB()26!8X?`PC@0=|{Ek&s~*`#<1!bDA62dw`$e za1%@GgWEtHzLd=e+y}}yi!EivfY0RcVs;te^Eq6|$^ch!IEnofa4TS!+yS|h!_tYN zo@Mw@7=({Hr+5`K3a0dPhybA;A3p&Ix8dU_0O5D|_z6Jx3?DxM2;ZMm2t9m%P9gO0 z{W(P=SH$<{6k<2zpFOAe27bveckU7=6Fiseb2f*?Swj(r#VoUl!-brtmBYmxevZRp z^qM=B#-jmz9HB%STWCz7K>PeEcrY4CH1N^JKFJ`xH=7J%QL-4DMh(SS!1>28f@=Wh zVfCWs|5O&?DR}g%#tFyiwIQ7a#0hfHCm4IkiN^l+5H?=Z4ApXyY*Qqj#!U~(y^hN^ zoWpl=*@ko39+dEDlAh!wdJ0&}2!O*hGY|o58DqRYUDt-nRWeh##o+S{FLyMDMY*Fn z&0Dbhecr0Y)d(3+6~$+HdoJGnd)I4tCu zz~za70C_lHQ2a?AqNhM-3Mvq+MpO?w)3B3?#`(gTx?HR~!ffVz$%y3n1Ne_bLCNfF z4hwnC=KO^`XNSo{^b|b0B!Z`E{d=&Yv)4OQjkAUf%n7j9&+9l<>oW*k3_cV>_^5h0 z?dLekoyX)tA;3d0$D=^HRr`>O04EG*>{rN}%r4@v(CtNG zeuHQzc=V1B!HWfw|6OLg3mMXYH!4Yo%BmJzMNHQxL(_s2Ro!2 zHNJxRHC(CpQn2P?+co}5eKJ7!+cka-yHCT_*bx`OgHyNX4ESvgUuEpo*Yow%C0su% zb=`xKwuIv=^cX>Szf23^Tk$7Y?LAT(DVS{O7TNFwQ@8^>U92C6gB4-*5B+BzZVIlMmd4@0T>qX?)JC_7#7t@xv^LrRo1q zkL-#t-9r zEnBw6r|>zU;(4CN4`g?PUhyf`_+i$Q2A?Z5KApW}(67+=Vb;qAeU-*f!l|ZRmj;a= z$j{eQxi@P3Fslpn6sS#3a7e6EZUW5>+y(|Rf*<7VK2VRR)b4~=`XrbFwXX`aZjD1k z>EQuQGtihjMe#Y3lI=}RGt8nniQ@mZ#$zAe;CVpf2lBPB;&V*nhgmBOK2c=E2(+G6 zb7O+n3pDU?#yn&QZ!bzB{it~ejr$jX&vRTq85|b+$q1X%5)B3CT`a;WofK;tamP=| zzgpvmSuW5kJ*?OGY`p>_*{D4zkZc=4^A9dt4u^$oIbm%_G!#56R{#i95gO}@Lgcs%d!s?>vJyl_vZ*g58t072t9m%j?l;z@%=f%zjlsr0sNABreIPI!NRe>jf)$}@NeYn`pzW( z+@H^rPnR%FU8hTU7~rK69s;;p!U=%4NH`Ag-4dofqGu#bKJrfzR$~zPe=3)PNBUR+ zM`^!J^S3daf@lWm{WLl|NY?mRV;?Er*!xP*^Aitld(#}A0-dufzf8{*cmx{X!}QJ~ z?fGA(@gs~ooFny|jmqC7X=n^;MP1%Q9qHyh!Qb-wj?#6Z`VyXk^O*vHCHz=pUU7z= zOHf&I8NugQ_khn}R3aG~Ay|~<(z>Fu2v32|0#xu|_f3u0^c;abhnc|l_XNH9>;RP@ z0`2opkub@l^htGp3uTSx@=WBgkY^&V`z+w|*hDQq$wu@PJi4_A#vzpqv?e0^p+IHD zaY)Q9-^ZE?KxUoH2A8R^nU{2ajf6?Jr4V{N^pMO7Ih@ON zQW$32L_-00nFPRLb1qukYn#?0?>x?b2_snWUlL}|gs0%aJrEUWUTWL(GTkn;e@^X4 z!GqhhGAoB&98361d$s2~kl}JJ&t;5YA^(`QwZN~AGZ^QgBZOmkWa$*_>aLWYH0hO>ds176J=sg6WX zf$kfq;K7(~%TuKHi0GVMjZ@)g%}b2A%2GXs(paqKgf#wU$O7nWI$Oe|KQ)$+1lgmp z&(GyA<*<;yG)#v?LxIkYRiHCsTW0L}$OJkgw#WTddj3p!vEmVJI7ZTw48`ETjLXoU z!$OAsoc?2(<))rUZh*%LxG-~R>66ns-H}tb&aB;b&W0mV8b2;8+8$P z@+mvrX;*eg-;*Rys>{`o;itSVaU2$P5zkpa!)1;Ovj?K5(EBsj!}Z=N%^_z9a?p=7 z&gkdD&P1Sf&0Gy9X)6n#e~#C?iL|D;Ow&)&w+85LPld+M*3aa6Seo&S&opDtJeNP) zOIc{Yw^8Rk$G9gmi`}U4v)L{U&(+UXkes(mJn8ms36pNmfYH3pbz8|{q1#GsCm(R# zR)*=8=qY%#^aNiikQ`sd`pFoTrR;&qN=Du;URE`SMOoEh{eoyHcvy`9I9#jw&|L_- zFVtz-Jh;`Y`ho{fkx4e-(_pMM)*JnLgVC2a8tuN_SZmyDwEK4B`K)@w2G$vCkafm0 zZdV&NaE-AZxkhV_?%}Al3Ejh~l{F^#8V&oIU&8_8jz^=>);}`Z`dZ!Abe~7HwFj&E zdo-Wxj5}1<8PASwVNYtBt?btZ{Hlhx>8A!g>?g)^o!gDORa=Z_Ij?8Ob>8b)A4^0$ zuv&HZ!^4{S^C^@<@EA?gY&@6U!lr0^3!7oUa}Bsy!>#OM1Eyy{1phW>Kd08lt_EJ6 z4c$Ff(LBTaz|(qR6Ht$9{LRL5pv~+i&9lXLCbV5Y6H4~~q@*GHe;a&;d&pPc%3)#u zw`yBWl{EN*9&V#A9z5))hW+1e_|n^rzHoCRyu;z|$M8vk?S&eBVUZU55PQ+mm;?R&XxEB-~APdb0zQ}JJ|@%I`&Ey!-- zS|FYLm)44h1&!w)|C`@yQvA1RKI!~9P{sdljsI_E+w)`Wx0?Tx#xu*0@iSja@~}tP z|7n^>jk|@98P8Nc$v%}d)b3pprgnc5<*wlE{xpY0yFabli`t!ND0tX20^qRffrNiH zY|hqCQW5_@A@9|k|8pD`{GSWsPc#%f?0ErjIB38x^y;_&io9){|BH-Z!T-fD{)DIC zVgDll4!>l;zv)%}cVyl&MZKn^vO0BTZ7oZys9EDntF5T4s;sR|E2^tmRadfR4PMWc zhL?h^)W1=hcFKgB^Qx6AGragw(%Q-@Us)>ide`BH8#A(IG)ziQaZf%suRbGdW*vuT zrq4{DF2hU^+H@HPUB={@=~?L_%uLTT=u6jCR^g{pz3WT7^oliJLgwUir+|6ZNe4K9D-K* z;in|4W}x)k$>&l%b0^Q7nwc>@J7*^Sojx-KYRH~hxu#^5AVQ1~GZ`0=|5;aEU%852 z2&eeE(@7!OQgP|f$jo%NQeD`$WYd!aSAAxNP`#UTP`U(znXG3HGy-oYY5-N7L5E+& ztP_n2o#)l(2+o;AoH1>hSsh&qw2EDeEKs^-yM}+wOxI=+scxDb+AyzPRcRX7W!QX_ zz?{KMrt;)YW>U4b_-Je`el{A*osl!sodK2DBxrK3is@84o+h~P`hzF8UE~w`fEDD` z6BnK*CtNUF#K=&X;9=E|5RttGWw})Q2@zm>h6pf0w4l-45m<$xjAkZ-6g=INBbca2 zN{3o2YU&!a!DhfmZF*ti(SO(;)KdFONblm323HROGi_aSeQ+v6xJ+B&TsWTI zqbP^gZK58Ow)(l|IHj&fPwDK|u%*-FrkHk%*kWqJ9#Yt?!VN533QpZ4i`__Ea4Bm3 z%9ZQZa1+k58;46E7#Qh}<}gYzi0sygXjlfNqg`}ey#|e=Su{-#*&MABPS}ImZWOx> zd+H-ni3Z~#ZkpX15$wefbDG^Ey_t$hZMRAUDIzxc zG`o>_mi0B2Wx}8)vkf#_d4=PeCff+#4)04u?rcRS8)q6uJ!6C?n#>GEgQn4g>@+_9 znFGm8R$5b2#bubrhrJw(pV>4lt#2r;^42y$q^oM>lnV_+bF*xyznuGJydZaF6{SzA zURPBG;>ny-HWW^DaP%0rbEG8M&@Qm$+t_RiX?cw$acGQD<;! zUCV4}g3!|hZyS%=6JAJ?oux!URSBIX$Zb4oNO%l~D3n*8S71DAZ0B>d2mM zh^s3>q$wvnmJNIQmdS&ohTI~Ye^Y( zHFBhWR3*a`rFvu?DNR=*M`}k^F+5Q!N7Qgl$wp}`IpKOS5}YcjvkfCx>cke&Oq5E2 zh^gN68B1tol?!FmXI9m0phX2b16CP1Gb<`rRj7Cl;=YXyzUnexnZjY^k%NVY*IT}> z-Y3NcBOq2)uUi?muF4hqL_3(Ptz6m5fUd8+TC=b_8CYW(C`E+!>fKqT>&p4U2kIhk z;GRyh!e^|jUgc{DldQa|WK}(3VCE?qS&)?q;h86=WM)vNDqppXXXQ}5b{%Jt3!M}5 zT&P&M8gxENS4E^lzr6Hx=u%ST2rHO}8Y#M30G3s**L+~Nsoo65fHaq* z7{E(GW3=uO94HQL0D&p0$pf-^`AQrELwU7kEqz+L)R8+~D~T=k)m38g$}P%Gi_ZE? zZ-cK6`vN5mHFY!6(shI7%=Ff6oDXB#D6nuRDZB-|-qI2n(@N00W^g^id!9RiGJ;`> z&?k>c_1fr}GrX5B$`&#dWXxGVGb2BBrl^5~pGoMJglPH#T9S$~(L9mMBnimoxFBYU z(M9$2k{KHHB+Q_HVM`dA&b`uRk3ptqDbqOLIYk$)TusGrMW8`W&i-U< zY+=2%Qrzj24gE~#1$t|#NSjtt!UTFR8G}Ht1y^xa)K%u!FDt3UF3c*)62@e*#H@gr zxFagVof*bKHYEC}-H^19H2KMQ@nMjwEuz1}n%0Edvks5WwetOsJG|s?gHfLk4Z)Jn8jQ=2o zltFo)aQizsUw1YbhcT07%w$Cy*0{4vRcC=8s>f8ia*eO9Kx}6h`&MC>*jJY?$1&O> z;r5>i$1t0m6rVO>mLLaBUymGW$fBJN%0a3Sqqj55Y*h%loS3S3ebpt{eU_zDXTy{Q zeOI6*J)x)3tgNS*XR1*sL%As4i!;^eBhhYDOC+do>E^I|Bkqd3T}CZn@8L!(qhJ6m;2)!j0+sYfa| zypBdERNWfcjZ*CH%xykLnSACcnY@^6JI&ST6W?XfFspx$LDMc6_uCL$G&Q%+Ec8av zEd{!#K`X-+-zPKVX)xrRQf{qU?9Amf;4FBB$n`J`SnxcF{ep{K zb}#0er3UgI8l#e=BBV8m0+mJP&#B-YH{5!`&n{Du&X%NltjJQ1Ct|5##YM1PjZ8#abhamPqa_Z|#OP$`oM-(pG^~?v#+y;mThpk`o_zGgu}3=E|CN)o}9m zd?*W!9WK4Tp|0jipFrDQwxOgB<4Lj21j|G)5$Jg~dOGJV&{7ssHV zA+Tg(_oAXYAJ9U2Ff}TiOXNINbtG9fn$#e(yMo=(!U&AM1demb#<;F%JG%EOI0kaj z2AI5a2AI6llDev9Ri&K0hs!jLr`VIWVp*bca8hZqA>3Kv%V<$n7WF5ag&ZfbHEz_M zXlC0q^K>x|nt76@vc5?48leE?1*JH$%8|v%QF-m+!VMx!Fn2m6Q*ABw9~^73#hAFr z{VX?a$Jb+cDygf(B8~bCZM>Jz8J-(^>ijT|0Aq6F05y<7A?Wv1h@zX!nek_-yt_^EK5RMhy)TN;cKWGa5%KwI>uT1dR#0KtvM}6%DD(2N zcu~Y|U1h$bG|=aU2?rmI)%xn9m8+G2*xy^#P@&~RjvTXuo*A&aSPt(`b-;q2L`vrs z=PE05=Y%b4d1DsI9Vb;J|5ZDo5;ycK+%1}#)r-wBt{#4XFoRke>ZVdMc{WdFeQgPT zyf1P=E5D;C?2OM27a!|-*)k}?UAL-K7a+ZBQBR($u*fLm3ZNcAvbpi|e0D}Lx9^z| zL`V`Dv8bSoS)$5zUa>b9xpqn-Id4|#lnp{QH4R=~_YQ5{*wJCKnR(BlqZy%D2oau} z%LId^KIj$g6j2scHr+|$F!tn6)tb4r)Z&&@1xs63Uzb+0zAmk@dS%tRGGE%dhRUim z{HSBeRYxGY{tdJiH_Dx4dV_9mqzRaOB#$HVKnIxXyEZp z8h2I%8n|JTCTm&*8hA*PCL=Qf4L@*D6)+trOvIfLAp=~i$fbnh`;y>5jIEU8f2oT#|=gEfCfiOBppUCKJ?I0 zmN=kd!uyI96P;}RI}T^)AdF^{;Abo|=v0iB85(OIlwb|e+tCcT@hO~;6q}`jFzjfC zj@2TT$X6ZVQ%b?7_mdeqh3lOc9mes+5*@((3kNglXo-_@7aB8lV;}GEnYNg7$t4}w z8Ok}?xlB6RzSn~PrDGX7>@zs3DKpx+XB|%ARECZW4R-2KCL+6&AIi`nqsd8bQc6y4 zIy>Y|_^%$$gj?iy9nQcujV9{ta0ZuKu$Ns^=XK|(nFg(QrO~5zC~QMTrJP8@*9Z$l z#W0Ie#I|Ke%)(ZR=@{(S$Yk4Cq-nAnb8S%+jjOsOJCiC2QzJf=MK3YvOtVy!UN5Z^ z+}V1f(}Qi5B9%<({s^7k^BgcX{9bh(pWEPIT)K2RHRba?02t`yb>^7>Z8vY1)59it zfyCLSQH`r)u~TdlR_Fh0;#aJ^VQX@t8EY`>wFZ1wCb#Z)oq+D76>9mkB>r!bTOI6wSQuO z3|kKIaWV`e#~N7FzjE+MV=C|4Sdl_5aa=?rB_CP@QhFk}<>EM=>+R5yhR8^a4PWNq z)XRw@7*T(B5P!#kBaO_xl^%YC;NXjavzOCGu#6x_?}v?%!4|#cD5ML2q!(4!$7p*MPx=k#gRdpwIc6Hz+0sEWYG}4rz-_>3fds*SwbXr zaq`Gjl(wXb#0G~Lgyi@bxeV$!5pqP3hPr^F^kNl1gF8yvqN&B>2_i<5Mlmgff0F0E zr@W%TqMo}+v5R8($CI8llPBa(560lY`j4In_b7BC|M+SN^ z^_}%Ie6BiHRh0bHrJwYc1QGmu&Xj4%NB*AfXNqxy z{_-1`qRR`kGF{n9VP7XRU2%}5E!TN6OnuY5sR(JP5oIoAw$5BVY*x;0de%YIh+D1T zc`~CFQyWRwi_OZJOyrWJB4n=>jFcfpK2OHF)vm81?Qx#0)}oP14J$5^(F$K6#4&9a zik3Y~w~y%{)Tm&u$!HPF$7f8}Bi|FEp$VoEF?BW{xG2@(k@H0YRzQvfnF9%x)wCm0 zQrobuPCIg)tDc`4i*<*bLC_h4x;-QkjA?|rKco`)(nECV@ZmkI<_48>j?mLTDczOf zCXE=c)p}Nr*N!Z>{}M5aQ7BoiqOrS(8WMCDQ6#qPdU;EWVuyyM>U*|{-B{t;?V(kY zP?%P4x}&2kP2^Nvk4~cGH#CQn0iECIBZ^X|nHoCP{Z4VHz$Yl;G*(`(AX9f-uYme` zUauhJ|1YjrsBI^@{BDdBdb>%Z#S}p(^VF_aP}dMckdw65VZGc4EXYRHS+ZeurTT#`Fcf9 zn#k8HXuru6M^-tqINx=>BD~Ou*DK)g)KwwV`jtO4JU=!F_%1#aL+7Q!+tb{RV#3Aq zn9VWFKZkMRLy_#(VHT*$RV!1soF&j0Y%>lY9c+Arj-nWfO9^i9W2@vK3b51$Z7!yb ztL(Mn!jTx|+B^3 zHmOtQ6%@>HO`5l8>15aR)Qr@0W+0}eW&+UkBiHH(WA|jB# zE~unojc-*+W=4*9BUC3|)!&Dc^^`-Ion;;TvzZ z#mDO3m$3jFDBeL#M8Lev{49#zIfGxT6PO?{(Ri7*jd=l>LFbs57lEOd@*z+;;PVnN zG4nY_@_81R*g_NYBrtJHOw6x=iT{C#c?y_>D@+Vtzr+$(nwY178B$?lYJeFk-Vr8C z&jx1LI+Ml^%`^*q2I38^_l}r?nNfX1I&y| zOiVQ}GrcBe8ZhVhOboTxx%4aLnsX&E=dCp{=K?cpgNdOZ+swPh#L!O&<~N#{HNeci z-o#V^Q_yT;t^~%j+r-QSX3kGd%pzds-f3bM0yFQICT0OJ=ihH)Rsb{q5ff7e%mq)F zm~vn)e9pv_0JGpF6XOMD;cFZtt@m?nC&J@I%yA;-IuY}ni1VF@`A);QmacSRL4Xy2d=(7; zrk8) z!o?T5@in&?e+vqV-TC5cw)iT**P)K6?`$?7f7v`D7TGg+cKihs9Mu;{)E5gaUWYlTPd=MN3HUp= zm=zTOgTFvzh%d-Nv2;oT!QvvQZ*dWXTwDaoWu7G@a8YqFD_mSqkiUQxEV!@;iN$l~ zfdc;*Qu@Mzr69&%%C`{UyrTJq#TnuY3Z+;&n==QkGG`77m@@}7k%Q&u_`YJbr)kt% z*=P4r=~%rPp)c!a#4sN)eqV?Zu=I1J4|K%UVpE{|;(gs_=&Ro>tI`LDN!X7a=_Y$W zPiH#PJq9pdlPklK?lS?+Qc=*0b*4fb>85vW^XU&q9qFE@lJNbX;9ms3Wtd&%;@iS1 zdJDcULtL!2``|6Ic*i;7^gAJx{uRFGBTky3cm{+`L!4eQPjQ-kzlYBSGJZGU|HFqb z$B|BR&6n{>km+9nZo_B1jJv?=aU=Z##J3h-|P4TZr{LhHfyRwP?Cd3Z|R`S1y_`QfzyHWZf#BVXu zGhl*0MVY_AH>EGa_hzIIm-M?3r*%5LGMUovM*I%EP@eep!N1oLSAp95EyU}znW8+z zYmIofgZ|%be}gc2R^dNke?$Jm{Kq=@PeJ^+e4j39d?w<9l2i@*umukKOA%jWq_0Li z%ZOj&p#OL4fAfEsfAfEs|E>RF{&zX}{}CU{mF&+-w~(Zr`sgczeSvWu0b5dYIe@St??-+}lLI6GQfQ~rl2J|6GOMmoix zM*KL8ZkSB}J>q?kPJ#G8f{NaP`jLMm`gf2{{)Ymke}?#Vef@w)KYiIT#8agHD7_o; zk!NvoP9G0mW_?E^PQN*q4ie&jwj+Hy;`br{uVwmNBc1qPjCl2A#s5fmIpQAFCr;A; z5OMlFT8P2<--$T=j+{z=lG35yb7cBn#8aXe|1AiT=Uc>SDhd?OKLUVdsrp)MEaGN; zCLvD036m`8^AI=fVFlv%fu|~eJ>vBHey2(LEr^eT{8MCn7vl7L%;eumo(B=H08D}E z|03dM`M*c}Pvh+L|3&-{2ERj;4r5aKIN``Y2m`a-ewcqCPCBPR zef=`MFPn$>brVH>$o>{1uBKH97>`yXZpynJ@hH?^@w)->D)`3~7!=jF4e_kAZ2jDZ z_yP=u=YuV!KZLl+?^(o^ywo3GLY#h!S+(!q5vSjMKOysf?Z`g>6BV=l&OqGcKgAKx zcEs}$r{7wm`31>$G2&)>`Vg;xKB+&Eei{%z!>Hen5vL;s3JFl$PY|d1Y9r#*zgl@Z zPv-4$8{#h^Jx`|Jh4}kue>4#<|G#8@%8>y7^*G|4C|~JgFXH8BFBhdlp1&fl0_pE# z#OZexx`3qmoIu>vM>O`$+Rz^KTN9K%9`Q-2+%1y+0>sVsFGqX~+L!c0<*h^919>Qr zeKjGT0DemTJ&5<~tNL4C_5k9=pr`&q`JYAn0oZUE=22Asr--ZheFF6LHR3Nqo_C~t z-G~nWKR@!5KBFLrS)ZYZUk(3zH`0mU6vSg7uWGMM#J|L3?@^h)6mj}3$7^JKE#fM; zVDHx;PCh0_rr(6PS>9ca_yd$5K9>UZmkz|~Hw@DeCwbmM+$`^FNB#kj&E!7>@e5#I zD`ftWh^ziV`aa7M&p_PlkMj|y-wz=FL;7BdcsKM-f$DcT;`hOs{aEVvr-8%KhX*K<=Lq8T z+X$pGqVEe?isA2+zE4N|rg65tpMf~doGFlg=NkNp-*lqKq2I$uCw_|&H|6y@;#WH2 z8xW`Y0tM=Cn-Hhpd8B3~em5hY0{eE!`2C2#f%*Fa8Gn-Uo9$0=f+pQGcq>Sj6c!Hi-?L6QC{OxU1w-%OO{esJ3Y1dsr$8z7ehQRA@BeRJ_MmIKAeXoJi^3b~ z8fvOiSF-wQuFrCS>&rD*j_boKf$|b_&JeG}sP*DCEc7crc-Ez|8Yb$vii2Y0W2+ft zL?^v0ZRCz{qlpAwv#tscI#t4S6j!o0RiwBcWgz%PEYPl`x4nDu8pgVHK14nFOY*%K zK;{=N@-CROXx`Eyot zY@~~ANI2zp;Y5%?KDZ?wq_VX^UQ@Mt*zHx07uV479AnQXeMp?1ZwoSV88&1;SxxB< z)yQYyAd=alT(_#pGFfFkUd*!+tq5V|O9kY!`Sf07jutwTx6|wjW{`>7Z6^E$FnIpE zUbmq0A|A59*@$GaymhLtEGR6vFoMA=)1uMJSwDJ<0zE$shd^J|cvp^D4Lm?eZ%YP^ zwoo^^B213_P7iLjRvl`zpJX%`(a4}%*Su+L&|oxFdUog9Fb$IOD!sB!JPBe*&g%t5 z8s1pd&szjO;uw$XP`o5W^RAZLzA3M~=lvdVnrCFre2CDjc` zT^64}D4Pj?R2avXEuKGbQT~#p#d9LGeFMD}cJ;b7wHbWsOfMEt4vCa6 zthLAU?~X^sNd-`3P3=`&6(rg}^+qb>CxaE%P2;P6)ZEsD@O#44%^Rwqz^GSWNu$bl zylaXyE$+8#pP(Q00GkS5Nv-Tty}lXDmd7wQa=S|x&nZ5cqE*S#Wvi%uSjZGa^+)PR z%C%3!i~cd}0wemq@&uy6q%U`LDln&hsRw_+$hPuIZaVe+ePaL8%e62_k;U86<&b9O zHEPE-UrKR^r5@`=etYI&a3Cj$i?|#k?9YCE#A=400;ohz`5v|&qj!(e^i$2YxVU*@ zE0zXhrDO~zqAyGBs#a1i1katBQptC%8w{Wb?_8KdgpRgk&LvBFqI-zz7}7IHJj|@b zgrvS?J*EpZ8wq<%NKej8;rIX}h8OCbtEy^BORD(ef%Vu`slRFsdOp74+4*;cf_TfO z@<~W4Iwg?^!je*uuv9$sw8mGBNo#dYgD(}o)RBri5vgUq^_44qmDS}m!}XP}TZIw8 zhD%CI>wN1~3Qc+xOe{}1@Vj=P#uftK>j+|hX13T;;XD*Lj*{^iz_HjT#JAd8CY0FK zU<}(8e7}eI(cV#?DcGY@On_5hiU9*;{XnYPFb-fqQe5v<>{E-u3?u0r+8EHcF=Vx;f%CO1136u zkg+=>&~0$gjel93`%)eXs;njhCj2bWMJeSPX+&?J+4-+xUl98}*h1sKD@*#LeNJqN fhw1Mg9B5w-Iu%s8bVhFKx&H@D|E?_2D!Ts%OQx=~ diff --git a/rgbcontroller.hex b/rgbcontroller.hex index 268cdb9..4b14f45 100644 --- a/rgbcontroller.hex +++ b/rgbcontroller.hex @@ -1,10 +1,10 @@ -:100000000C94A3030C94CB030C94CB030C94CB0360 -:100010000C94CB030C94CB030C94CB030C94CB0328 -:100020000C94CB030C94CB030C94CB030C94CB0318 -:100030000C94CB030C94CB030C94CB030C94CB0308 -:100040000C94CB030C94CB030C9467090C94CB0356 -:100050000C94CB030C94CB030C94CB030C94CB03E8 -:100060000C94CB030C94CB03524742436F6E7472D3 +:100000000C94A4030C94CC030C94CC030C94CC035C +:100010000C94CC030C94CC030C94CC030C94CC0324 +:100020000C94CC030C94CC030C94CC030C94CC0314 +:100030000C94CC030C94CC030C94CC030C94CC0304 +:100040000C94CC030C94CC030C9470090C94CC034A +:100050000C94CC030C94CC030C94CC030C94CC03E4 +:100060000C94CC030C94CC03524742436F6E7472D1 :100070006F6C6C65722076302E36207374617274EA :10008000696E670A004E6F7420612076616C696446 :1000900020636F6D6D616E640A00454550524F4D8F @@ -114,552 +114,558 @@ :10071000202020202020202020202020203A2020BF :100720005365742050574D2076616C75652C207090 :1007300061747465726E206D75737420626520300B -:100740002E0A0000500911241FBECFEFD8E0DEBFF3 -:10075000CDBF12E0A0E0B1E0ECE2F8E202C005900B -:100760000D92A234B107D9F723E0A2E4B2E001C0B0 -:100770001D92A838B207E1F713E0C3EAD3E004C042 -:100780002197FE010E948E0FC23AD107C9F70E943D -:1007900061080C9414140C940000F999FECF92BDDA -:1007A00081BD60BDFA9AF99A0895F999FECF92BD7C -:1007B00081BDF89A80B50895EF92FF920F931F9331 -:1007C000CF93DF938C01EB017B01E40EF51ECE1578 -:1007D000DF0539F06991C8010E94CD030F5F1F4FFB -:1007E000F6CFDF91CF911F910F91FF90EF90089579 -:1007F000EF92FF920F931F93CF93DF938B01040F20 -:10080000151FEB017C01E61AF70AC017D10739F072 -:10081000C7018C0F9D1F0E94D5038993F6CFDF91EE -:10082000CF911F910F91FF90EF900895CF92DF929B -:10083000EF92FF920F931F93CF93DF937C01EB0115 -:1008400063E071E0CE010E94C509670181E8C80E2E -:10085000D11CF601408150E070E060E0CE010E94C2 -:10086000FE0910E003E0F60180811817A0F46CE2A5 -:10087000CE010E94A209C701109F800D911D112475 -:100880000E947D0C61E3811101C060E3CE010E94F2 -:10089000A2091F5FE8CF6AE0CE01DF91CF911F91DF -:1008A0000F91FF90EF90DF90CF900C94A2095F9290 -:1008B0006F927F928F929F92AF92BF92CF92DF9270 -:1008C000EF92FF920F931F93CF93DF9300D0CDB79A -:1008D000DEB78C017B016A0143E050E066E071E025 -:1008E000C7010E94F310892B09F074C0F7018381BE -:1008F000882309F46FC040E150E070E060E0C70178 -:1009000003960E94B60F7A8369836115710509F415 -:100910005BC07801F1E8EF0EF11CF7012081203275 -:1009200008F052C0C801F3E02F9F800D911D1124E3 -:100930000E94800CF70160816F5F90E080E00E9470 -:10094000CD03F701808190E0880F991F42E050E0CD -:10095000BE016F5F7F4F01960E94DC038A818F93F7 -:1009600089818F93F70180811F928F938AE091E0B4 -:100970009F938F931F9280E48F9384EC92E09F93D8 -:100980008F930E940911AC0164EC72E0C6010E94D1 -:10099000A909F70180818F5F80830FB6F894DEBFCD -:1009A0000FBECDBF0F900F90DF91CF911F910F9190 -:1009B000FF90EF90DF90CF90BF90AF909F908F907F -:1009C0007F906F905F90089564E672E0C6010E9488 -:1009D000E909E8CF46E050E06BE271E0C7010E9410 -:1009E000F310892BE9F4F70185818823C9F06CE5C0 -:1009F00072E0C6010E94E9090F571F4FF8014081BC -:100A000050E070E060E0C6010E94FE0962E572E01D -:100A1000C6010E94E909F801808181508083C2CF1C -:100A200044E050E062E371E0C7010E94F310892BBB -:100A300009F040C069E472E0C6010E94E909712C26 -:100A40004801F1E88F0E911C43E0542E57E3A52E88 -:100A500051E0B52E60E4662E74ECE72E72E0F72EBE -:100A6000F4018081781608F5C801759C800D911DF0 -:100A700011240E94790C9F938F931F927F92BF92B3 -:100A8000AF921F926F92FF92EF920E94091140E481 -:100A900050E064EC72E0C6010E94A90973940FB69D -:100AA000F894DEBF0FBECDBFDBCF6AE0C6010E9467 -:100AB000A20978CF42E050E06EEF71E0C7010E94DA -:100AC000F310892B09F047C0F7018281882309F4CC -:100AD00042C0C70102960E94CC10F801EF57FF4FA9 -:100AE0002081281790F17C01FF24C701880F991FEE -:100AF0008E0D9F1D800F911F0E943C0CFF92EF9264 -:100B00008AE491E09F938F931F9280E48F9384EC0B -:100B100092E09F938F930E94091140E450E064ECAF -:100B200072E0C6010E94A9090FB6F894DEBF0FBE9D -:100B3000CDBFF801E058FF4F8081882309F432CF00 -:100B4000B601C8010E9416042DCF6FE571E0C60101 -:100B50000E94C50927CF43E050E066E072E0C7017C -:100B60000E94F310892BF1F4F70183818823D1F0DF -:100B7000C70103960E94CC10F801EF57FF4F208168 -:100B8000281718F37C01FF24C701880F991F8E0DC9 -:100B90009F1D800F911F0E945B0CFF92EF928FE6CA -:100BA00091E0B0CF45E050E065E871E0C7010E94F8 -:100BB000F310892B21F4F70185818111C1CF47E022 -:100BC00050E06BE871E0C7010E94F310892B41F4FB -:100BD000F801E058FF4F81E080836FE272E0F6CECB -:100BE00048E050E066E971E0C7010E94F310892BEC -:100BF00039F4F801E058FF4F108262EA71E0A7CFA4 -:100C00004BE150E0B701C6010E94A90965EE71E011 -:100C1000DDCECF92DF92EF92FF920F931F93CF938F -:100C2000DF937C01EB018A0142E050E06EEF71E05E -:100C3000CE010E94F310892B81F4C7010E946E0D32 -:100C400066ED71E0C801DF91CF911F910F91FF9088 -:100C5000EF90DF90CF900C94E90943E050E066E01C -:100C600072E0CE010E94F310892B31F4C7010E947B -:100C70009B0D66EC71E0E6CF45E050E06DEB71E076 -:100C8000CE010E94F310892BA9F5C7010E946A0FBB -:100C9000D82FC7010E946D0FC82FC7010E94680F8F -:100CA0001F92DF931F92CF931F928F9383EC91E05B -:100CB0009F938F931F9280E48F9384EC92E09F9395 -:100CC0008F930E9409118DB79EB70C960FB6F894BA -:100CD0009EBF0FBE8DBF40E450E064EC72E0C801DF -:100CE000DF91CF911F910F91FF90EF90DF90CF9008 -:100CF0000C94A90943E050E065EF71E0CE010E9439 -:100D0000F310892B39F5FE0180E09191992321F0B0 -:100D10008C3139F08F5FF9CF64E971E08F3008F4DE -:100D200091CF1F821B86CE010C960E94CC10C82E3C -:100D3000CE0108960E94CC10D82ECE0104960E94B7 -:100D4000CC102C2D4D2D682FC7010E94A90D66EBEC -:100D500071E078CF47E050E06AEE71E0CE010E948A -:100D6000F310892B59F4CE0108960E94CC10682FFD -:100D7000C7010E947D0D67E871E064CF46E050E056 -:100D800062EF71E0CE010E94F310892B59F4CE017D -:100D900007960E94CC10682FC7010E94BD0D6BE71B -:100DA00071E050CF47E050E069EF71E0CE010E9462 -:100DB000F310892B39F461E0C7010E940F0E6BE636 -:100DC00071E040CF48E050E061E072E0CE010E9467 -:100DD000F310892B39F460E0C7010E940F0E6AE519 -:100DE00071E030CF4CE150E0BE01C8010E94A9097A -:100DF00067E171E027CFEF92FF920F931F93CF939C -:100E0000DF937C018B01EA0142E050E06EEF71E07C -:100E1000C8010E94F310892B71F4C7010E94D40C01 -:100E20006BE071E0CE01DF91CF911F910F91FF90A8 -:100E3000EF900C94E90943E050E066E072E0C801ED -:100E40000E94F310892B31F4C7010E94C90C6EEF88 -:100E500070E0E8CF43E050E065EF71E0C8010E9428 -:100E6000F310892BC9F4F80180E09191992321F0C6 -:100E70008C3131F08F5FF9CF67ED70E0853090F203 -:100E8000C80104960E94CC1060E0782FC7010E9430 -:100E9000EC0C6FEE70E0C6CF4CE150E0B801CE0133 -:100EA0000E94A90969EA70E0BDCF8F929F92AF922C -:100EB000BF92CF92DF92EF92FF920F931F93CF9347 -:100EC000DF93CDB7DEB7A0970FB6F894DEBF0FBEA5 -:100ED000CDBF8C017B014A0159010E94880A8823F9 -:100EE00011F140E250E0BE016F5F7F4FC8010E94E8 -:100EF000CA0A6C0183E0C816D104A8F085E0C816C0 -:100F0000D10420F145E050E06AE072E0CE010196A4 -:100F10000E94F310892BD1F4A801BE01695F7F4FB5 -:100F2000C7010E945704A0960FB6F894DEBF0FBE0B -:100F3000CDBFDF91CF911F910F91FF90EF90DF9088 -:100F4000CF90BF90AF909F908F90089543E050E076 -:100F500060E172E0CE0101960E94F310892B41F40A -:100F6000A801BE016B5F7F4FC4010E940906DBCF61 -:100F700043E050E064E172E0CE0101960E94F3107C -:100F8000892B41F4A801BE016B5F7F4FC5010E9410 -:100F9000FB06C9CF85E0C816D10480F143E050E0DC -:100FA00065E871E0CE0101960E94F310892B29F4C7 -:100FB000B801C7010E941604B6CF45E050E068E1D1 -:100FC00072E0CE0101960E94F310892BD9F4D12C46 -:100FD000C12C60E0C6010E94CD038FEFC81AD80A69 -:100FE00081E4C816D104A9F76AE970E0C8010E943B -:100FF000E909F701EF57FF4F108295CF83E0C8163C -:10100000D10461F044E050E06EE172E0CE0101965F -:101010000E94F3106DE972E0892B11F065E870E031 -:10102000C8010E94E9097FCFCF92DF92EF92FF9231 -:101030000F931F93CF93DF9300D0CDB7DEB76C0132 -:1010400090E080E00E94D503760191E8E90EF11C62 -:10105000F7018083813268F010E000E060E0C801B1 -:101060000E94CD030F5F1F4F01341105B9F7F7013F -:10107000108210E003E0F70180818117B8F0812F22 -:1010800090E0880F991F42E050E0BE016F5F7F4FF4 -:1010900001960E94F80369817A81C601109F800D34 -:1010A000911D11240E94800C1F5FE5CF0F900F90BF -:1010B000DF91CF911F910F91FF90EF90DF90CF9034 -:1010C0000895CF93DF93CDB7DEB7A9970FB6F89405 -:1010D000DEBF0FBECDBF82E284B988E68AB988E15F -:1010E00085B9B3B0B3FABB24B0F8D3B0D4FADD24D9 -:1010F000D0F87894CE0187960E948D09AA24A394F3 -:10110000CC24C39483E0E82E08E410E027E430E028 -:1011100045E450E064E470E0CE014F960E94F30C89 -:10112000C12C95E0E92E04EB10E023EB30E041EB1D -:1011300050E060EB70E0CE0147960E94F30CCE01C8 -:101140004F960E94310DCE0147960E94310DAE019F -:10115000495E5F4FBE01615E7F4FCE0101960E94E6 -:101160005C0D812CCC24C39426E8E22EF12C0AE8F5 -:1011700010E028E830E041E850E060E870E0CE019F -:101180000F960E94870C1092C30282E492E00E94A4 -:10119000140868E670E0CE0187960E94E909F12CF8 -:1011A000E12C9E01215F3F4FAE014F5F5F4F62E434 -:1011B00072E0CE0187960E945507CE0101960E94EB -:1011C000EE0E03B103FB002700F9B016E1F08FE348 -:1011D0009CE90197F1F700C0000003B103FB002771 -:1011E00000F9B01681F013B163E272E0CE01879688 -:1011F0000E94C50913FF2CC066E272E0CE018796FB -:101200000E94C50901E013B112951170D11609F4BD -:1012100044C08FE39CE90197F1F700C0000013B1CF -:1012200012951170D116C9F113B16CE272E0CE01C2 -:1012300087960E94C50914FF13C066E272E0CE01D2 -:1012400087960E94C5099FEFE91AF90A11E00FC0BD -:1012500069E272E0CE0187960E94C50900E0D3CF13 -:1012600069E272E0CE0187960E94C50910E081E62E -:10127000E8168AEEF80640F06FE272E0CE0187963B -:101280000E94C509F12CE12C8FE39FE10197F1F752 -:1012900000C00000D12EB02E84CF112341F3D3CF54 -:1012A000CF93DF93C2E4D2E0CE010E94840C239658 -:1012B00082E0C23AD807C1F780E2FE0111928A9516 -:1012C000E9F781E08093C202DF91CF9108951F92E8 -:1012D0000F920FB60F9211248F939F93EF93FF936A -:1012E0008091C600E0910403F0910503EF77FF279A -:1012F000EA5FFC4F8083809104039091050301967F -:101300009093050380930403FF91EF919F918F9138 -:101310000F900FBE0F901F9018952AE0FC012083BC -:10132000128211821092C50089E18093C40086E088 -:101330008093C200E1ECF0E088E1808380818068E6 -:10134000808308958091C00085FFFCCF6093C60024 -:101350000895EF92FF920F931F93CF93DF937C0139 -:10136000EB018B01040F151FC017D10739F06991EC -:10137000662321F0C7010E94A209F6CFDF91CF9129 -:101380001F910F91FF90EF900895EF92FF920F93AE -:101390001F93CF93DF937C01EB018B01FE01019042 -:1013A0000020E9F73197EC1BFD0BC8018C1B9D0B4E -:1013B0008E179F0738F4F80161918F01C7010E94D1 -:1013C000A209ECCFDF91CF911F910F91FF90EF9089 -:1013D00008950F931F93CF93DF938C01EB01FE01D0 -:1013E0008491882331F021966491C8010E94A2095A -:1013F000F6CFDF91CF911F910F9108954F925F9299 -:101400006F927F929F92AF92BF92CF92DF92EF92B4 -:10141000FF920F931F93CF93DF93CDB7DEB7C054E6 -:10142000D1090FB6F894DEBF0FBECDBF5C014115E8 -:10143000510561057105D1F460E30E94A209C05C09 -:10144000DF4F0FB6F894DEBF0FBECDBFDF91CF9157 -:101450001F910F91FF90EF90DF90CF90BF90AF90D2 -:101460009F907F906F905F904F900895CE0101966E -:101470007C0180E4F70111928A95E9F7912C77FFBE -:101480000DC0CA0157FF04C088279927841B950BFC -:10149000AC01990F660B770B9924939467010EE3C7 -:1014A00010E08AE0482E512C612C712C4115510519 -:1014B00061057105B9F0F1E0CF1AD10801151105E8 -:1014C00089F001501109CB01BA01A30192010E94D8 -:1014D0006F0F942F852F605DF60167AFA901692F0B -:1014E000782FE4CF992039F0F701E00FF11F8DE25A -:1014F0008083015011094FE350E0401B510B0F5FF7 -:101500001F4FB701600F711FC5010E94A90997CF36 -:10151000409104035091050321E0FC0181819281F7 -:101520008417950708F020E0822F0895FC011282AD -:1015300011821092050310920403E6E0F3E080E2CA -:10154000819393E0E638F907D9F70895CF93DF93B5 -:10155000EC0189819A8181159F4718F0CE010E9484 -:10156000960A89819A81209104033091050382179C -:10157000930770F49C012F5F3F4F3A8329838F7745 -:101580009927FC01EA5FFC4F8081DF91CF9108959C -:1015900080E0FBCF8F929F92AF92BF92CF92DF926B -:1015A000EF92FF920F931F93CF93DF938C016B0108 -:1015B000FC0181819281D0E0C0E020910403309150 -:1015C0000503281B390B2C173D0788F0C138D105BE -:1015D00071F0FC01EC0FFD1FEF77FF27EA5FFC4F76 -:1015E0003081F8012081321711F02196E6CF209149 -:1015F000040330910503281B390BC217D30710F4DD -:10160000209739F481159F4708F043C0D0E0C0E02F -:1016100020C04601F12CE12C5A0121E0A21AB108A8 -:10162000EA14FB0464F4C8010E94A60AF401819341 -:101630004F01FFEFEF1AFF0ACE15DF0589F7EC0C1B -:10164000FD1CF7011182F80181819281019692833C -:101650008183F80181819281FC01EC0FFD1FEF77FE -:10166000FF27EA5FFC4F3081F8012081321303C06D -:10167000019692838183CE01DF91CF911F910F91CB -:10168000FF90EF90DF90CF90BF90AF909F908F90A2 -:101690000895C8010E94960AB9CFE0910101F09126 -:1016A00002012091000181E090E0AC0101C0440FF3 -:1016B0002A95EAF7342F3095208123232083208137 -:1016C000242B2083613009F04BC0E7EEF3E0319723 -:1016D000F1F700C00000E0910101F09102014081AA -:1016E00020910001BC0102C0660F771F2A95E2F726 -:1016F0009B01209524232083E7EBFBE03197F1F752 -:1017000000C00000E0910101F091020120813091C0 -:101710000001AC0101C0440F3A95EAF7342F30952F -:10172000322330832081242B2083E7EEF3E03197AE -:10173000F1F700C00000E0910101F0910201208169 -:101740003091000101C0880F3A95EAF78095822315 -:10175000808387EB9BE00197F1F700C000000895BC -:10176000E7EBFBE03197F1F700C00000E0910101E9 -:10177000F0910201408120910001BC0102C0660F7E -:10178000771F2A95E2F79B01209524232083E7EE1B -:10179000F3E03197F1F7B4CFEF92FF920F931F93DD -:1017A000CF93DF93EC01E0910101F09102012081E0 -:1017B0003091000181E090E0AC0101C0440F3A9506 -:1017C000EAF7342F3095322330832081242B208375 -:1017D000E7EEF3E03197F1F700C00000E09101017E -:1017E000F091020120813091000101C0880F3A95EB -:1017F000EAF780958223808387EB9BE00197F1F7DE -:1018000000C000000FE010E0EE24E394F12C2981E9 -:101810003A81C701002E02C0880F991F0A94E2F78F -:101820008223932361E0892B09F460E0CE010E94BA -:101830004D0B015011090530110549F7DF91CF918A -:101840001F910F91FF90EF900895E0910101F091A9 -:10185000020120813091000181E090E001C0880FF9 -:101860003A95EAF780958223808387E199E701978B -:10187000F1F700C0000008950F931F93CF93DF93FB -:10188000EC010AE010E0CE010E94CC0B61E0CE0139 -:101890000E944D0B60E0CE010E944D0BCE010E94D4 -:1018A000250C0150110979F781E08883DF91CF91F0 -:1018B0001F910F9108950F931F93CF93DF93EC0126 -:1018C0000AE010E0CE010E94CC0B60E0CE010E9445 -:1018D0004D0B61E0CE010E944D0BCE010E94250C04 -:1018E0000150110979F71882DF91CF911F910F9163 -:1018F0000895FC01818192810895FC018081089501 -:10190000FC01728361830895FC01108208958F9217 -:10191000AF92CF92EF92FF920F931F93CF93DF93EB -:10192000CDB7DEB7FC0171836083338322831583D7 -:101930000483A6828782DB011C92DA011C928FEF5E -:101940009FEFD70111969C938E93DA018C91886159 -:101950008C938C91BC2DB770CB2EC82ADA01CC9217 -:10196000A081B1818C9182608C93A281B381119608 -:101970001C921E920480F581E02D11821082DF916D -:10198000CF911F910F91FF90EF90CF90AF908F90DC -:101990000895DC01ED91FC9111971082ED91FC917D -:1019A0008081826080830895CF93DF93EC010E9451 -:1019B000C90C8E81882329F0E881F98180818068B3 -:1019C00080838F81882329F0E881F981808180627A -:1019D0008083DF91CF910895DC011296ED91FC9107 -:1019E000718360830895AF92CF92EF920F931F930C -:1019F000CF93DF93FC01DA01718360833383228309 -:101A000015830483C682A782EB0118821C9286810B -:101A1000882329F0C081D18188818068888387816B -:101A2000882329F0C081D181888180628883C08128 -:101A3000D1818881836088838C91DE2DD770ED2ED3 -:101A4000E82AEC92A281B3811C920480F581E02DFA -:101A50001082DF91CF911F910F91EF90CF90AF90B7 -:101A60000895DC01ED91FC9180818370808308955D -:101A7000CF93DF93EC010E94310D8E81882329F0F2 -:101A8000E881F9818081806880838F81882329F0B3 -:101A9000E881F981808180628083DF91CF91089510 -:101AA000DC011296ED91FC9160830895DC0114969F -:101AB000ED91FC9160830895FC01718360835383F1 -:101AC000428314821682158217821086118612862E -:101AD00081E0838787E0848715860895CF93DF931D -:101AE000EC0181E08D87888199810E94380D8A817F -:101AF0009B81DF91CF910C94380DCF93DF93EC0154 -:101B00006C836623A9F060E0888199810E94560D5C -:101B100060E0888199810E94500D60E08A819B81FC -:101B20000E94560DCE010E946E0D1F821E821D82E4 -:101B3000DF91CF910895CF93DF93EC011D868881CB -:101B400099810E94310D8A819B81DF91CF910C9404 -:101B5000310DFC0114826087418722873385311162 -:101B60000AC0620F7727771F460F572F511D452B4D -:101B700011F40C949B0D0C946E0D6150603108F0C3 -:101B80004BC0E62FF0E0E953F24F0C948E0FD70DC7 -:101B9000DC0DE00DE40DE80DEB0DEE0DF10DF40D97 -:101BA000F10DF80DFC0D000E040E080E0A0E20E5D6 -:101BB0004FEF60EA0C94A90D24E14FEF68ECFACFE7 -:101BC0002CE84FEF64EBF6CF20E040E06FEFF2CF70 -:101BD0002AE04CE3FBCF2EE14EE1F8CF20E04BE9C9 -:101BE000F5CF20E04FEF0AC02AE04FEF67E3E2CFE6 -:101BF00027E040E568E0DECF2FEF40E060E0DACF9D -:101C00002FEF4FEF62E3D6CF26E940E56AE0D2CF6F -:101C10002CEDE8CF20E0D1CF24E14DE2D7CFFC017D -:101C200063870895CF93DF93EC018C81813041F578 -:101C30008D819E812F8121111CC001969E838D83F1 -:101C40006D817E816F3F7105B1F481E08F83888162 -:101C500099810E94560D6D816095888199810E94BD -:101C6000500D6D8160548A819B81DF91CF910C94DE -:101C7000560D0197E3CF6115710549F71F82E7CF34 -:101C8000823021F58D819E812F81211118C001960E -:101C90009E838D836D817E816E3F21E0720789F482 -:101CA00081E08F8376956795888199810E94560D92 -:101CB00060E0888199810E94500D60E0D4CF019747 -:101CC000E7CF6115710571F71F82ECCF833069F59D -:101CD0008D819E812F81211121C001969E838D834C -:101CE0006D817E8161154FEF7407D1F481E08F83A0 -:101CF00046E0769567954A95E1F7888199810E943B -:101D0000560D6E81888199810E94500D6D817E8172 -:101D100053E0769567955A95E1F7A5CF0197DECF09 -:101D20006115710529F71F82E3CF843009F043C0A4 -:101D30006D817E8188819981611520E27207F0F5BD -:101D400036E0769567953A95E1F70E94560D6D81DC -:101D50007E81613044E0740780F0888199819B0125 -:101D6000215030422F3F3F4178F5705226E0769562 -:101D700067952A95E1F70E94500D8D819E818130F3 -:101D800020E2920730F0692F66958A819B810E943C -:101D9000560D8D819E818A3F4FEF9407C8F40196BE -:101DA0009E838D838FEF90EE20E081509040204005 -:101DB000E1F700C00000DF91CF910895672F66958D -:101DC000669566956058C1CF672F66956058D3CFEA -:101DD0006CE88A819B810E94560DE4CFCF93DF93FC -:101DE000EC010E94120E8C8181116FC08B858823BB -:101DF00009F45FC08D819E8101969E838D839C85B1 -:101E000001C0880F9A95EAF781115FC098B588855F -:101E10008917B1F068B528B5281B330B81E090E035 -:101E20001216130614F090E080E0232F221F2227C1 -:101E3000221F821B9109681B888199810E94560D7F -:101E400097B589858917B1F067B527B5281B330B7E -:101E500081E090E01216130614F090E080E0232F4A -:101E6000221F2227221F821B9109681B88819981CA -:101E70000E94500D9091B4008A85891731F16091CC -:101E8000B4002091B400281B330B81E090E01216BF -:101E9000130614F090E080E0232F221F2227221F38 -:101EA000821B9109681B8A819B81DF91CF910C94E1 -:101EB000560D6985888199810E94500D68858881B9 -:101EC00099810E94560D6A85EECFDF91CF910895DA -:101ED00088B508958091B400089587B50895052EBA -:101EE00097FB1EF400940E94860F57FD07D00E94B6 -:101EF000940F07FC03D04EF40C94860F5095409538 -:101F0000309521953F4F4F4F5F4F089590958095A5 -:101F1000709561957F4F8F4F9F4F0895EE0FFF1F74 -:101F20000590F491E02D0994A1E21A2EAA1BBB1B87 -:101F3000FD010DC0AA1FBB1FEE1FFF1FA217B30795 -:101F4000E407F50720F0A21BB30BE40BF50B661FAB -:101F5000771F881F991F1A9469F76095709580956F -:101F600090959B01AC01BD01CF010895A0E0B0E0C8 -:101F7000ECEBFFE00C94CF135C016B017A0161156F -:101F8000710519F0FB0191838083E114F10429F0BC -:101F9000C7010297839708F0E5C0E5012196F50196 -:101FA0001081812F90E00E94EA10892B11F05E01D0 -:101FB000F4CF1D3229F42196F501118101E007C00B -:101FC0001B3221F4E5012296F501118100E0E114B4 -:101FD000F10409F1F0E1EF16F10429F43FC010E338 -:101FE000E114F10421F128E0E216F10401F154F4C6 -:101FF000E2E0EE16F10421F5812C912CA12CB0E445 -:10200000BB2E3EC0FAE0EF16F10439F020E1E216F3 -:10201000F104B1F430C0103319F1FAE0EF2EF12CD5 -:10202000ACEC8A2E982CA82CACE0BA2E29C078E013 -:10203000E72EF12C812C912CA12CE0E1BE2E20C0AA -:1020400060E070E080E090E897010F2C000C440BFA -:10205000550B0E94940F49015A0112C0103359F4D4 -:1020600088818F7D883509F0BACF19812296026068 -:1020700080E1E82EF12C812C912CA12C68E0B62E69 -:1020800040E060E070E0CB0127010F2C000C6608F7 -:102090007708FE0150ED352E310E29E0231570F43E -:1020A0002FEB210F2A3118F439EC332E06C02FE91B -:1020B000210F2A3118F529EA322E310E232D30E076 -:1020C0002E153F05DCF447FD16C086169706A806B8 -:1020D000B90670F0A30192010E94B313630D711D44 -:1020E000811D911D61307105810520E8920710F076 -:1020F0004FEF01C041E021961081CBCF202F2170FE -:10210000C114D10471F0442329F02197F601D18341 -:10211000C08307C001FF19C02297F601D183C08395 -:1021200014C047FF12C0222329F060E070E080E075 -:1021300090E804C06FEF7FEF8FEF9FE722E230E07F -:10214000309387032093860309C0222381F0909562 -:102150008095709561957F4F8F4F9F4F462F372FFA -:10216000282F12C040E030E020E090E00DC097FF43 -:10217000F5CF82E290E090938703809386036FEF20 -:102180007FEF8FEF9FE7EACF642F732F822FCDB7BA -:10219000DEB7E1E10C94EB13FC0188279927E89462 -:1021A00021912032E9F3293010F02E30C8F32B3280 -:1021B00041F02D3239F4689404C00E940111820F5D -:1021C000911D219120532A30C0F31EF490958195E2 -:1021D0009F4F089591110C940C13803219F089507F -:1021E0008550C8F70895FB01DC014150504030F0A4 -:1021F0008D910190801919F40020B9F7881B990B73 -:1022000008957AE0979F902D879F802D910D11243E -:102210000895AEE0B0E0EFE0F1E10C94DC130D893D -:102220001E898F89988D26E02C831A83098397FF56 -:1022300002C080E090E801979E838D83AE01455EE9 -:102240005F4F698D7A8DCE0101960E9439114D81C3 -:102250005E8157FD0AC02F813885421753070CF461 -:102260009A01F801E20FF31F10822E96E4E00C941D -:10227000F813ACE0B0E0EFE3F1E10C94CE136C01A5 -:102280007B018A01FC0117821682838181FFBEC116 -:10229000CE0101964C01F6019381F70193FD8591E2 -:1022A00093FF81917F01882309F4ACC1853239F411 -:1022B00093FD859193FF81917F01853229F4B601C9 -:1022C00090E00E942513E7CF512C312C20E02032E2 -:1022D000A0F48B3269F030F4803259F0833269F423 -:1022E00020612CC08D3239F0803339F4216026C052 -:1022F0002260246023C0286021C027FD27C030ED64 -:10230000380F3A3078F426FF06C0FAE05F9E300DB1 -:102310001124532E13C08AE0389E300D1124332E21 -:1023200020620CC08E3221F426FD6CC1206406C0F0 -:102330008C3611F4206802C0883641F4F70193FD11 -:10234000859193FF81917F018111C1CF982F9F7D4E -:102350009554933028F40C5F1F4F9FE399830DC071 -:10236000833631F0833771F0833509F05BC022C0CA -:10237000F801808189830E5F1F4F44244394512CC0 -:10238000540115C03801F2E06F0E711CF801A080F5 -:10239000B18026FF03C0652D70E002C06FEF7FEFB4 -:1023A000C5012C870E941A132C0183012C852F77DD -:1023B000222E17C03801F2E06F0E711CF801A080C8 -:1023C000B18026FF03C0652D70E002C06FEF7FEF84 -:1023D000C5012C870E940F132C012C852068222E0A -:1023E000830123FC1BC0832D90E048165906B0F4EE -:1023F000B60180E290E00E9425133A94F4CFF501F3 -:1024000027FC859127FE81915F01B60190E00E9433 -:10241000251331103A94F1E04F1A51084114510438 -:1024200071F7E6C0843611F0893639F5F80127FFD7 -:1024300007C060817181828193810C5F1F4F08C04A -:1024400060817181072E000C880B990B0E5F1F4F66 -:102450002F76722E97FF09C09095809570956195A3 -:102460007F4F8F4F9F4F2068722E2AE030E0A401EB -:102470000E945513A82EA81844C0853729F42F7E32 -:10248000B22E2AE030E025C0F22FF97FBF2E8F3622 -:10249000C1F018F4883579F0B5C0803719F0883765 -:1024A00021F0B0C02F2F2061B22EB4FE0DC08B2DB5 -:1024B0008460B82E09C024FF0AC09F2F9660B92EF1 -:1024C00006C028E030E005C020E130E002C020E195 -:1024D00032E0F801B7FE07C060817181828193818B -:1024E0000C5F1F4F06C06081718180E090E00E5F3D -:1024F0001F4FA4010E945513A82EA818FB2DFF778B -:102500007F2E76FE0BC0372D3E7FA51450F474FE4F -:102510000AC072FC08C0372D3E7E05C0BA2C372D8C -:1025200003C0BA2C01C0B52C34FF0DC0FE01EA0D6A -:10253000F11D8081803311F4397E09C032FF06C05D -:10254000B394B39404C0832F867809F0B39433FD19 -:1025500013C030FF06C0B31498F43A0C532C5B1828 -:1025600010C0B31470F4B60180E290E03C870E9482 -:102570002513B3943C85F5CFB31418F43B1802C06F -:102580005A2C312C34FF12C0B60180E390E03C8716 -:102590000E9425133C8532FF17C031FD03C088E738 -:1025A00090E002C088E590E0B6010CC0832F8678E9 -:1025B00059F031FF02C08BE201C080E237FD8DE2AD -:1025C000B60190E00E942513A51438F4B60180E30B -:1025D00090E00E9425135A94F7CFAA94F401EA0DD3 -:1025E000F11D8081B60190E00E942513A110F5CF66 -:1025F000332009F450CEB60180E290E00E9425130A -:102600003A94F6CFF6018681978102C08FEF9FEF53 -:102610002C96E2E10C94EA13992788270895FC018F -:102620000590615070400110D8F7809590958E0FFD -:102630009F1F0895FC016150704001900110D8F770 -:10264000809590958E0F9F1F08950F931F93CF93A2 -:10265000DF93182F092FEB018B8181FD03C08FEFD2 -:102660009FEF1EC082FF0FC02E813F818C819D8114 -:102670002817390774F4E881F981CF01019699830D -:102680008883108306C0E885F985812F0995892BF9 -:1026900031F78E819F8101969F838E83812F902FAA -:1026A000DF91CF911F910F910895FA01AA27283049 -:1026B00051F1203181F1E8946F936E7F6E5F7F4F0F -:1026C0008F4F9F4FAF4FB1E03ED0B4E03CD0670F8B -:1026D000781F891F9A1FA11D680F791F8A1F911DDE -:1026E000A11D6A0F711D811D911DA11D20D009F42E -:1026F00068943F912AE0269F11243019305D319370 -:10270000DEF6CF010895462F4770405D4193B3E058 -:102710000FD0C9F7F6CF462F4F70405D4A3318F0FF -:10272000495D31FD4052419302D0A9F7EACFB4E0B0 -:10273000A6959795879577956795BA95C9F7009768 -:102740006105710508959B01AC010A2E0694579509 -:10275000479537952795BA95C9F7620F731F841F60 -:10276000951FA01D0895DB018F939F930E94C313B3 -:10277000BF91AF91A29F800D911DA39F900DB29F1D -:10278000900D112408950E940514A59F900DB49FEB -:10279000900DA49F800D911D112408952F923F92BA -:1027A0004F925F926F927F928F929F92AF92BF9261 -:1027B000CF92DF92EF92FF920F931F93CF93DF930D -:1027C000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBE6A -:1027D000CDBF09942A88398848885F846E847D84B7 -:1027E0008C849B84AA84B984C884DF80EE80FD80B9 -:1027F0000C811B81AA81B981CE0FD11D0FB6F8942F -:10280000DEBF0FBECDBFED010895A29FB001B39F03 -:10281000C001A39F700D811D1124911DB29F700DE9 -:0C282000811D1124911D0895F894FFCF34 -:10282C000525005354006164640052656C61792085 -:10283C00736176656421204E554D4245523A2025F0 -:10284C00752049443A202558200A0064656C65744B -:10285C0065006C697374004E554D4245523A202503 -:10286C00752049443A2025580A0052454C41593AA2 -:10287C00202575207475726E6564206F6E0A004E8B -:10288C006F2073757463682052656C61790A00520D -:10289C00454C41593A202575207475726E6564203B -:1028AC006F66660A007374617465006D61636869B4 -:1028BC006E65206F6E006D616368696E65206F6672 -:1028CC0066005475726E6564206F66662053746181 -:1028DC007465207072696E74696E670A0070726933 -:1028EC006E740043757272656E7420524742207686 -:1028FC00616C7565733A0A523A20257520473A2067 -:10290C00257520423A2025750A0070617474657231 -:10291C006E007072657365740066616465206F6E1D -:10292C000066616465206F66660072656C61790093 -:10293C007267620061757800657261736500686525 -:10294C006C70004431004F0A00430A0044320044CA -:10295C006F6F72204F70656E205761726E696E6773 -:02296C000A005F +:100740002E0A00005909270B11241FBECFEFD8E055 +:10075000DEBFCDBF12E0A0E0B1E0E0E9F8E202C008 +:1007600005900D92A234B107D9F723E0A2E4B2E0DC +:1007700001C01D92AA34B207E1F713E0C4EAD3E046 +:1007800004C02197FE010E94B00FC23AD107C9F7F9 +:100790000E946C080C9436140C940000F999FECF5A +:1007A00092BD81BD60BDFA9AF99A0895F999FECF7C +:1007B00092BD81BDF89A80B50895EF92FF920F9394 +:1007C0001F93CF93DF938C01EB017B01E40EF51EA9 +:1007D000CE15DF0539F06991C8010E94CE030F5F85 +:1007E0001F4FF6CFDF91CF911F910F91FF90EF90A8 +:1007F0000895EF92FF920F931F93CF93DF938C0195 +:10080000EB017B01E40EF51ECE15DF0539F0C801C2 +:100810000E94D60389930F5F1F4FF6CFDF91CF91D0 +:100820001F910F91FF90EF900895CF92DF92EF927A +:10083000FF920F931F93CF93DF937C016B01EA012B +:1008400063E071E0CA010E94FB09C6010E94EC0C42 +:1008500040E050E0BA01882331F0C6010E94180D33 +:10086000AC0170E060E0CE010E941F0A6CE2CE0194 +:100870000E94C409670181E4C80ED11CF6014081C1 +:1008800050E070E060E0CE010E941F0A10E003E03B +:10089000F60180811817A0F46CE2CE010E94C40911 +:1008A000C701109F800D911D11240E94A00C61E3CF +:1008B000811101C060E3CE010E94C4091F5FE8CF2F +:1008C0006AE0CE01DF91CF911F910F91FF90EF90E1 +:1008D000DF90CF900C94C4095F926F927F928F92B9 +:1008E0009F92AF92BF92CF92DF92EF92FF920F93BF +:1008F0001F93CF93DF9300D0CDB7DEB78C015B01A0 +:100900006A01790143E050E066E071E0C6010E94AF +:100910001511892B09F074C0F6018381882309F42D +:100920006FC040E150E070E060E0C60103960E94B5 +:10093000D80F7A8369836115710509F45BC068017A +:10094000F1E4CF0ED11CF6012081203108F052C015 +:10095000C801F3E02F9F800D911D11240E94A30C6C +:10096000F60160816F5F90E080E00E94CE03F601A7 +:10097000808190E0880F991F42E050E0BE016F5FD8 +:100980007F4F01960E94DD038A818F9389818F9327 +:10099000F60180811F928F938AE091E09F938F935D +:1009A0001F9280E48F9384E892E09F938F930E943C +:1009B0002B11AC0164E872E0C7010E94CB09F6017B +:1009C00080818F5F80830FB6F894DEBF0FBECDBFEE +:1009D0000F900F90DF91CF911F910F91FF90EF90AB +:1009E000DF90CF90BF90AF909F908F907F906F904F +:1009F0005F90089564E672E0C7010E94E709E8CFBE +:100A000046E050E06BE271E0C6010E941511892BAF +:100A1000E9F4F60185818823C9F06CE572E0C7012D +:100A20000E94E7090F5B1F4FF801408150E070E022 +:100A300060E0C7010E941F0A62E572E0C7010E94E0 +:100A4000E709F801808181508083C2CF44E050E003 +:100A500062E371E0C6010E941511892B09F040C0C4 +:100A600069E472E0C7010E94E709712C4801F1E4D2 +:100A70008F0E911C43E0542E57E3A52E51E0B52E66 +:100A800060E4662E74E8C72E72E0D72EF4018081F0 +:100A9000781608F5C801759C800D911D11240E94DF +:100AA0009C0C9F938F931F927F92BF92AF921F9245 +:100AB0006F92DF92CF920E942B1140E450E064E8E5 +:100AC00072E0C7010E94CB0973940FB6F894DEBFA1 +:100AD0000FBECDBFDBCF6AE0C7010E94C40978CF4B +:100AE00042E050E068EF71E0C6010E941511892BC9 +:100AF00009F048C0F6018281882309F443C0C60189 +:100B000002960E94EE10F801EF5BFF4F208128173C +:100B100098F16C01DD24C601880F991F8C0D9D1D75 +:100B2000800F911F0E94630CDF92CF928AE491E0C4 +:100B30009F938F931F9280E48F9384E892E09F931A +:100B40008F930E942B1140E450E064E872E0C701EB +:100B50000E94CB090FB6F894DEBF0FBECDBFF801DF +:100B6000E05CFF4F8081882309F432CFA701B501F3 +:100B7000C8010E9415042CCF6FE571E0C7010E94E7 +:100B8000FB0926CF43E050E060E072E0C6010E941E +:100B90001511892BF1F4F60183818823D1F0C60168 +:100BA00003960E94EE10F801EF5BFF4F208128179B +:100BB00018F36C01DD24C601880F991F8C0D9D1D53 +:100BC000800F911F0E94800CDF92CF928FE691E000 +:100BD000AFCF47E050E065E871E0C6010E94151113 +:100BE000892B41F4F801E05CFF4F81E080836FE2E4 +:100BF00072E002CF48E050E060E971E0C6010E9477 +:100C00001511892B39F4F801E05CFF4F10826CE973 +:100C100071E0B4CF4BE150E0B601C7010E94CB09AF +:100C200065EE71E0E9CECF92DF92EF92FF920F93E3 +:100C30001F93CF93DF937C01EB018A0142E050E0E8 +:100C400068EF71E0CE010E941511892B81F4C70174 +:100C50000E94A10D66ED71E0C801DF91CF911F9157 +:100C60000F91FF90EF90DF90CF900C94E70943E055 +:100C700050E060E072E0CE010E941511892B31F442 +:100C8000C7010E94CE0D66EC71E0E6CF45E050E072 +:100C900067EB71E0CE010E941511892BA9F5C70100 +:100CA0000E948C0FD82FC7010E948F0FC82FC70139 +:100CB0000E948A0F1F92DF931F92CF931F928F93F0 +:100CC0008DEB91E09F938F931F9280E48F9384E844 +:100CD00092E09F938F930E942B118DB79EB70C9635 +:100CE0000FB6F8949EBF0FBE8DBF40E450E064E89D +:100CF00072E0C801DF91CF911F910F91FF90EF90AB +:100D0000DF90CF900C94CB0943E050E06FEE71E0A0 +:100D1000CE010E941511892B39F5FE0180E09191D9 +:100D2000992321F08C3139F08F5FF9CF64E971E0BC +:100D30008F3008F491CF1F821B86CE010C960E9443 +:100D4000EE10C82ECE0108960E94EE10D82ECE01CD +:100D500004960E94EE102C2D4D2D682FC7010E9485 +:100D6000DC0D66EB71E078CF47E050E064EE71E0B7 +:100D7000CE010E941511892B59F4CE0108960E94CC +:100D8000EE10682FC7010E94B00D67E871E064CFD4 +:100D900046E050E06CEE71E0CE010E941511892B07 +:100DA00059F4CE0107960E94EE10682FC7010E94E9 +:100DB000F00D6BE771E050CF47E050E063EF71E07A +:100DC000CE010E941511892B39F461E0C7010E9400 +:100DD000310E6BE671E040CF48E050E06BEF71E020 +:100DE000CE010E941511892B39F460E0C7010E94E1 +:100DF000310E6AE571E030CF4CE150E0BE01C80130 +:100E00000E94CB0967E171E027CFEF92FF920F9329 +:100E10001F93CF93DF937C018B01EA0142E050E006 +:100E200068EF71E0C8010E941511892B71F4C701A8 +:100E30000E94000D6BE071E0CE01DF91CF911F9118 +:100E40000F91FF90EF900C94E70943E050E060E0D1 +:100E500072E0C8010E941511892B31F4C7010E946C +:100E6000F50C6EEF70E0E8CF43E050E06FEE71E01C +:100E7000C8010E941511892BC9F4F80180E09191F5 +:100E8000992321F08C3131F08F5FF9CF67ED70E05D +:100E9000853090F2C80104960E94EE1060E0782F31 +:100EA000C7010E941F0D6FEE70E0C6CF4CE150E00D +:100EB000B801CE010E94CB0969EA70E0BDCF8F92E4 +:100EC0009F92AF92BF92CF92DF92EF92FF920F93D9 +:100ED0001F93CF93DF93CDB7DEB7A0970FB6F894EB +:100EE000DEBF0FBECDBF8C017B014A0159010E94BC +:100EF000A90A882319F140E250E0BE016F5F7F4FDD +:100F0000C8010E94D80A6C0183E0C816D104B0F071 +:100F100085E0C816D10428F145E050E064E072E0B5 +:100F2000CE0101960E941511892BD9F49801AE01CA +:100F3000495F5F4FB501C7010E946C04A0960FB6D0 +:100F4000F894DEBF0FBECDBFDF91CF911F910F91FF +:100F5000FF90EF90DF90CF90BF90AF909F908F90D9 +:100F6000089543E050E06AE072E0CE0101960E94ED +:100F70001511892B41F4A801BE016B5F7F4FC4019D +:100F80000E941306DBCF43E050E06EE072E0CE013A +:100F900001960E941511892B41F4A801BE016B5FD7 +:100FA0007F4FC5010E940507C9CF85E0C816D1044F +:100FB00088F145E050E062E172E0CE0101960E94C6 +:100FC0001511892B31F4A801B501C7010E94150440 +:100FD000B5CF45E050E068E172E0CE0101960E9495 +:100FE0001511892BD9F4D12CC12C60E0C6010E94C7 +:100FF000CE038FEFC81AD80A81E2C816D104A9F728 +:101000006AE970E0C8010E94E709F701EF5BFF4F52 +:10101000108294CF83E0C816D10461F044E050E020 +:101020006EE172E0CE0101960E9415116DE972E049 +:10103000892B11F065E870E0C8010E94E7097ECFB6 +:10104000CF92DF92EF92FF920F931F93CF93DF9394 +:1010500000D0CDB7DEB76C0190E080E00E94D603EF +:10106000760191E4E90EF11CF7018083813168F08B +:1010700010E000E060E0C8010E94CE030F5F1F4F48 +:1010800001321105B9F7F701108210E003E0812F5A +:1010900090E0880F991F42E050E0BE016F5F7F4FE4 +:1010A00001960E94F90369817A81C601109F800D23 +:1010B000911D11240E94A30C1F5FF70180818117ED +:1010C00030F70F900F90DF91CF911F910F91FF900C +:1010D000EF90DF90CF900895CDB7DEB7A7970FB60A +:1010E000F894DEBF0FBECDBF82E284B988E68AB92C +:1010F00088E185B9B3B0B3FABB24B0F8D3B0D4FA61 +:10110000DD24D0F87894CE0187960E94B109AA24F4 +:10111000A394CC24C39483E0E82E08E410E027E4F1 +:1011200030E045E450E064E470E0CE014F960E9468 +:10113000260DC12C95E0E92E04EB10E023EB30E006 +:1011400041EB50E060EB70E0CE0147960E94260D27 +:10115000CE014F960E94640DCE0147960E94640D09 +:10116000AE01495E5F4FBE01615E7F4FCE010196C9 +:101170000E948F0D812CCC24C39426E8E22EF12C02 +:101180000AE810E028E830E041E850E060E870E06C +:10119000CE010F960E94AA0C1092830282E492E084 +:1011A0000E94200868E670E0CE0187960E94E70959 +:1011B000F12CE12C9E01215F3F4FAE014F5F5F4F4D +:1011C00062E472E0CE0187960E945F07CE0101962D +:1011D0000E94100F03B103FB002700F9B016E1F0E5 +:1011E0008FE39CE90197F1F700C0000003B103FB16 +:1011F000002700F9B01681F013B163E272E0CE016E +:1012000087960E94FB0913FF2CC066E272E0CE01B4 +:1012100087960E94FB0901E013B112951170D11657 +:1012200009F444C08FE39CE90197F1F700C0000086 +:1012300013B112951170D116C9F113B16CE272E0BD +:10124000CE0187960E94FB0914FF13C066E272E08C +:10125000CE0187960E94FB099FEFE91AF90A11E077 +:101260000FC069E272E0CE0187960E94FB0900E0A0 +:10127000D3CF69E272E0CE0187960E94FB0910E0AD +:1012800081E6E8168AEEF80640F06FE272E0CE01E1 +:1012900087960E94FB09F12CE12C8FE39FE10197D7 +:1012A000F1F700C00000D12EB02E84CF112341F3FE +:1012B000D3CFCF93DF93C2E4D2E0CE010E94A70C3C +:1012C000239682E0C237D807C1F780E1FE01119270 +:1012D0008A95E9F781E080938202DF91CF910895AA +:1012E0001F921FB61F9211242F933F934F938F93FA +:1012F0009F93EF93FF934091C6002091C4023091D9 +:10130000C5022038310599F08091C6029091C7023C +:101310008038910561F0205831093093C50220933F +:10132000C402805891099093C7028093C6028091AD +:10133000C4029091C502FC01EF77FF27EC53FD4FEB +:10134000448301969093C5028093C402FF91EF916C +:101350009F918F914F913F912F911F901FBE1F9092 +:1013600018952AE0FC0120831092C50089E1809342 +:10137000C40086E08093C200E1ECF0E088E1808365 +:1013800080818068808308958091C00085FFFCCFB4 +:101390006093C6000895EF92FF920F931F93CF932F +:1013A000DF937C01EB018B01040F151FC017D107E0 +:1013B00039F06991662321F0C7010E94C409F6CF74 +:1013C000DF91CF911F910F91FF90EF9008950F93B0 +:1013D0001F93CF93DF938C01EB01FE016491662391 +:1013E00029F0C8010E94C4092196F7CFDF91CF915F +:1013F0001F910F910895EF92FF920F931F93CF9338 +:10140000DF937C018B01D0E0C0E0F8010190002067 +:10141000E9F73197E01BF10BCE17DF0748F4F8012D +:10142000EC0FFD1F6081C7010E94C4092196EDCF1A +:10143000DF91CF911F910F91FF90EF9008954F9200 +:101440005F926F927F928F929F92BF92CF92DF9224 +:10145000EF92FF920F931F93CF93DF93CDB7DEB739 +:10146000C054D1090FB6F894DEBF0FBECDBF6C01DA +:101470004115510561057105D1F460E30E94C4096D +:10148000C05CDF4F0FB6F894DEBF0FBECDBFDF915B +:10149000CF911F910F91FF90EF90DF90CF90BF9071 +:1014A0009F908F907F906F905F904F900895CE01A6 +:1014B00001967C0180E4F70111928A95E9F7B12C3D +:1014C00077FF0DC0CA0157FF04C088279927841BE6 +:1014D000950BAC01990F660B770BBB24B3940EE30D +:1014E00010E08AE0482E512C612C712CC801411566 +:1014F000510561057105B9F001151105A1F047010C +:10150000800E911ECB01BA01A30192010E94910F9E +:10151000942F852F605DF4016083A901692F782FD6 +:1015200001501109E3CFBB2039F0F701E00FF11FA3 +:101530008DE28083C80101974FE350E0481B590BAF +:10154000BC016F5F7F4F6E0D7F1DC6010E94CB09EE +:1015500097CF81E04091C6025091C7022091C4020A +:101560003091C5024217530708F080E00895CF93E9 +:10157000DF93EC01DB0190E080E084179507A9F090 +:101580002A813B81688179812617370770F4B90178 +:101590006F5F7F4F7B836A832F773327FE01E20FD4 +:1015A000F31F24812D930196E8CFDF91CF91089509 +:1015B0000F931F93CF93DF938B01FC0160812091E8 +:1015C000C6023091C7028091C4029091C502821B6D +:1015D000930BD0E0C0E0F901EC0FFD1FEF77FF2780 +:1015E000EC53FD4F7481671306C0C817D90770F01C +:1015F000D0E0C0E026C021968C179D07C8F3C13803 +:10160000D10549F78238910518F4F2CF2097C9F037 +:10161000415051094C175D0708F4EA01AE01B801C9 +:1016200084EC92E00E94B70AF801EC0FFD1F1082D3 +:101630008091C6029091C70201969093C702809351 +:10164000C602CE01DF91CF911F910F910895E4EC76 +:10165000F2E011821082138212820895E09101015A +:10166000F091020120813091000181E090E0AC0115 +:1016700001C0440F3A95EAF7342F30953223308376 +:101680002081242B2083E7EBFBE03197F1F700C0AA +:101690000000E0910101F0910201408120910001E0 +:1016A000BC0102C0660F771F2A95E2F79B012095C7 +:1016B00024232083E7EEF3E03197F1F700C0000028 +:1016C000E0910101F0910201208130910001AC0113 +:1016D00001C0440F3A95EAF7342F30953223308316 +:1016E0002081242B2083E7EEF3E03197F1F700C04F +:1016F0000000E0910101F091020120813091000190 +:1017000001C0880F3A95EAF780958223808387EBA2 +:101710009BE00197F1F700C000000895662309F4EB +:1017200060C0E0910101F09102012081309100013F +:1017300081E090E0AC0101C0440F3A95EAF7342F04 +:101740003095322330832081242B2083E7EEF3E091 +:101750003197F1F700C00000E0910101F091020122 +:10176000408120910001BC0102C0660F771F2A95BD +:10177000E2F79B01209524232083E7EBFBE03197E0 +:10178000F1F700C00000E0910101F0910201208119 +:1017900030910001AC0101C0440F3A95EAF7342FB3 +:1017A0003095322330832081242B2083E7EEF3E031 +:1017B0003197F1F700C00000E0910101F0910201C2 +:1017C00020813091000101C0880F3A95EAF7809599 +:1017D0008223808387EB9BE00197F1F700C0000034 +:1017E00008950C942E0BEF92FF920F931F93CF93BB +:1017F000DF93EC01E0910101F09102012081309131 +:10180000000181E090E0AC0101C0440F3A95EAF795 +:10181000342F3095322330832081242B2083E7EE30 +:10182000F3E03197F1F700C00000E0910101F09181 +:10183000020120813091000101C0880F3A95EAF73A +:1018400080958223808387EB9BE00197F1F700C0AE +:10185000000010E000E0E12C80E8F82E29813A81B8 +:10186000C701002E02C0969587950A94E2F782235D +:10187000932361E0892B09F460E0CE010E948E0B76 +:101880000F5F1F4F0A30110549F7DF91CF911F916C +:101890000F91FF90EF900895E0910101F091020106 +:1018A00020813091000181E090E001C0880F3A95DD +:1018B000EAF780958223808387E199E70197F1F722 +:1018C00000C0000008950F931F93CF93DF93EC01A6 +:1018D0000AE010E0CE010E94F30B61E0CE010E940D +:1018E0008E0B0E942E0BCE010E944C0C0150110950 +:1018F00089F781E08883DF91CF911F910F9108953F +:101900000F931F93CF93DF93EC010AE010E0CE0119 +:101910000E94F30B0E942E0B61E0CE010E948E0B01 +:10192000CE010E944C0C0150110989F71882DF91F9 +:10193000CF911F910F910895FC01818192810895AB +:10194000FC0180810895FC01728361830895FC018C +:10195000108208958F92AF92CF92EF92FF920F93E1 +:101960001F93CF93DF93CDB7DEB7FC017183608304 +:101970003383228315830483A6828782DB011C9232 +:10198000DA011C928FEF9FEFD70111969C938E93F3 +:10199000DA018C9188618C938C91BC2DB770CB2E21 +:1019A000C82ADA01CC92A081B1818C9182608C939B +:1019B000A281B38111961C921E920480F581E02DC4 +:1019C00011821082DF91CF911F910F91FF90EF90C4 +:1019D000CF90AF908F900895DC01ED91FC919081B4 +:1019E00081E0923009F480E00895DC01ED91FC91F2 +:1019F00011971082ED91FC9180818260808308951F +:101A0000CF93DF93EC010E94F50C8E81882329F09F +:101A1000E881F9818081806880838F81882329F023 +:101A2000E881F981808180628083DF91CF91089580 +:101A3000DC011296ED91FC91808191810895DC0189 +:101A40001296ED91FC91718360830895AF92CF92CD +:101A5000EF920F931F93CF93DF93FC01DA01718311 +:101A600060833383228315830483C682A782EB01BC +:101A700018821C928681882329F0C081D1818881B7 +:101A8000806888838781882329F0C081D1818881FB +:101A900080628883C081D1818881836088838C91B2 +:101AA000DE2DD770ED2EE82AEC92A281B3811C9234 +:101AB0000480F581E02D1082DF91CF911F910F916D +:101AC000EF90CF90AF900895DC01ED91FC91808173 +:101AD000837080830895CF93DF93EC010E94640D9F +:101AE0008E81882329F0E881F98180818068808354 +:101AF0008F81882329F0E881F98180818062808349 +:101B0000DF91CF910895DC011296ED91FC916083F5 +:101B10000895DC011496ED91FC9160830895FC0119 +:101B200071836083538342831482168215821782E5 +:101B300010861186128681E0838787E08487158668 +:101B40000895CF93DF93EC0181E08D87888199819F +:101B50000E946B0D8A819B81DF91CF910C946B0D5C +:101B6000CF93DF93EC016C836623A9F060E088815A +:101B700099810E94890D60E0888199810E94830D7E +:101B800060E08A819B810E94890DCE010E94A10D97 +:101B90001F821E821D82DF91CF910895CF93DF9324 +:101BA000EC011D86888199810E94640D8A819B8148 +:101BB000DF91CF910C94640DFC0114826087418702 +:101BC0002287338531110AC0620F7727771F460FAE +:101BD000572F511D452B11F40C94CE0D0C94A10DD3 +:101BE00061506031D8F5E62FF0E0E85CFB4E0C94D4 +:101BF000B00F20E54FEF60EA0C94DC0D24E14FEFCD +:101C000068ECFACF2CE84FEF64EBF6CF20E040E031 +:101C10006FEFF2CF2AE04CE3FBCF2EE14EE1F8CF9D +:101C200020E04BE9F5CF20E04FEF0AC02AE04FEF6C +:101C300067E3E2CF27E040E568E0DECF2FEF40E04A +:101C400060E0DACF2FEF4FEF62E3D6CF26E940E531 +:101C50006AE0D2CF2CEDE8CF20E0D1CF24E14DE2F5 +:101C6000D7CFFC0163870895CF93DF93EC018C817C +:101C7000813041F58D819E812F8121111CC00196FB +:101C80009E838D836D817E816F3F7105B1F481E00C +:101C90008F83888199810E94890D6D8160958881EB +:101CA00099810E94830D6D8160548A819B81DF91AF +:101CB000CF910C94890D0197E3CF6115710549F718 +:101CC0001F82E7CF823021F58D819E812F812111E6 +:101CD00018C001969E838D836D817E816E3F21E0C9 +:101CE000720789F481E08F83769567958881998161 +:101CF0000E94890D60E0888199810E94830D60E0D7 +:101D0000D4CF0197E7CF6115710571F71F82ECCF32 +:101D1000833069F58D819E812F81211121C001962B +:101D20009E838D836D817E8161154FEF7407D1F4A1 +:101D300081E08F8346E0769567954A95E1F7888143 +:101D400099810E94890D6E81888199810E94830DFD +:101D50006D817E8153E0769567955A95E1F7A5CF21 +:101D60000197DECF6115710529F71F82E3CF84301B +:101D700009F043C06D817E8188819981611520E2DF +:101D80007207F0F536E0769567953A95E1F70E948F +:101D9000890D6D817E81613044E0740780F0888117 +:101DA00099819B01215030422F3F3F4178F570527D +:101DB00026E0769567952A95E1F70E94830D8D813F +:101DC0009E81813020E2920730F0692F66958A81EA +:101DD0009B810E94890D8D819E818A3F4FEF9407E0 +:101DE000C8F401969E838D838FEF90EE20E08150A2 +:101DF00090402040E1F700C00000DF91CF910895AE +:101E0000672F6695669566956058C1CF672F669572 +:101E10006058D3CF6CE88A819B810E94890DE4CF02 +:101E2000CF93DF93EC010E94340E8C8181116FC03F +:101E30008B85882309F45FC08D819E8101969E83E6 +:101E40008D839C8501C0880F9A95EAF781115FC048 +:101E500098B588858917B1F068B528B5281B330B6C +:101E600081E090E01216130614F090E080E0232F3A +:101E7000221F2227221F821B9109681B88819981BA +:101E80000E94890D97B589858917B1F067B527B587 +:101E9000281B330B81E090E01216130614F090E03B +:101EA00080E0232F221F2227221F821B9109681BFB +:101EB000888199810E94830D9091B4008A85891749 +:101EC00031F16091B4002091B400281B330B81E004 +:101ED00090E01216130614F090E080E0232F221FEA +:101EE0002227221F821B9109681B8A819B81DF9117 +:101EF000CF910C94890D6985888199810E94830D09 +:101F00006885888199810E94890D6A85EECFDF916D +:101F1000CF91089588B508958091B400089587B54C +:101F20000895052E97FB1EF400940E94A80F57FDFC +:101F300007D00E94B60F07FC03D04EF40C94A80FF4 +:101F400050954095309521953F4F4F4F5F4F0895E5 +:101F500090958095709561957F4F8F4F9F4F089515 +:101F6000EE0FFF1F0590F491E02D0994A1E21A2EC7 +:101F7000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F2D +:101F8000A217B307E407F50720F0A21BB30BE40B7D +:101F9000F50B661F771F881F991F1A9469F76095C4 +:101FA0007095809590959B01AC01BD01CF0108957E +:101FB000A0E0B0E0EEEDFFE00C94F1135C016B01EA +:101FC0007A016115710519F0FB0191838083E11499 +:101FD000F10429F0C7010297839708F0E5C0E501F5 +:101FE0002196F5011081812F90E00E940C11892B20 +:101FF00011F05E01F4CF1D3229F42196F501118113 +:1020000001E007C01B3221F4E5012296F5011181A0 +:1020100000E0E114F10409F1F0E1EF16F10429F414 +:102020003FC010E3E114F10421F128E0E216F104CD +:1020300001F154F4E2E0EE16F10421F5812C912C2B +:10204000A12CB0E4BB2E3EC0FAE0EF16F10439F04B +:1020500020E1E216F104B1F430C0103319F1FAE0D6 +:10206000EF2EF12CACEC8A2E982CA82CACE0BA2EDA +:1020700029C078E0E72EF12C812C912CA12CE0E1F5 +:10208000BE2E20C060E070E080E090E897010F2C49 +:10209000000C440B550B0E94B60F49015A0112C0A7 +:1020A000103359F488818F7D883509F0BACF1981B2 +:1020B0002296026080E1E82EF12C812C912CA12C3B +:1020C00068E0B62E40E060E070E0CB0127010F2C05 +:1020D000000C66087708FE0150ED352E310E29E020 +:1020E000231570F42FEB210F2A3118F439EC332E1D +:1020F00006C02FE9210F2A3118F529EA322E310EB8 +:10210000232D30E02E153F05DCF447FD16C0861662 +:102110009706A806B90670F0A30192010E94D51394 +:10212000630D711D811D911D61307105810520E8D0 +:10213000920710F04FEF01C041E021961081CBCF04 +:10214000202F2170C114D10471F0442329F021976C +:10215000F601D183C08307C001FF19C02297F601A1 +:10216000D183C08314C047FF12C0222329F060E04E +:1021700070E080E090E804C06FEF7FEF8FEF9FE7A3 +:1021800022E230E0309349032093480309C0222320 +:1021900081F090958095709561957F4F8F4F9F4FFF +:1021A000462F372F282F12C040E030E020E090E08B +:1021B0000DC097FFF5CF82E290E0909349038093A2 +:1021C00048036FEF7FEF8FEF9FE7EACF642F732F06 +:1021D000822FCDB7DEB7E1E10C940D14FC01882706 +:1021E0009927E89421912032E9F3293010F02E301C +:1021F000C8F32B3241F02D3239F4689404C00E94A8 +:102200002311820F911D219120532A30C0F31EF417 +:10221000909581959F4F089591110C942E138032C3 +:1022200019F089508550C8F70895FB01DC01415031 +:10223000504030F08D910190801919F40020B9F7C9 +:10224000881B990B08957AE0979F902D879F802D8A +:10225000910D11240895AEE0B0E0E1E3F1E10C94BA +:10226000FE130D891E898F89988D26E02C831A8391 +:10227000098397FF02C080E090E801979E838D83D9 +:10228000AE01455E5F4F698D7A8DCE0101960E9449 +:102290005B114D815E8157FD0AC02F813885421741 +:1022A00053070CF49A01F801E20FF31F10822E96E7 +:1022B000E4E00C941A14ACE0B0E0E1E6F1E10C9437 +:1022C000F0136C017B018A01FC0117821682838165 +:1022D00081FFBEC1CE0101964C01F6019381F70149 +:1022E00093FD859193FF81917F01882309F4ACC10F +:1022F000853239F493FD859193FF81917F01853279 +:1023000029F4B60190E00E944713E7CF512C312CFD +:1023100020E02032A0F48B3269F030F4803259F0A2 +:10232000833269F420612CC08D3239F0803339F466 +:10233000216026C02260246023C0286021C027FDC0 +:1023400027C030ED380F3A3078F426FF06C0FAE0A7 +:102350005F9E300D1124532E13C08AE0389E300D3D +:102360001124332E20620CC08E3221F426FD6CC164 +:10237000206406C08C3611F4206802C0883641F40F +:10238000F70193FD859193FF81917F018111C1CF69 +:10239000982F9F7D9554933028F40C5F1F4F9FE337 +:1023A00099830DC0833631F0833771F0833509F09E +:1023B0005BC022C0F801808189830E5F1F4F4424D7 +:1023C0004394512C540115C03801F2E06F0E711C7A +:1023D000F801A080B18026FF03C0652D70E002C027 +:1023E0006FEF7FEFC5012C870E943C132C01830106 +:1023F0002C852F77222E17C03801F2E06F0E711C4A +:10240000F801A080B18026FF03C0652D70E002C0F6 +:102410006FEF7FEFC5012C870E9431132C012C85B3 +:102420002068222E830123FC1BC0832D90E04816D8 +:102430005906B0F4B60180E290E00E9447133A9446 +:10244000F4CFF50127FC859127FE81915F01B6014C +:1024500090E00E94471331103A94F1E04F1A51086E +:102460004114510471F7E6C0843611F0893639F50C +:10247000F80127FF07C060817181828193810C5F21 +:102480001F4F08C060817181072E000C880B990BCB +:102490000E5F1F4F2F76722E97FF09C09095809583 +:1024A000709561957F4F8F4F9F4F2068722E2AE065 +:1024B00030E0A4010E947713A82EA81844C08537E5 +:1024C00029F42F7EB22E2AE030E025C0F22FF97FCA +:1024D000BF2E8F36C1F018F4883579F0B5C080373B +:1024E00019F0883721F0B0C02F2F2061B22EB4FE32 +:1024F0000DC08B2D8460B82E09C024FF0AC09F2F09 +:102500009660B92E06C028E030E005C020E130E03A +:1025100002C020E132E0F801B7FE07C0608171819E +:10252000828193810C5F1F4F06C06081718180E0C2 +:1025300090E00E5F1F4FA4010E947713A82EA818E9 +:10254000FB2DFF777F2E76FE0BC0372D3E7FA51427 +:1025500050F474FE0AC072FC08C0372D3E7E05C0E0 +:10256000BA2C372D03C0BA2C01C0B52C34FF0DC0D6 +:10257000FE01EA0DF11D8081803311F4397E09C01E +:1025800032FF06C0B394B39404C0832F867809F059 +:10259000B39433FD13C030FF06C0B31498F43A0C63 +:1025A000532C5B1810C0B31470F4B60180E290E0B5 +:1025B0003C870E944713B3943C85F5CFB31418F4BD +:1025C0003B1802C05A2C312C34FF12C0B60180E3F4 +:1025D00090E03C870E9447133C8532FF17C031FDD5 +:1025E00003C088E790E002C088E590E0B6010CC027 +:1025F000832F867859F031FF02C08BE201C080E260 +:1026000037FD8DE2B60190E00E944713A51438F41F +:10261000B60180E390E00E9447135A94F7CFAA9442 +:10262000F401EA0DF11D8081B60190E00E9447138C +:10263000A110F5CF332009F450CEB60180E290E02E +:102640000E9447133A94F6CFF6018681978102C023 +:102650008FEF9FEF2C96E2E10C940C1499278827BA +:102660000895FC010590615070400110D8F78095E5 +:1026700090958E0F9F1F0895FC016150704001904E +:102680000110D8F7809590958E0F9F1F08950F9396 +:102690001F93CF93DF93182F092FEB018B8181FDBF +:1026A00003C08FEF9FEF1EC082FF0FC02E813F81BE +:1026B0008C819D812817390774F4E881F981CF0155 +:1026C000019699838883108306C0E885F985812F58 +:1026D0000995892B31F78E819F8101969F838E8387 +:1026E000812F902FDF91CF911F910F910895FA01C3 +:1026F000AA27283051F1203181F1E8946F936E7F41 +:102700006E5F7F4F8F4F9F4FAF4FB1E03ED0B4E031 +:102710003CD0670F781F891F9A1FA11D680F791F72 +:102720008A1F911DA11D6A0F711D811D911DA11D83 +:1027300020D009F468943F912AE0269F1124301993 +:10274000305D3193DEF6CF010895462F4770405D2E +:102750004193B3E00FD0C9F7F6CF462F4F70405DDD +:102760004A3318F0495D31FD4052419302D0A9F738 +:10277000EACFB4E0A6959795879577956795BA9532 +:10278000C9F700976105710508959B01AC010A2EF8 +:1027900006945795479537952795BA95C9F7620FCF +:1027A000731F841F951FA01D0895DB018F939F93B6 +:1027B0000E94E513BF91AF91A29F800D911DA39F31 +:1027C000900DB29F900D112408950E942714A59F8B +:1027D000900DB49F900DA49F800D911D112408951C +:1027E0002F923F924F925F926F927F928F929F9221 +:1027F000AF92BF92CF92DF92EF92FF920F931F930F +:10280000CF93DF93CDB7DEB7CA1BDB0B0FB6F894BF +:10281000DEBF0FBECDBF09942A88398848885F84FF +:102820006E847D848C849B84AA84B984C884DF8070 +:10283000EE80FD800C811B81AA81B981CE0FD11D54 +:102840000FB6F894DEBF0FBECDBFED010895A29F75 +:10285000B001B39FC001A39F700D811D1124911D74 +:10286000B29F700D811D1124911D0895F894FFCF22 +:10287000F90DFE0D020E060E0A0E0D0E100E130EB1 +:10288000160E130E1A0E1E0E220E260E2A0E2C0ED9 +:102890000525005354006164640052656C61792021 +:1028A000736176656421204E554D4245523A20258C +:1028B000752049443A202558200A0064656C6574E7 +:1028C00065006C697374004E554D4245523A20259F +:1028D000752049443A2025580A0052454C41593A3E +:1028E000202575207475726E6564206F6E0A004E27 +:1028F0006F2073757463682052656C61790A0052A9 +:10290000454C41593A202575207475726E656420D6 +:102910006F66660A006D616368696E65206F6E00A0 +:102920006D616368696E65206F6666005475726ECE +:102930006564206F666620537461746520707269E7 +:102940006E74696E670A007072696E740043757206 +:1029500072656E74205247422076616C7565733AD9 +:102960000A523A20257520473A20257520423A2000 +:1029700025750A007061747465726E0070726573FB +:1029800065740066616465206F6E00666164652031 +:102990006F66660072656C617900726762006175CE +:1029A00078007374617465006572617365006865B1 +:1029B0006C70004431004F0A00430A004432004466 +:1029C0006F6F72204F70656E205761726E696E670F +:0229D0000A00FB :00000001FF diff --git a/serial.cpp b/serial.cpp index 674919d..eee0156 100644 --- a/serial.cpp +++ b/serial.cpp @@ -1,12 +1,19 @@ #include "serial.h" +#include "ringbuffer.h" -char rxBuffer[BUFFER_SIZE]; -volatile uint16_t interruptIndex = 0; +RingBuffer rxBuffer; + +bool stopped = false; ISR (USART_RX_vect) //I have seen worse interrupt sintax { - rxBuffer[interruptIndex % BUFFER_SIZE] = UDR0; - interruptIndex++; + rxBuffer.write(UDR0); + if(serialFlowControl && !stopped && rxBuffer.isOverun(32)) + { + loop_until_bit_is_set(UCSR0A, UDRE0); + UDR0 = 0x13; + stopped = true; + } } Serial::Serial() @@ -32,6 +39,17 @@ void Serial::write(const char* in, const unsigned int length) } } +void Serial::write_p(const char in[]) +{ + char ch = pgm_read_byte(in); + while (ch != '\0') + { + putChar(ch); + in++; + ch = pgm_read_byte(in); + } +} + void Serial::write(const char in[]) { for(unsigned int i = 0; i < strlen(in); i++) @@ -40,14 +58,6 @@ void Serial::write(const char in[]) } } -void Serial::write_p(const char *in) -{ - while (pgm_read_byte(in) != '\0') - { - - putChar(pgm_read_byte(in++)); - } -} void Serial::write(int32_t in) { @@ -77,54 +87,39 @@ void Serial::write(int32_t in) } } - bool Serial::dataIsWaiting() { - return (interruptIndex > _rxIndex); + return !rxBuffer.isEmpty(); } char Serial::getChar() { - if( _rxIndex >= (32768) - 2*BUFFER_SIZE ) flush(); //may explode only occasionaly - if(dataIsWaiting()) + if(!rxBuffer.isEmpty()) { - _rxIndex++; - return rxBuffer[(_rxIndex -1) % BUFFER_SIZE]; + if(serialFlowControl && stopped && !rxBuffer.isOverun(32)) + { + loop_until_bit_is_set(UCSR0A, UDRE0); + UDR0 = 0x11; + stopped = false; + } + return rxBuffer.read(); } else return '\0'; } unsigned int Serial::getString(char* buffer, const int bufferLength) { - int i = 0; - for(; i <= (interruptIndex-_rxIndex) && i <= BUFFER_SIZE && rxBuffer[(_rxIndex+i) % BUFFER_SIZE] != _terminator; i++); - - if( i < (interruptIndex-_rxIndex) && i > 0) - { - int j = 0; - for(; j < i && j < bufferLength-1 ; j++) - { - buffer[j] = getChar(); - } - buffer[j+1]='\0'; - _rxIndex++; - } - else - { - i = 0; - if( _rxIndex >= (32768) - 2*BUFFER_SIZE ) flush(); - } + return rxBuffer.getString(_terminator, buffer, bufferLength); +} - if (rxBuffer[(_rxIndex+i) % BUFFER_SIZE] == _terminator) _rxIndex++; - - return i; +unsigned int Serial::read(char* buffer, const unsigned int length ) +{ + return rxBuffer.read((uint8_t*)buffer, length); } void Serial::flush() { - _rxIndex = 0; - interruptIndex = 0; - for(int i = 0; i < BUFFER_SIZE; i++) rxBuffer[i] = ' '; + rxBuffer.flush(); } void Serial::setTerminator(char terminator){_terminator = terminator;} diff --git a/serial.h b/serial.h index e7323a7..7153bf2 100644 --- a/serial.h +++ b/serial.h @@ -2,7 +2,7 @@ #define SERIAL_H #define BAUD 38400 -#define BUFFER_SIZE 128 +#define SERIAL_BUFFER_SIZE 128 #include #include @@ -11,12 +11,12 @@ #include #include +const bool serialFlowControl = false; class Serial { private: char _terminator = '\n'; - uint16_t _rxIndex=0; public: Serial(); @@ -25,6 +25,7 @@ public: void write(const char in[]); void write_p(const char in[]); //for flash space strigns void write(const int32_t in); + unsigned int read( char* buffer, const unsigned int length ); bool dataIsWaiting(); char getChar(); unsigned int getString(char* buffer, const int bufferLength);