From bcaac7276b1d6fdae554411eed80780fe5d8f6b6 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Sun, 29 Mar 2026 22:58:02 -0700 Subject: [PATCH] Add files via upload --- examples/README.md | 62 + examples/example_bmp_dib.bmp | Bin 0 -> 30240 bytes examples/example_braille.txt | 17 + examples/example_covert_timing.pcap | Bin 0 -> 34744 bytes examples/example_directional_override.txt | 9 + examples/example_dns_tunnel.pcap | Bin 319 -> 319 bytes examples/example_dns_txt.pcap | Bin 0 -> 239 bytes examples/example_echo_hiding.wav | Bin 0 -> 132344 bytes examples/example_emoji_skin_tone.txt | 20 + examples/example_gif_disposal.gif | Bin 0 -> 94 bytes examples/example_hangul_filler.txt | 23 + examples/example_hidden.gz | Bin 386 -> 386 bytes examples/example_hidden.pcap | Bin 450 -> 450 bytes examples/example_hidden.tar | Bin 10240 -> 10240 bytes examples/example_hidden.zip | Bin 701 -> 701 bytes examples/example_html_events.html | 21 + examples/example_http_headers.pcap | Bin 712 -> 712 bytes examples/example_icmp_steg.pcap | Bin 366 -> 366 bytes examples/example_ipid_covert.pcap | Bin 0 -> 2132 bytes examples/example_jpeg_app.jpg | Bin 0 -> 2084 bytes examples/example_jpeg_restart.jpg | Bin 0 -> 1436 bytes examples/example_math_alphanumeric.txt | 1 + examples/example_misspelling.txt | 44 + examples/example_morse.txt | 40 + examples/example_multibase.txt | 22 + examples/example_nested.zip | Bin 0 -> 642 bytes examples/example_normalization.txt | 36 + examples/example_pdf_forms.pdf | 34 + examples/example_pdf_incremental.pdf | 32 + examples/example_pdf_javascript.pdf | 26 + examples/example_phase_coding.wav | Bin 0 -> 204844 bytes examples/example_polyglot.png.zip | Bin 733 -> 733 bytes examples/example_punycode.txt | 85 + examples/example_qr_steg.txt | 45 + examples/example_quantization_noise.wav | Bin 0 -> 88244 bytes examples/example_self_extracting.sh | 15 + examples/example_sentence_length.txt | 3 + examples/example_spread_spectrum.wav | Bin 0 -> 176444 bytes examples/example_tcp_covert.pcap | Bin 762 -> 762 bytes examples/example_tcp_urgent.pcap | Bin 0 -> 2404 bytes examples/example_tcp_window.pcap | Bin 0 -> 2404 bytes examples/example_tls_cert.pem | 22 + examples/example_ttl_covert.pcap | Bin 0 -> 4240 bytes examples/example_word_choice.txt | 3 + examples/example_xattr.txt | 3 + examples/example_xml_entities.xml | 78 + examples/generate_examples.py | 2621 +++++++++++++++++++++ test_examples.py | 514 ++++ 48 files changed, 3776 insertions(+) create mode 100644 examples/example_bmp_dib.bmp create mode 100644 examples/example_braille.txt create mode 100644 examples/example_covert_timing.pcap create mode 100644 examples/example_directional_override.txt create mode 100644 examples/example_dns_txt.pcap create mode 100644 examples/example_echo_hiding.wav create mode 100644 examples/example_emoji_skin_tone.txt create mode 100644 examples/example_gif_disposal.gif create mode 100644 examples/example_hangul_filler.txt create mode 100644 examples/example_html_events.html create mode 100644 examples/example_ipid_covert.pcap create mode 100644 examples/example_jpeg_app.jpg create mode 100644 examples/example_jpeg_restart.jpg create mode 100644 examples/example_math_alphanumeric.txt create mode 100644 examples/example_misspelling.txt create mode 100644 examples/example_morse.txt create mode 100644 examples/example_multibase.txt create mode 100644 examples/example_nested.zip create mode 100644 examples/example_normalization.txt create mode 100644 examples/example_pdf_forms.pdf create mode 100644 examples/example_pdf_incremental.pdf create mode 100644 examples/example_pdf_javascript.pdf create mode 100644 examples/example_phase_coding.wav create mode 100644 examples/example_punycode.txt create mode 100644 examples/example_qr_steg.txt create mode 100644 examples/example_quantization_noise.wav create mode 100644 examples/example_self_extracting.sh create mode 100644 examples/example_sentence_length.txt create mode 100644 examples/example_spread_spectrum.wav create mode 100644 examples/example_tcp_urgent.pcap create mode 100644 examples/example_tcp_window.pcap create mode 100644 examples/example_tls_cert.pem create mode 100644 examples/example_ttl_covert.pcap create mode 100644 examples/example_word_choice.txt create mode 100644 examples/example_xattr.txt create mode 100644 examples/example_xml_entities.xml diff --git a/examples/README.md b/examples/README.md index 7037209..c67cfe0 100644 --- a/examples/README.md +++ b/examples/README.md @@ -120,6 +120,68 @@ All new examples (Plinian divider series) encode the secret message: | `example_capitalization.txt` | Letter case encoding | Plinian divider in word-initial capitalization (lower=0, upper=1) | | `example_silence_interval.wav` | Audio silence timing | Plinian divider in silence gap durations (short=0, long=1) | +## More Unicode & Text Tricks (Plinian Divider) + +| File | Technique | What's Hidden | +|------|-----------|---------------| +| `example_directional_override.txt` | Bidi overrides (RLO/LRO) | Plinian divider in directional control chars with PDF cancellation | +| `example_hangul_filler.txt` | Hangul filler (U+3164) | Plinian divider in Korean invisible filler vs regular space | +| `example_braille.txt` | Braille patterns (U+2800) | Plinian divider bytes mapped to Braille Unicode block | +| `example_math_alphanumeric.txt` | Math bold (U+1D400) | Plinian divider in normal vs mathematical bold letter substitution | +| `example_normalization.txt` | NFC vs NFD | Plinian divider in Unicode normalization form choice per word | +| `example_sentence_length.txt` | Sentence word count | Plinian divider in odd (=1) vs even (=0) word count sentences | +| `example_word_choice.txt` | Synonym substitution | Plinian divider in synonym A (=0) vs synonym B (=1) selection | +| `example_misspelling.txt` | Typo patterns | Plinian divider in correct (=0) vs deliberately misspelled (=1) words | + +## More Network Protocol Steganography (Plinian Divider) + +| File | Technique | What's Hidden | +|------|-----------|---------------| +| `example_ttl_covert.pcap` | IP TTL covert channel | Plinian divider bytes encoded directly in IP TTL field values | +| `example_ipid_covert.pcap` | IP ID field encoding | Plinian divider 2 bytes per packet in IP Identification field | +| `example_tcp_window.pcap` | TCP window size | Plinian divider 2 bytes per packet in TCP window size field | +| `example_tcp_urgent.pcap` | TCP urgent pointer | Plinian divider in TCP URG pointer with URG flag set | +| `example_dns_txt.pcap` | DNS TXT record | Plinian divider base64-encoded in DNS TXT response record | +| `example_covert_timing.pcap` | Covert timing channel | Plinian divider in inter-packet delays (10ms=0, 50ms=1) | +| `example_multibase.txt` | Multi-base encoding | Plinian divider in base16, base32, base64, and base85 | +| `example_morse.txt` | Morse code | Plinian divider encoded in dot-dash Morse alphabet | + +## Advanced Image Techniques (Plinian Divider) + +| File | Technique | What's Hidden | +|------|-----------|---------------| +| `example_pvd.png` | Pixel Value Differencing | Plinian divider in adjacent pixel pair difference parity | +| `example_histogram_shift.png` | Histogram shifting | Plinian divider via peak pixel value shifting (peak=0, peak+1=1) | +| `example_lsb_4bit.png` | LSB 4-bit per channel | Plinian divider using 4 lower bits per channel (high capacity) | +| `example_lsb_msb_first.png` | LSB MSB-first ordering | Plinian divider with reversed bit extraction order per byte | +| `example_bmp_dib.bmp` | BMP DIB header fields | Plinian divider in reserved header bytes + trailing data | +| `example_gif_disposal.gif` | GIF disposal method | Plinian divider in frame disposal flag bits | +| `example_jpeg_app.jpg` | JPEG APP segment | Plinian divider in custom APP14 segment (ST3GG identifier) | +| `example_ycbcr.png` | YCbCr color space | Plinian divider in Cb chrominance channel LSB after RGB conversion | +| `example_png_chunks_custom.png` | PNG custom chunks | Plinian divider in private stEg/sT3g ancillary PNG chunks | + +## More Document & Archive Techniques (Plinian Divider) + +| File | Technique | What's Hidden | +|------|-----------|---------------| +| `example_pdf_javascript.pdf` | PDF JavaScript | Plinian divider base64 in OpenAction JavaScript | +| `example_pdf_incremental.pdf` | PDF incremental update | Plinian divider in appended incremental update annotation | +| `example_pdf_forms.pdf` | PDF form fields | Plinian divider in hidden form field default values | +| `example_html_events.html` | HTML event handlers | Plinian divider in onclick, onload, onmouseover attributes | +| `example_xml_entities.xml` | XML entity declarations | Plinian divider in DOCTYPE entity definitions + per-byte entities | +| `example_nested.zip` | Nested ZIP archive | Plinian divider in inner ZIP comment + secret.txt inside ZIP-in-ZIP | +| `example_emoji_skin_tone.txt` | Emoji skin tone selectors | Plinian divider in skin tone modifier choice (4 tones = 2 bits) | +| `example_punycode.txt` | Punycode/IDN domains | Plinian divider bytes encoded as internationalized domain names | + +## Final Techniques (Plinian Divider) + +| File | Technique | What's Hidden | +|------|-----------|---------------| +| `example_jpeg_restart.jpg` | JPEG restart markers + COM | Plinian divider in RST marker indices + COM comment segment | +| `example_matched_pairs.png` | Matched pairs LSB | Plinian divider in pixel pair ordering (left>right=1, left<=right=0) | +| `example_scanline_filter.png` | PNG scanline filter abuse | Plinian divider in per-row filter byte choice (None=0, Sub=1) | +| `example_qr_steg.txt` | QR code data encoding | Plinian divider in QR data bit pattern + error correction analysis | + ## Regenerating Files If you want to modify the hidden messages or create new samples: diff --git a/examples/example_bmp_dib.bmp b/examples/example_bmp_dib.bmp new file mode 100644 index 0000000000000000000000000000000000000000..306e090b27763d407f2e2914c313fef02fa6f077 GIT binary patch literal 30240 zcmeI*$Id3vdY0kM)C0y0Jw!rV+Y$x|BnE(OVY~qgOp-hSch0$=&N=7w<(zZQIsfOe zkA(Yw@C1oLA3#gjTeYgzs>yu<^>6;eshhv~%^%*j{_xL#^PAuNW9G!)&p-IhKVtQp z-~0*tyMOq9$1k|38?d0d2w7NNL@cT^0#SAYm zb#bsGb&u2uSWq2=EUXS97F7o^i>rf#CDlR7(&`{%S#^-JygDdYQ5}@5tPUzxRR=Yz ztAmC$)j`YJ>Y!s?b$k+ZzoC|FT#l&q{aDppk+HLI(QhBehj z%i3zAV_mh;v%cCG*idbZY^*jWHdPxlo2!k5E!D=#)@oy8TeY#Xz1lb!p^nrFSWqp5 zEUXqH7F7!|i>rl%CDlU8(rO`NS+$U}yjmz&Q7x3LtQIO(RSPw%tA&O&)k4eKYN2CY zwa~M^S{T?+EsSie7A7`T3p1Omg@rBE!phcaVPjjhu(Q2dI2fURwIbI~w`vA-ENCG$ z5w?h$h+0fd#4VvFl9o~vY0IdItmV{1-U@1>XeBjKwu+jlT1`#Vt)V8G)>0E~>!^vY z_0&Y)25MqxBQ-I$iJF+&Oij#fp(d8LQWI<2sEMuZ)WqHnYU1cvBVa)_5VEiuh*(q& z#4N4`5|&g0DNCz?jAhk8&hl!YU_~`hva%YeSXB+wtgZ$c)>H#6Ypa2db=5%6`f6Zc zLp3n6u^O1zR1M5*t_BviR0AtptAUMe)xgg7YT#gmI#NAgLDdnmuZn*%b=0h`IvUng9W86Cj*fLzN6-4IV_-woF|x7h znAlWx%xtbY7PeF!D_g6MjcrxO&i1O~V1znSEnq>_5VEjph*(rL#4N5F5|&gADNCz{ zjAd0r&ho0EU`5qXva)KZSXDLDtgadw)>I8GYpaHibyY*p`l?}IL)9>{v1*vuR5i?O zt{N7$R1GUztA>qjRm0Bqs^MUS`qheDKi#St(6OL}R7Kb#sv>GJRS~y@sz_Q&RirJW zDzcVS6?rSDilUWNMcFEhdDo9vT6{IY!3Nn^e1v$&B zf`S!QLCMOhpkh^3P_w!!XjoGfw5+WPI@VPMJ?pE2felr`$i}K*VpCNxv$-l**isd& zY^@45wp9f?+pB_u5$Z_gfCW`X$igZkVo{Y5v$)DgSW;!AEUhv!mQ@)!%d3on6;(#b z$||E`Rh3b*y2@x+Q)RTQtui{+RT(|&tBipSRmRB1Dq~_(l`*rq%2?P^WvpziGB&nV z89UpnjDr#CNTq-URYJ(ZDj{M~l@PPIN=R5zC8R8^5;B%m2|3HFgn|`SLdnW1p<-2) zP_w#9XjoGvw5+WXI@VPQJ?pE4felr{$i^yRVpEkcv$;xG*it2|Y^@SDwp9r`+pC0w z5$abfa{Y9xVnD}&7E%#mi>QdG#Z*Mx5-K8TDHV~njEcxwPDSLcpdyM^QW0gVsEDf7 zR7BkxDxzsE716eiis)KTMf7c;B8E0n5o4REh^fs~#M~AtVreTCv9^th*xF7-?Cqc; zj*b-q7E}Qt3#)*LMO8q|;wm6vNfnT?vrRt4lNuL25IQ~@O`tAL7CRY1+^DxhIa z70|M_3g}o@1@x@10tPlz0V5l$fQe02z|7_};samN#&5Tv~tK;RypJ>uN(?iR1PI8D~F0zl|#+y%AsLR<};}o3RqAnge<$IkYO z<6wk3QY>IW#SpTvVu)B&F~lsc7!sCL3@J-1hKywuL(cMwpA*iQXOqbRbLQxthCD2k$$6h+x8ilS;YMNzkg zqG(!6QM9e2D7w~D6nz^gilL1Z#n>i_Vrnx*F}H=HSlUWatZkzxwzg9gdpjtKqhpbP z1r63f`JVc!N|snU}956FtfQLSlCh#tZc0aHnvp+JKHOQgAwXT;eZ7dM##bn zBVtj75wp0$NLW%~q%5s4GL}^sIm;`If)y1;$;t|&VpWAvv%11)SW{uNtgSFQ)>Rli z>nn_b4Hd@7#tLI%Q-v|Jxx!f3QemuYtuQvWRTw+lD~y8?>PVr01rI$G?O$E@hwgTu_R{`{_uK)%%Q~)CzD}aej z6~N5q3SePN1+cQU0@&DA0qktA01if|BmD?iP(Ki|uznz7QT;&7;`)JvCG`U-OX~+R zmemjBEUzCZSW!Pvva)`lVpaV>&FcDrhBfsAEo^sKKR7}!uhFtV|JU}97K zz|7|QfrTyg11nqW2R63V5A1BOA2=AHj`TfXL48Na!upPgMfDvqi|acQmehBoEUoXz zSXSSWv%J2eU`2gL$;$eUidFR;HLL488rIZzw5+Y~=vY_Z(X+n3V_-vl$H>O|j)_h6 z9W$HjI~KOocdTr!@7UN@-?6j3zT;qo`qheDKi%qEK*xd>(l>-HqHl;=Oy3Z%iVQDLU!`e3bhOO=N4SPH28;*{B4OmcL5wftpB4SZ}Ma<&*ii9Qg z6)8*WD>9bVSL7_OuP9hiUs1BMzM^7PeMQac`ih1%^%X5^>nl3e)mQYaudf)`P+u{! zvA$wrQ+>tE=K6|-E%g;ETk9(}w$)ecY_G347@>~zC162)LCC`Tf`~=+1u={33lf&p z7o;q$FUVL{Uy!rBzMx=5eL=~}`htp8^#wJn>kAsz)EBg@tuN?US6|SxzP?~!Lw&)> z#`=PZP4xvco9hb}w$vA_Y^^WY*j8V#v%S9HV1zo-=YR$E86gYnGa?q%XT&V7&q!EO zpOLb(J|kmUeMZjm`iz1V^%*5A>oY1=)o0YKuFq&#Q=ieYwmzd{U42H+`udE44fPo# z8|yPBHq~d$Y_88(*ixUdvb8>AV_SX3&i49@gAwXiD{}pGt4{$P3tC8@5VnXuA!;#w zLfjJigrueP32Dpd6S9`mC*-Z5PbgYRpHQ}nKA~zgeL~$D`h=#n^a*Y2=o7lu(1=05i^_XBNn#QN33kEkJ#8&AF;E&KH^}6I?{)L1@!?T3+n?S7S#vD zEUphoSW+L5va~)RV_AJb&hq+zf)(`vB`fO#Dpu78)U2)#XjoGp(6Y8ZpkrNqK+pR6 zfPoG50V5mh112`r2h41)4_MezAF#5uK44>8eZbE4`hbHG>PYVc7Swx$EUfp4SXA#3 zv$)pc!es9&wf_0z511#~QEA-zM` zB6^3Y#qn$o))mzl8uD57dQ*Y6-w%(#+ zUA;xm`g)6j4fPfy8|y75Hq~3qY_7Lh*ivt?vbEk~V_Ut&&h~nXgAwXTZvqz78-y&Z zH;7nNZxFM%-XLK~y+O*-dV`E*^#(c1>kSH4)EktntT(7wRc}zUy568+O}#+1~$Hq;x8Y^*n!*i>&Yv$@`2VN1Qi%GP>=jcxS?JKO6G4o0XWy$)DVuMx7a zUL#^ry++L9dX0o7^%^Nl>oqc#)obJ|uh%G8QLj<5vRd>UxcaHT4=TYwI;S z*41nDtgqJ?*if%Avaw!cVpF}w%;tKHg)Q|OD_iR|Hn!Dk>};>sI2fURwIbI~w|W)O zv7m+Y3So=r6`~f?E5t3KS4dh)uaLHkULk8ay+Ym!dWE8u^a^FG=oP9~(<{`ip;u^H zORvzjj$WZ_J-tHT26}~|jr0m*o9Gp$Hq$H2ZJ}3K+DfmmwvAq4YdgKd-VS<&qhl`v z7Sv0GEUcG^SX3_&v$$R&VM)D2%F=p?jAiu_Im_!M3Rcuhl&q|ms904mQM0;UqG3(F zM9bQGiH>#k5m?3Gs3W}y zSWqtzvanttVo|+7%;I{1geCO?DNE}GGM3c~jgHp)eG!wuNOENp^o%C zU_m`c$ijM#h(+}rF^lUt5|-3+q%5uH$XHg-k+Zy>qhLinN6E^1j*3p2#-)N`zCt>@U-R?o4sy`JM>g!Euv?LT1?Lnw}hS{X(>HJ+A?~EtmX6!c`N7{idNDyl&zv?s9H_W zP`8Gjp=m8WL)$ufhOYJW41F8u8HP5}GmLGbXPDYd&oH-zo?&S#J;T~IdWNm-^bC7D z=oyZVJq=h;PZ6@Po+4sVJw?podWwW4^%N;f>nSpp)l=jwucs(jQBP5_vYw)1RXs(` z>UxTXHT4uNYwIaG*40z=tgojS*icU~vaz0GVpBcE%;tKEg)Q|ID_iR+Hn!DM>};>6 zI2fUh^dw+GJweFAdV+{W^#n1C>j@H;)DxsEttZG>R!@+#yq=(7MLj{u%6fu|RrLfl ztLq6G*3=WUtgR>LSXWQbv%a2SU_(8@$i{ktiB0tcGn?xP7PizAtZc0(*w|K2u(Q3M z;9!J0(&K;y^%x-w>oFo0)nmjguE$7NQjd|cv>qd4Sv^M1@_LMd74;Y;E9)^TR@GzF ztggpsSW}PDvbG+hV_iK)&-!|dferN-BOB{6CN|Y$%xtd5SlCjJv9h%uV`E!A#?JP7 zjDr#CS1WS;bgM@J9Sd4Wj}W$q9wBNmJwn_PdW58<^ayFo=n=A((<9`qphqZLNsmyr ziXNeAH9bPz8hV7Lwe$#W>*x`>*3%>OZJBJ95H+joAsW`yL$s`|hv-;W57D!}9%5iaJ;cbydWeZl^$;_g>me4l)I+Rnt%umy zRu8eWy&mFVggVlLfCcpcAq(pPA{NyH#4N4{NLW%2kg~KMAY)lQK+f`dfPxkE03|Ey z0V-D21Jtap2WVJR574r<9-w1gJwVU;dVqlq^#CIq>j5S<)dS3It_N7yQV+1QwH{z& zTRp(e_IiMW5$Z_y0~XYMge0q|_ffOD?xSH%-ABvXx{r=^bss(J>pliH)P0O>toxYQRQEBnx$a|OOWnuH*1C_4 zZFL_z+v`3KMyOw{$o12$?gex#Xd&H0*dn@zsKs;-aZBhPl9tjvq%EU+$XZVKkhg;F zp=c%DL)j|2hpN?d4|Qwk9-7wDJ+!T(d+1tE_t3Y2?qO&n-NV=>x`(OFbPsb|=pL4~ z(mkwgqkGuePWQ04gYMzz*xi5ybr&HE>n^16$H z6?GRSE9)*QR@Gh9tggFgSW|b=vbOG`V_n@v&-%KHfem#RBOB{3CN|Yw%xtc^SlCi` zv9h)9Vq;s~#m@G+i-QsBNOuAj)E$H@tUHKURCf@wxb7ffN!>xp(z=6;WpxKR%j*sb zR@5DotgJhzSXFmWv%2n}VNKmZ%i6kwj&*ehJ?rZZ1~$|kjBKnsnAlWzFtfStU|~z$ z!OGUUgNJl2(l+d!agpPG3^sFyoU_%Kb8%vnjRKm>W5*D_Uu(Gv;jcq0DY%k$pg!YQw}fsZX(`=C+A_M0tmSkYc`N8PidNEXl&zxMs9H_8 zQMZO}qiHSOM%y~Njjr`{8+{w-HikCRZH#TA+nCx+w=uVcZewXH-NxEBx{a;vbQ^m+ z=r)dy-3nMxw-BlQMW)h*;KuUjZsQMXXCvTmVbRoz0( z>bix7HFXOuYwH#|*3~Watgl-b*ig4HvaxPqVpHA1%;vg};=F zI2fUhbTeQ<-9*U3x`~KIbrUg*>n0MG)J>!;t((YLRyUEeyl$dkMcqWn%DRb)Rdo|J ztLr8j*3?b3tgV~qSXVdEv%YR(U_;%+$i}*fiA{AAGn?xs7Piz)tZc2D*w|J#v9rBy z;$Vb2(v5%xbps&_>jokg)eXcft{X^LQa6yYv~D0{S=~U+^16Y76?Fq8E9(X-R@DvE ztgahqSW`F9vbJuZV_n@q&-%K7fem#7BOB`mCN|X#%xtb3SlCiGu(GvoU}Ia|z|Qu% zfrAn1S1WS;bgSzD9Sd4W*Acdet|MwOT}Rv!x{jo!bRB8S=sL2N({<#npzA1FN!L-f zimsz-HC;#D8oG|AwR9bA>*zYV*3)(LZJ_HI+DO+iwu!D|YBOEO+!nfyrLA-wYuo5L zwzkuC?CqfII68JMU_o6&$iljYh(&b`F^lUO5|-38q%5s#$XHg_kh8q5p4*U+=Ru3=z9UBk%6x`v5ObqzC{>lzle)HSSZt!voW zR@bnzy{_S4ggVmIfCY6GAq(p&A{NzE#4N6>NLW%=k+QU|B4b%yMb7fNih>n&6(uX{ zDk@ghRn)Amt7uqLSJASzuA*aIT}99Ox{84fbrmBU>nbKT)m6-FuB%wsQdhCEwXR}g zTV2J@_PUCL5$Z@+0v6O2ge3JO-#6_l*3 zE2vmiS5ULMuApH}T|vv*x`K{%bp<`^>k0-o)D?_utSgwk=Xs)g{C%u1iQ*QkRgjv@RiISzSWT^16hA z6?F+EE9(*}R@EictgcIFSW}nKvbHXvV_jWB&-%KAfem#DBOB`yCN|Y2%xtbpSlCjR zu(Gu-VPjie!p`=(go6?4NEZVZ)J23Wtc!?PR2LDmxGo}LNnJ$B(z=L@Wpxob%j+Tv zR@6n5tgMTuSXCEMv$`&#VNG2`%i6k#j&*erJ?rZt1~$}1jBKonnAlVoF|)ZYVqr^N z#LCvXh>dM^5j)%KA`V8VBV7nsP!|xgur45CQC&dH;<|u@C3OKQOX~tMmemF1EUybF zSWy>Hva&9qVpUy0&FZ>Az?|KL(0-Rhm2)) z4mr!~912#{Ih3rdbEsHV=TNh{&Y@vVokPpoI){#Rbq+o2>l_9))H#f7taF&yROc|W zxz1r>OP#~Y);focZFLSi+v^+-MyMm54OmcT5wft(B4SaUMa<$li-aY07AZ^XEHakW zS>!CQvnW_mXHl}U&Z1&fokh*+I*W!ibrvma>nu9f)mikcud^7~P-ii+vCd**Q=P@k z<~oaoEp-+vTk9+~w$)keY_GF87@>}ICSXCGLCC^7gNQ|S1~H543=)>q8Kf+&Gssw0 zXOOeJ&Y)mLok7XUI)jQ;bp|!7>kJy!)ETs_tuyFYS7*?(zRqA^L!H6M#yW$EO?3t{ zo9he~w$vG{Y^^ic*j8t-v%SvXV1)YBid;Y4>U2QIf)>(gge{`eh+0gi5x0a+BWWp} zM%pqujjZK#8hI<|G>TTzX_T#^)2Lcar%|_tPNQipokrU_I*qRNbQ*md=ro2l(rJus zqSKh#Os6rog-&B>E1kyLHad;1?Q|M@JLoiyj-3ivP^S>GuudUjQJq4};yQ(dC3OlZ zOY0OemencbEU!~2SW%}?va(L0VpW|&&FVUZhBb8xEooQ#cr*j&w3$L7ha%!a9kFMRgJ}i|Zs3mefh4 zEUlBsSXL*Iv%F5CU`3ro$;vv3idA(IHLL3+8rIZFw5+X@=vY@L(X+lzVqim^#K^`v ziHS{h5;L3YBo?;RNvv$Gli1i+C$Y1=PU2vMI?{=N1$6=;3+n_T7S##FEUptsSW+jD zvb0VhV_BU*&hk2ef)#ZFB`fO$Dpu7A)U2)(XjoGx(6Y8ppkrN~K+pO*fq@Nm0wWvi z1SU4s3CwJ+6Ij?%C$O@$PGDnOoxslaI)Q@`>Q^gr{cNj0`t5Ij`^W$0Km7F{|GU5Z zvp@Uu|MsP^={R+wzlr?Yu&EfwI~W@QBlYgl2StviiO-1nW88(3Lz|1iZV$k zY80YkQHaWfP-rPCrM{o%>&H32f1b~4=j@!E^L?D{`u_8Jey;0!y|#JH(z#JAA@<+b z@#C?W;Xn2b9GRXOi)F?CiSPgal^E+Ci)F-OIkB8-u~@R1#lNG>w9K?v%D?}+xX$P= zwNY*O+1cZyj;M~HbLL20f$9p-xof0OpgI9MZ@1JHsjdi}U(MA2=as0g1YOWo>dI7C zhAtc~bt2V?&}Gdc^_wSAodjLpSL$S{lc8f{rLIDC73lQYQm0Uz0-ZOcf~q@}>Qw0b zNm5s(x+-+RLaEcJPJ=ETouGd6bgI*#GqNixU5)B$q3-=sSEssqsJnh8^|NbGT?4wX zr_?p6t_fWSt$AodI3cPwJ*rH-#=wO;JC)8P&}~-J7ItPIYtW+(S~gpt=QgUXxVyo42I8C3Jot zsasLq3c6s7)R|OgLYHP&Rlj*_s#`;69FV#V)om=UoxIkT>bB5MUTa5nJ7_1bwWqp0 zw3F95P~8E#c(Ke(SyX31mu!~0Bh?+Do!pX5bvAUyYMFXEQQZkTdzaKFP<;Y)PO8i; zCsKVPbZ%#DU0x@@LQd)=t+2Aw@f z=CxC(J_R~wqSU8SeJXVBJgHBk`ZVag4N`Zfx;u3744L+NP~8K%WVzI*Q++yg>2|4e zsLp{dOORQyC)GWnv)4&|2GwUk=j@gGOsda>E?g?pUN5S9g}QZK>rHiU=<+!-?e(F$ zPpDhxwX>)`E7Yy?+Syc}9qQgC^IBi3`$A_gl9{O=)%`->eWM(>_>hqz~H%gsLbuP4%*Dj#?0_f}pX(}rYpn5 z9@TlFZrxwIoa)O%-MYVa1=UxCx^;i;N~*7fcKT~0s2&0B^w&mGJrdgKuU$p;RnSg< z?P{v8hIaaEqo^JQ?ey2Kq52wVr@wYB)z?CoWXjZY9o5%Cr|*$^G}WU+-AiPTYYf$6 zLfu=WzMksqp$m>meFN1uK$otTi7TJ#eCRTr*Tzyk7TU>cH&T5gbdJtzH&J~Pw3F9v zrut^+qLngnjiY)TbooS?nQo!_mI`r=oFa0|tyJF%?ev*$qxv>z=ls5%>f526^Lsqi z<3rtgJ~n~s3DC~@eFxQdKs)F6omAfm?VR5esh$Y!oZoj*eHXNIeiu+(0PXZ!?xy-~ z=<*e^TQiC3Nzk#KQctFOGIV;9?3mm`^*zweT<~71?}c{yOjD?y0`2sfrcyl>+Q}{V zQGFk@lUwem`hI99w@jmY8nlyJrc*r~I(@wC);vJ<1JD_BrGAj=2cezZ@(|SzK|6E7 z8C1`JcKS?(R2M=QZIxZBhpB!T+UYYrLiHoiv9&UB&7^uJbnaA{dS+2QE7Yy$f{#-D zD0J~ynVBA=`ms=V7ultHoa)Cz-FhxKo9fx2Zk=16p!x}DC$~IF^^>9Q`7-r9MfFqA zPM>KG)pMYoKGV}wKb;WQPQT?Ds-J;&`Yq2={VcT8Zz-a>2-?YObE%#S?aT$Aqxv~$ zXD;|W)z3qh9+91*7pQ&#+S%ipNA)~tC#TM*dOoz%XIen@0%&J0_#)LWLOXN8g;Xzu zE^aIn*CMJHL6`KF`X#Dgf_8H1%T&J%?c~(OR4;~h^4b!rmq0st?G>tDfp+GC#Z(tV zJ9EKTseTpOnF}tZdMUIs7krKC*Pxxewv6g!p>Dm$^*YtBLpynGIn~QU-MY{82Gwtb zx^0PSdg?94VdsM#%9n*Pj4b^L)oxHY|>a`W)+L@2N zPxbrI&i?raRDS^N?4N%~^@q?-Zdph5I%p@id_?s}&`xgonCg$AoqeYDRIi72a?1v) zH$XeNWh2!ap`HHPCscm|?c|nEss0q&$t|T+mqI(aWfRq#pq53uujf0e zzk_yi%TB6yLOXld-&6g4s9W!0|3LK*p>Dm0{Ug;shPw4$&n~KWRf^Xgi+_pv*iTgd z1nung{7m)F(9RzAFI4{m?c|o-RPTm%a?2j7_dq+jV448`TYmge?U9u_kODPLp$g90jdv#y7l?}C)Iz3 zy7l?}7uA13JLmU7st<;`_4$2>>O-M!eSRON`Y^O}e*aDN-_XuIsv}e%fp*UCqf{S- zcFymAsQxF^t?yACqxu+hOwUV>Q+*sdeW*HtEylFPp!Hs^8Px`@?@?Jqbp);Va;*Z@ z6++!|FV_;NPN*FJ+4}RhRiwHiw4Rq(C8{ey>v@S)rn)k;-fyu)suQ90yu^~IPJ-6+ z5=*8!8CuUvtP0gtp!NA}DO9IG>+{=EsZNE~_o%EY)m5SOev741od#W4s_s!)I@RgW zMF*v>Ms+o4z29Qhsjd#K_gkz6)it2?+`wv5T{F}z?|)k@s%wS1<^6A~O?7Q(eXqvq zP+cd~E$@F@U8?Jby5+uu)uXx|ba6~=ELeT2>qG0$-`0TY2BB`b?_dq7ZW!v8`wrHK z>PDe%x$j_&scsCdKYv>js+&OT&)=3obq2Kl{B2FCZVIhGe_J!En?dW(-`1S!=Foa> zU@fR_0j=i-){^R$(E2`+wW7Kew3Ayhsm_Gf_rI+*)vck+2B{qrYeRJ#Xnmi^+EU#% zF|Oln2hn%1c2u{6c5+L5s@p?5xupZu9ia8xz_O^$g4S~b>qvFSP`A7XZP`?3hr0Fo z-HGZ>(0bp&PN4b(Xx(?P6RAECTJNV?XR13x>$$&mp}GrnzPwjsCsBP8bb-8AV<%I6 zGPLeHSXZjMLhJj$){W|J(0V`BPNDh~XeYOvO7*FsZrOLR)2Kcz)GhlC)}89^p>BB} z*m_Xi1KPq&J_=zMvv#?GMn3}}6?#?GYrOlT*!^rE^K zwBC2H-cAFBI6>wO11i|VtW^}QN9o9eTnoqkJSs{2AaxuqY~{h*!Pat_t! zKw14+(YazQa(ehlaX!-{CTMKLt@?NZspn3$fbAFGcdL*=S zeqTlPRnX4)eKplrLp$g9D5^(6JLmT`R9^$_oZr_{eJ!+eeqTrRbRcpXy^0yc&f)k zJLmTVswY6}`v!Ig)ptPacP;Ers_%q$<^~g~o(S!n-*-`cSEyUwH?RV#3!t6z`);c5 zhIY>HNmNgQcFym~R8NN1@5b6aRNn)w_Z{qBs_%t%&hIHyPl49^4mOqQsnE{8!+liW z2kp#D?x*^GXlLJH8r9RFoq5T0s;5IcbAtz{ejwB>_Z96ysvm@Q<^~T@{ZN&-cJ>`+ zP(1@$-w(Aystcj@eFJ-#>W877&)<(w{Ya==zMpC{sh$a~?;F@Gs%Jqvx#dx+ABA>u z%VShO2JOrZ9;fu3(!tpn@9CLXeY1Dr+PlLlh+ndy#U(jx4cO8i_rR=e_KfPLTD$iEuwl6wBAp( zm#BUT+R1A#Q~h$NTfRePi>Y1=?c}v3R4)m2%Xi4^6{=qeb<6vqR!ntqs9Wzlyh`<} z&`xeyO7+r|xQ@lYvi|+XzyJICzxPw^HL72O*7q!I8P&_6oqo&fRKE`G^jnrwy&PKK zv#>X)egoQ>m%K^!o6t^PdyDF~pq)LB6;!W)*6&)_N~%{vJAJ0NseT*U*-w3k>UW@> zoVtqYRnX3yXf@TVp`AHV3DqUg&VK5Gsw0?)oHd4J2THmX&PpJL`+SzaUlBlI^(JU%zvVNk zKZADmazCf~b7-f}w3+J7p>Fy2iEIniTSDFP?-SVTjT(yta+%ZP5B&tZk=yJG67JW(U4jJ=NbsJLmTgRQ~|&oZmlE{UfwXz@2*>S3mSB?K{om-+9(@_js=a$H*HfWt&qKN7U zTJQBl6{xNNt@}(-0@Vr7y3Z6 z)#=cBE*Mp#x*D|JM~`_e^)VTKy?FX-Dip#Qr!?*_nD$b zR5yaw@2^FTscsCd`%F<2s+&OTK2wxIbq2KFXNsCq-4t5i|Bjkb-3(gqVMooWZVs*Q ze@88-ZUL?De@88;ZV9d5jg4AS-3nU28yjU(otYNbPF`zGb!%un7mV6a-3D6E1*5i9 pw}p1{T05%SK|6V^J=N`@oxIk8>JHF)E*ND|odxaWwT@JG{2x>?7}Nj& literal 0 HcmV?d00001 diff --git a/examples/example_directional_override.txt b/examples/example_directional_override.txt new file mode 100644 index 0000000..965e828 --- /dev/null +++ b/examples/example_directional_override.txt @@ -0,0 +1,9 @@ +T‭‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‮‬‭‬‮‬‮‬‭‬‭‬‭‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‮‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‭‬‮‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‮‬‮‬‮‬‮‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‮‬‭‬‮‬‭‬‮‬‮‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‮‬‭‬‭‬‮‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‮‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‭‬‭‬‮‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‭‬‮‬‭‬‭‬‮‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‮‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‮‬‮‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‭‬‮‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‮‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‭‬‭‬‮‬‭‬‮‬‭‬‮‬‭‬‮‬‮‬‭‬‭‬‭‬‮‬he study of ancient writing systems reveals fascinating patterns +in how civilizations encoded and transmitted information. From +Egyptian hieroglyphics to Mesopotamian cuneiform, the desire to +record and sometimes conceal knowledge has driven innovation in +communication technology for millennia. + +Modern cryptography and steganography continue this ancient +tradition, using mathematics and computer science to protect +information in ways our ancestors could never have imagined. \ No newline at end of file diff --git a/examples/example_dns_tunnel.pcap b/examples/example_dns_tunnel.pcap index 1d02f3989c3dbfb3064c24b44ce24b616d9d20ae..631bf32b86fa2f69bf2993576cc98023ff0d6ca0 100644 GIT binary patch delta 20 acmdnbw4Z5$1hW;_sfp6ln5}`-mTmw?BnMys delta 20 bcmdnbw4Z5$1oNX;CnrizV}1;zwsZpkVr>d; diff --git a/examples/example_dns_txt.pcap b/examples/example_dns_txt.pcap new file mode 100644 index 0000000000000000000000000000000000000000..1c52f2e7462163642bc7e8d6d0f5bd9f492193dc GIT binary patch literal 239 zcmca|c+)~A1{MYw`2U}Qff2~D;yRTH5<3pXAT|teFt{=>>zz1A_nqBMxDp%{mORF(&zi z UJXk-opa7@_t6rbX%pzA?0BW5)?EnA( literal 0 HcmV?d00001 diff --git a/examples/example_echo_hiding.wav b/examples/example_echo_hiding.wav new file mode 100644 index 0000000000000000000000000000000000000000..73201d71e8411c1cc4d7bcb85e3c8c2b1d173e50 GIT binary patch literal 132344 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 literal 0 HcmV?d00001 diff --git a/examples/example_hangul_filler.txt b/examples/example_hangul_filler.txt new file mode 100644 index 0000000..24db717 --- /dev/null +++ b/examples/example_hangul_filler.txt @@ -0,0 +1,23 @@ +Korean Language Reference Guide +================================ + +Hangul, the Korean writing system, was createdㅤin 1443 by +King Sejongㅤthe Great. Itㅤisㅤconsideredㅤone of the most +scientificㅤwriting systemsㅤever devised. + +The system usesㅤ14 basicㅤconsonants andㅤ10 basicㅤvowels, +whichㅤcombine into syllabic blocks. Eachㅤblockㅤrepresents +oneㅤsyllable of Korean. + +Consonants: gㅤn dㅤr m b s j ch k tㅤp h +Vowels:ㅤa ya eo yeoㅤo yo u yuㅤeu i + +ModernㅤKoreanㅤuses Hangulㅤalmostㅤexclusively,ㅤthoughㅤsome +Chinese characters (Hanja) stillㅤappear inㅤformal contexts. + +The Unicode block for Hangul is oneㅤof theㅤlargest, +spanning from U+AC00 toㅤU+D7A3 withㅤ11,172ㅤprecomposed +syllableㅤcharacters. + +Fun fact: October 9thㅤis HangulㅤDay in SouthㅤKorea, +celebratingㅤtheㅤcreation of thisㅤremarkable alphabet. \ No newline at end of file diff --git a/examples/example_hidden.gz b/examples/example_hidden.gz index f1645243899620ecc7fd8f924597dcca626dff9b..1fe38a2b42af04c3e22538b1f067c089e6cba7f7 100644 GIT binary patch delta 16 XcmZo-ZenJa@8%G(C=#9&}(Y-nW0pkOdrkTGR5BWn*cl8mu|FCM delta 53 xcmdnXx|fwFz?+#xgn@y9gW + +Event Handler Steganography + +

ST3GG Event Handler Example

+

+This page contains hidden data in event handler attributes. +

+
+⊰•-•✧•-•-⦑/L\O/V\E/\P/L\I/N\Y/⦒-•-•✧•-•⊱ +
+ +
+ + +
+ + \ No newline at end of file diff --git a/examples/example_http_headers.pcap b/examples/example_http_headers.pcap index ef5e6c2e2adc1c91bbfd33dcc4d3a758b0cbbbf0..dd52482005108f6c865038268496485fde396fee 100644 GIT binary patch delta 14 VcmX@XdV+O=1hW;_sg2TWnE)l51kV5f delta 14 WcmX@XdV+O=1oNX;CpSv3WdZ;%ZU$BW diff --git a/examples/example_icmp_steg.pcap b/examples/example_icmp_steg.pcap index 7a9f5834dd7f404a2e94edbbaf192472d2e1836f..395db15c2518fc11e7981e0f7756ae805ed74917 100644 GIT binary patch delta 33 icmaFI^p0tQ1hW;_sfqs;CR+P5M?qL?{h6yktb73C$POa_ delta 33 kcmaFI^p0tQ1oNX;Cnx?_m}u?K%=8+}TICGAafeB*bJ8k%)?jh=_<5uHDtzjkC~g^$P7; z`vl*M=m@#I=YQdYnSmeYerGX@-=As8%C?#1(rl}E*{}TFuD|X6pY`)*wykMa3**@0 zs#&D~#VIZJEVUi8MllDdzk;t1QIB$8$EfQfyMbC|AE6EtfAeG1bFujeYPI8>mqgI>0pjNHD RqE^{&s8wt4sK?)aYb$}C;h+Ej literal 0 HcmV?d00001 diff --git a/examples/example_jpeg_app.jpg b/examples/example_jpeg_app.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc8bca5442af8bf1b8ce52df385e1c986e5faa09 GIT binary patch literal 2084 zcmbVMYfO_@82);{Xa)t!CX-7G4lEd;fRjc*S_-8$T-t&t7*iNistJOCNJOWjD|EWG zC{7HR&_SUf8EjrQVwOn}<`$=1hnUS#R4iuBN>L$w zWy-{IsVpoiZ<`{tVE=xI`Ny@gf`VdkjPn=FRhpQbh!F@FMt~pYyo-r2A^|<9C8CE+ zLM??%CXuNWDiwce3_6v@pi!yxRdfauJ@B=96>~M}piP#S5-B7Sg-N5*@R0x1IKRPI zbgUdJClR<9kwqY}2+lst7jRN=cmQ_!ArMJq3Y7*hRzbieSAb6<0cZ*!hUiL|$H**- z8z(%T>YlEmaf>|o#|%w$e_{7EwtVnuKtyiwaR$@#^*7ddt$QmlXgx17YUA6Rq6MM^ zabl7rS*lQGWNypaz9a9Q{C9WnDNr9MDJ?r#eyHO8D$NJl>Ka|`snd05J~>-|&iH9_ zi>bBE-2V9&7cX7D^5s`Oy_UY~{R7|L_-<%;WOVGu@jDZf)~Wjs9!@{9&DfvKI_93g zcsaj-co8ttGA(HTkrxYi5m60jh!=r)5MC0COyPu6-Qv?}sv>tT{}|mvXlUxb#_*4j zKV|0@4>COiA}80`5jC9Izaw`1e=+-$*k8ORu+=026pzHh;;_3}l>+65E^X#BJ{3x{ zOY77wO~TS~jnJbi&ma#;@Hr}I|lx)w@0ttGupOw0LEuJEW=y$S~PCo=5_~Zg%sj zfDQc9szft9v38<$8HzUqrnhZ@K;DF9K0SNG$*~SQ~OP>h=db+ z4CtHEG%AO&GbGliyR&a!``TQ~EomLcv8c|knl{KU#2UYj4SZ;5+hQmin1pU455_^x z+2M15isyP^Gk{|08qo@|cIZmYFtdv5n=TKC`(0hHa+u{l0;I7*?(u3_J;zrg<;=0K zrc^8aB&neMEJ%EGVU*W<0Il}|oUPIdVO)P})*;(X2~4kyJ`iVTRR(pQ84#MA`a=MU zSUZB$;3=UPpM6|2-@sFE(Jy5L!SD?j&d?6G6uKMPbWdNkK{dw~SO%m9)nW%Oao18Q zNZW79suWA~PHYZF(@}LxagBR{LUUXrzFN+*$wM}mSWO5l1Rx)Qn4T3&rCeO-TA!Do z!BW(qyNOND^i2nt<+khW_VJ&Tx2MRl#%9D$08VO_B()qqoO;tAG>=A`IvxUZ-f6t- zt}A7?*c3=S1Q-geyba|+Dgx1IdBD!@?7kU|kgffwLD@kckb=aI^g2D#v=pqB=o~ybwOrf}mUk-;BVvkHtH{2*LT?J#9tc?`X4|yG;RJTGj(M zXw~`^9c5h&4&12OeKw7dTy^xMv}-AYF9Nfu94jXaKLj8sIBwVuWBpBZsD#;NT7l$i z$x1|4$V)rMy=FsBQfI(y2mJ}MycxjXV{=i_C8<+#a3k)dU>EOA#?F91yYX`No9#Vo zb43GSPM|q;3ug}33c5_d@V~(kaxCsO z!YNP-^(TshItpC8gE}+&XTY5P-XMY#>lCx?_PC8F>iv)qjKw`bYmmW5)qtC2Ob39% zPIYrZMYI>19cJ(|P;qPMi$SQnhL21RDg_yPxF!9vI!@e4ls~A`2t5PzJkqoMo07+! Gcm4og@^a1q literal 0 HcmV?d00001 diff --git a/examples/example_jpeg_restart.jpg b/examples/example_jpeg_restart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58035b637b86dd19e688aacceb994f1bb390aa22 GIT binary patch literal 1436 zcmex=>!Z_5ETZ z^&c&p1X75q_)*u!{|^`hyxct97#JBD7#M+&;s0$0X9i{_CJ+Jw79e8fU}a@tVdY|H zXXD`E;^E=u;^yY%6B6L%6XfIO77!B<6c!N`73JXg_%)_fk}{&S&;Gn5e9jnJ6RdQfB^~^nSgF&W9Q)H;sz?% zD!{d!VGdXP<1U(o`FS>RY=j$kxe)-kzJ`!#HexNLJno8jR!@8E`CrkPAY2R z|V^&07y2J$~}^+4C1KUw!=a`ODXD-+%o41@ado12e>1Koa6HG=B*K{l&z>!py=B z@)sjhIS?}oval)|vI#i`vL_Y_D;YI%h&WALxbYyTvT@J{(WIh_Tw*FF4^=;cyax6e zaUN?T%V%(pA^dfVfrpt97TA`+=%gn}bvfUJPrgyAo17*XFs|#*l9Ltze7Z71?XFoN%eTs&xEquuiGc@kmSA z2{SqR=572P@>u0#q6_Ao&iTv)$!mp zA;91VhbzP_z+m6I8WQf{wDk%Y_CTj98ZpX>X1Ke$8(uzF?C9#TN@LMpvASp`heb<5 zMFJy@w=o~;ni!JSrEON`FhS!eNPcsAj;E-rZAhSN%DEdtT0rSSSJBzl3HBLZ7IkUy IP5yrq0C~MrX8-^I literal 0 HcmV?d00001 diff --git a/examples/example_math_alphanumeric.txt b/examples/example_math_alphanumeric.txt new file mode 100644 index 0000000..6f1f373 --- /dev/null +++ b/examples/example_math_alphanumeric.txt @@ -0,0 +1 @@ +Steganogr𝐚phy 𝐡as 𝐞𝐯𝐨lve𝐝 s𝐢gni𝐟i𝐜a𝐧t𝐥𝐲 sinc𝐞 𝐢𝐭s or𝐢g𝐢ns in anc𝐢e𝐧t Gr𝐞ece 𝐰h𝐞𝐫e 𝐇𝐞𝐫𝐨dot𝐮s 𝐝escribe𝐝 m𝐞ssa𝐠e𝐬 𝐡𝐢dde𝐧 u𝐧de𝐫 𝐰𝐚x t𝐚b𝐥et𝐬. 𝐓𝐨𝐝𝐚𝐲 dig𝐢t𝐚l stegan𝐨g𝐫aph𝐲 ope𝐫a𝐭𝐞s 𝐚𝐜𝐫𝐨ss m𝐮l𝐭iple dom𝐚i𝐧s in𝐜lud𝐢n𝐠 𝐢m𝐚𝐠𝐞𝐬 aud𝐢o 𝐝o𝐜um𝐞𝐧t𝐬 ne𝐭wor𝐤 pr𝐨t𝐨𝐜𝐨𝐥s 𝐚nd 𝐞𝐯en p𝐥a𝐢𝐧 𝐭ext. 𝐓he 𝐟𝐮𝐧𝐝am𝐞n𝐭𝐚𝐥 𝐩r𝐢n𝐜i𝐩𝐥e r𝐞m𝐚𝐢𝐧s th𝐞 sam𝐞: c𝐨nc𝐞a𝐥 𝐭𝐡𝐞 v𝐞r𝐲 𝐞𝐱ist𝐞n𝐜e of a se𝐜r𝐞𝐭 𝐦𝐞s𝐬ag𝐞 𝐰ith𝐢n 𝐚𝐧 𝐢nno𝐜uo𝐮s c𝐚rr𝐢e𝐫. 𝐌𝐨𝐝e𝐫n t𝐨𝐨𝐥s c𝐚n 𝐞𝐦𝐛ed d𝐚t𝐚 𝐢n t𝐡e l𝐞a𝐬𝐭 𝐬𝐢𝐠𝐧𝐢fic𝐚n𝐭 b𝐢ts 𝐨𝐟 p𝐢xe𝐥s, i𝐧 the 𝐟r𝐞𝐪u𝐞𝐧𝐜𝐲 dom𝐚i𝐧 of audio 𝐬i𝐠nal𝐬, in t𝐡e 𝐦𝐞t𝐚𝐝𝐚𝐭a of 𝐝o𝐜uments, o𝐫 i𝐧 the 𝐢n𝐯𝐢𝐬ibl𝐞 c𝐡ar𝐚𝐜𝐭er𝐬 o𝐟 Un𝐢𝐜𝐨𝐝𝐞 𝐭ext. 𝐃e𝐭ection r𝐞q𝐮ire𝐬 sta𝐭i𝐬𝐭i𝐜𝐚𝐥 𝐚nal𝐲s𝐢s and pat𝐭e𝐫n re𝐜o𝐠𝐧𝐢tio𝐧, m𝐚kin𝐠 i𝐭 a𝐧 o𝐧𝐠oin𝐠 arms race between those who hide and those who seek. \ No newline at end of file diff --git a/examples/example_misspelling.txt b/examples/example_misspelling.txt new file mode 100644 index 0000000..2a23b16 --- /dev/null +++ b/examples/example_misspelling.txt @@ -0,0 +1,44 @@ +Common English Words - Spelling Practice + +1. the +2. receive +3. their +4. separate +5. occurred +6. definitely +7. necessary +8. which +9. because +10. apparantly +11. believe +12. foreign +13. government +14. beatiful +15. beginning +16. business +17. calender +18. catagory +19. commitee +20. development +21. environment +22. experience +23. immediatly +24. knowledge +25. maintainance +26. millennium +27. occasionally +28. occurrence +29. particuler +30. possession +31. priviledge +32. professional +33. recomend +34. reference +35. relevent +36. restaraunt +37. successful +38. tomorrow +39. until +40. weird + +Total words: 40 diff --git a/examples/example_morse.txt b/examples/example_morse.txt new file mode 100644 index 0000000..5c3be1c --- /dev/null +++ b/examples/example_morse.txt @@ -0,0 +1,40 @@ +Morse Code Reference & Practice + +Standard Morse alphabet: + A: .- + B: -... + C: -.-. + D: -.. + E: . + F: ..-. + G: --. + H: .... + I: .. + J: .--- + K: -.- + L: .-.. + M: -- + N: -. + O: --- + P: .--. + Q: --.- + R: .-. + S: ... + T: - + U: ..- + V: ...- + W: .-- + X: -..- + Y: -.-- + Z: --.. + +Encoded message (ASCII portion): + -..-. .-.. .-..-. --- -..-. ...- .-..-. . -..-. .-..-. .--. -..-. .-.. .-..-. .. -..-. -. .-..-. -.-- -..-. + +Encoded message (full hex): + . ..--- ---.. .- -... ----- . ..--- ---.. ----- .- ..--- ..--- -.. . ..--- ---.. ----- .- ..--- . ..--- ----. -.-. .- --... . ..--- ---.. ----- .- ..--- ..--- -.. . ..--- ---.. ----- .- ..--- ..--- -.. . ..--- .- -.... ----. .---- ..--- ..-. ....- -.-. ..... -.-. ....- ..-. ..--- ..-. ..... -.... ..... -.-. ....- ..... ..--- ..-. ..... -.-. ..... ----- ..--- ..-. ....- -.-. ..... -.-. ....- ----. ..--- ..-. ....- . ..... -.-. ..... ----. ..--- ..-. . ..--- .- -.... ----. ..--- ..--- -.. . ..--- ---.. ----- .- ..--- ..--- -.. . ..--- ---.. ----- .- ..--- . ..--- ----. -.-. .- --... . ..--- ---.. ----- .- ..--- ..--- -.. . ..--- ---.. ----- .- ..--- . ..--- ---.. .- -... .---- + +Decode key: Each letter separated by space, words by / + . = dit (short), - = dah (long) + +Generated by ST3GG. diff --git a/examples/example_multibase.txt b/examples/example_multibase.txt new file mode 100644 index 0000000..e38248f --- /dev/null +++ b/examples/example_multibase.txt @@ -0,0 +1,22 @@ +Multi-Base Encoding Reference +============================= + +This file demonstrates the same data encoded in multiple bases. +Can you decode them all? + +Base16 (Hex): +E28AB0E280A22DE280A2E29CA7E280A22DE280A22DE2A6912F4C5C4F2F565C452F5C502F4C5C492F4E5C592FE2A6922DE280A22DE280A2E29CA7E280A22DE280A2E28AB1 + +Base32: +4KFLBYUAUIW6FAFC4KOKPYUAUIW6FAFCFXRKNEJPJROE6L2WLRCS6XCQF5GFYSJPJZOFSL7CU2JC3YUAUIW6FAFC4KOKPYUAUIW6FAFC4KFLC=== + +Base64: +4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE= + +Base85 (Ascii85): +;)<~1fTAtpfTH4@r{aL3E#iQpE#jt;FHBrdFIHSdFI-SBOk7DXPFz_p;--=<;(($p;((&!oTuV|qAlWpqT-6N + +Raw UTF-8 bytes (68 bytes): +e2 8a b0 e2 80 a2 2d e2 80 a2 e2 9c a7 e2 80 a2 2d e2 80 a2 2d e2 a6 91 2f 4c 5c 4f 2f 56 5c 45 2f 5c 50 2f 4c 5c 49 2f 4e 5c 59 2f e2 a6 92 2d e2 80 a2 2d e2 80 a2 e2 9c a7 e2 80 a2 2d e2 80 a2 e2 8a b1 + +Generated by ST3GG. diff --git a/examples/example_nested.zip b/examples/example_nested.zip new file mode 100644 index 0000000000000000000000000000000000000000..dc51011dae1b5910ef9fc05537fbd7efb85b68e6 GIT binary patch literal 642 zcmWIWW@Zs#U|`^2Sg&0d^JryMs~(W21H}A5oRV0Qs9%(tn39{SS5i^(SxZ+h&?Dr; zY5h~aX97KRyw07_@xB`T;k5qA6KA}`HBN?W`1yvO@X+CM%Zu>YZoM-LW*|5XHbf?Bvm-R~) zE%|loT6<&r)FjbYK9_Wt>-?QtczJ2rK9|4ud4(RNM{4I|gIr`5`TpxzmU-QEtLK?rkpvueZ7L zc9%5%xH#u&z_fRZQ-#0QCjI$(I4S09GE;+(f9?Jm9)I0WtG!IpsJpUN5G^<=wyNJ( z1O|gV5W|BbFTW(U7!=UO=RADRg`GHa+FSS1>Qg!a9;fw#PMp>E3ia^R@w@^KTSg`k zX50}6G!+aQfT4{MjRD@Mn$e>MqLqQ6fiW7U86HvSdeQxX(3=Ic8k~OMz6$VWWdq4G M1L0O6y&dd00CN@ERsaA1 literal 0 HcmV?d00001 diff --git a/examples/example_normalization.txt b/examples/example_normalization.txt new file mode 100644 index 0000000..ea6c92a --- /dev/null +++ b/examples/example_normalization.txt @@ -0,0 +1,36 @@ +Unicode Normalization Reference +Words borrowed from French often retain accent marks. +In Unicode, these can be stored as NFC or NFD forms: + + café + résumé + naïve + cliché + passé + sauté + touché + fiancée + exposé + pureé + meleé + debris + protegé + attaché + communiqué + risqué + soireé + flambé + canapé + matinée + entrée + negligeé + emigré + divorceé + employeé + frappeé + consommé + coupé + cremé + decor + +Total words: 30 diff --git a/examples/example_pdf_forms.pdf b/examples/example_pdf_forms.pdf new file mode 100644 index 0000000..d18cc66 --- /dev/null +++ b/examples/example_pdf_forms.pdf @@ -0,0 +1,34 @@ +%PDF-1.4 +% +1 0 obj +<< /Type /Catalog /Pages 2 0 R /AcroForm << /Fields [5 0 R 6 0 R] >> >> +endobj +2 0 obj +<< /Type /Pages /Kids [3 0 R] /Count 1 >> +endobj +3 0 obj +<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Annots [5 0 R 6 0 R] >> +endobj +4 0 obj +<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >> +endobj +5 0 obj +<< /Type /Annot /Subtype /Widget /FT /Tx /T (steg_field) /V (⊰•-•✧•-•-⦑/L\O/V\E/\P/L\I/N\Y/⦒-•-•✧•-•⊱) /Rect [0 0 0 0] /F 6 >> +endobj +6 0 obj +<< /Type /Annot /Subtype /Widget /FT /Tx /T (steg_b64) /V (4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE=) /Rect [0 0 0 0] /F 6 >> +endobj +xref +0 7 +0000000000 65535 f +0000000015 00000 n +0000000102 00000 n +0000000159 00000 n +0000000252 00000 n +0000000322 00000 n +0000000492 00000 n +trailer +<< /Size 7 /Root 1 0 R >> +startxref +684 +%%EOF diff --git a/examples/example_pdf_incremental.pdf b/examples/example_pdf_incremental.pdf new file mode 100644 index 0000000..58c3829 --- /dev/null +++ b/examples/example_pdf_incremental.pdf @@ -0,0 +1,32 @@ +%PDF-1.4 +1 0 obj +<< /Type /Catalog /Pages 2 0 R >> +endobj +2 0 obj +<< /Type /Pages /Kids [3 0 R] /Count 1 >> +endobj +3 0 obj +<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] >> +endobj +xref +0 4 +0000000000 65535 f +0000000009 00000 n +0000000062 00000 n +0000000115 00000 n +trailer +<< /Size 4 /Root 1 0 R >> +startxref +186 +%%EOF +4 0 obj +<< /Type /Annot /Subtype /Text /Contents (⊰•-•✧•-•-⦑/L\O/V\E/\P/L\I/N\Y/⦒-•-•✧•-•⊱) /Rect [0 0 0 0] /F 2 >> +endobj +xref +4 1 +0000000329 00000 n +trailer +<< /Size 5 /Root 1 0 R /Prev 186 >> +startxref +480 +%%EOF diff --git a/examples/example_pdf_javascript.pdf b/examples/example_pdf_javascript.pdf new file mode 100644 index 0000000..454ac6a --- /dev/null +++ b/examples/example_pdf_javascript.pdf @@ -0,0 +1,26 @@ +%PDF-1.4 +% +1 0 obj +<< /Type /Catalog /Pages 2 0 R /OpenAction 4 0 R >> +endobj +2 0 obj +<< /Type /Pages /Kids [3 0 R] /Count 1 >> +endobj +3 0 obj +<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] >> +endobj +4 0 obj +<< /Type /Action /S /JavaScript /JS (var s=atob("4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE=");app.alert("ST3GG: "+s);) >> +endobj +xref +0 5 +0000000000 65535 f +0000000015 00000 n +0000000082 00000 n +0000000139 00000 n +0000000210 00000 n +trailer +<< /Size 5 /Root 1 0 R >> +startxref +397 +%%EOF diff --git a/examples/example_phase_coding.wav b/examples/example_phase_coding.wav new file mode 100644 index 0000000000000000000000000000000000000000..0305a8583beb468b8aea843f0fdd614d441b017e GIT binary patch literal 204844 zcmW(+bCeue-)`GhsV5V2qmAv2ZBC4h?Kif~O*Xc%vF*tu(_K~FU2WU_)%nhx`ESnD zxmEW*zel%Mr}phDz;sIgR{h$IoiYoSP$(2C`D5%yp|m|uq0lH2%9xR}MpDSXv2crp zDFGpDD0B-qivAYA7E(oK;b;C3ZbfcSc7Ns*x{sQr^v}Of>(e!oOA=S2LnFt-=K>dl z69TXO_Q1Zt*+7HfKOuMcR&;edp1hL0nkmgc&X1-IW&rFX90`91uS~c_a$bB&dPiDI zW|Q8Ru9T^zJ0zckfbc!<0sA+L%aqWT6(;9~rG@Eq{BiVi$QM`^oacY%t?GT`+2r}| zF?n12j|RE~6k&1XNE}TqPkqgX3kRr&m}%Bh?nl8%(Jm=V_EM%-yik~x<;pk8kBYH! zNd8@_7FQRx;CJFwWj?1VDE)K)%j`)Ui|N8QgB|^HFYKw~?(I75tmvBH(z!NyxZcTr zc|a2S7HHPGv48UPsS`bN+w4QP*L|J$rv5Nz^2c+B(}?+S@vU?ouxj92)|n zfkZ65JAaq>uB43`yJ;_Pa}UO*gV!Gxi-_h zz-P4P1b7|9&E-o~ch#G_w4jKei00$VfhK$ChGE2)OPJWhy(7#b)nK~&X zRu)3MLQmG7w+**e!+WFM(Z%MD=ri+pd?|j_Hrk=|NCGV)72_vTEAlM*AodvE5z#)m zPTfg++^`Y|z}<}*;|yaD<7#9bJO$(fx3zCnL*;YDefbjhb6Wpg?KBvTg{JuWxGNGZ z$Q3*^=S;@(`sL@!wdG}|acD)$KwHSs#NEQTCtRFdlFk>3SyA>b;bfUo)lJ{RFbDD> zdn&{#+$#1I%Zke?v@~vqTZ2t>S5-}A89{e`WmdM(Ec-ORDr65_a_zQVvhFmWFg^X< z=9lTm>7UEW>ijPGebCIrBi3v7&z?Gg;gP|qY5B{vrR?p3T~d>>T$cp~LZwDsMPtP} zRhm{-Rz6k9TKu4BFkBH-=?AIeGN!l(XBeH6vn3Bjy7*VQHanK%yG%cRMSdxM-u&L` zNBaBN(n~*g{~Bysh>C1cd&YA-cr{in)0v`S&E;*9j8|6Etpfzcrxk>ipH$gX?PoP@ zHCnY;6-(s{#e0xy;6Ck6WkkA(KZ#XD5oG1j-a(%CoqdtTZrb|$OKHC!H@+VJ^50kI z7vkHQ()iE8<-5#>tp7N#_Xa~5jM5Xd)nr46z(N_Q~FRYrYajZJ0=IiQ> zYCNhrq1M70cdG5G=C1U(Xevb0dli?Z54c?!6Z66Nzv129cFykB?&ddTdw&#vpYYB9 zCHSe=mnPpFKYo>7`AtX9TWh$t`F2L|zy{{Q```y~6Q~7R8&+x?s(#D& zO6LgU+$~HU&6iWB@5V+)Hiky~26`5{j1JWH!S>$PoLFP~ZaYg1b+X*Gy@YRV=yr5K zQkz!f4OA^-KKlljEh-hClZ6$f%1x>}YJqm2dW@#J+NC_HoT0cSONiSE_wf0gZ;Uzg z?vxd|bLl#%>hUL$9$_T##Xrfn%jNCh0GEF5V zl)sXTWZR^2@wM@VQDNj*Xiac%aFxGVps{~OAQ|{8xF}Q{S{L3QITkySsF`e*VdcB# zC57v>HH^!w7VIFm8-JGYPvL#>pAxlnu56DKlnj%dmzX5~ii<>pgsb?|cyBoanHg#& zYMuO;j5N(lZjNE$%OO^f@TYysNvzsvAo58X$}cG9D^@G58j8A`I-%aD9IUFND3%TrpA=OPyx?+}kEkChs%(?g zmiVoRAvoAy%WHBRbh_+-T}iaIRkQUYuG`1C(ysg7!2uvVB~~X{CHps}GNTv!3h#vQ zk~FC3pz5mKW+(xCKustBE{4W{7Ys{vZ?*50G#OhmkKdHjlTnq@DpMA39(m-i?tSOj zZxdR#VSbci{;%9w&Nda9c&ObvfcV>Ga~B1wMJ35z+2hnBOpLc)yjea@eNop6Xo~<9 z%8Q2-A1QVeZ>iXzNNhX_4c5msa%CIIBEb^2jq)TrJ+VCO@HKahA&mGL)1u$XvZAua zKbDpb`gy19?_YoZ?utFM?6i;Yj0rlUQ`6Nb?U>8?J0*vegLD9thT|1lS3Xz8R<(b% z8r8w7uPg7WbgqIJAtc=e9oRo;+1&jkH>wG$+^rm5%MR?P87yB~?klsGP5M>E)XH25 zt8INn#GJQ$b;B)V=TkCDn(>aaS`?R`P%5?O3|Vj)@~+5G;e7>N@gGH1ijKi2fT6mx zniq-#(ip!E=L~&Cu0#4;G#`X~mE9Ji*tQOY*!S>*E*a9ttdI36MoBp6St6U}TBK}L1=hkI@ zp)&HVQWxV*BBFrR+r~ZCVX=j+IZIc|3VgX`x;1SbNz8FRcHQ#U^EU~PNi0m&%N?fF zV|dvo_({P~$!)n*RaxCt+ePowb}<~+S2JL`n)<%#=Sq_zE1fP%^LgCr3=j2Uepse= z@}KDc!ovdxy+2%K_ELMyHrO`7*2Q|#+RkPoRy#krDBk`4wV_m0oJ^!I=66!sGrw`z zLPE4oI#W4ceN>y)y)@JZrWh82XMj>YTfap+OwCk$mEIA(=ACEFroAj|&6Fe#MOuZ1 z`g*z#Il2<{Y*}1`Z^9d3v#}61#In;i*nZG?#JfMxE*ehM&)z9aWYp$#5HytDQA|+H z)b|9Jfy>~}@O$F}WWDhrvH*GneA99?e8nX(RbXI$p-n2#)79fmL%7G}-b^gA-oxEDWH>QRQ*U|qyvloe+y zs48lTI~7ec?t~(Sp1OysDbgXLt{fTbL_U=o68k&!z}wIL-4?Qp#-El~FW>R|_peF6 z8k+!9C-fcuk1gpK=&cgG8+n=RTKJRB<6IQ5#XA)j)DLu9!AHF~fa>vEw$=8J z&M&@R!Q$wfgd;<4Li&7mLU2HIL2^`aQe92^$dCiP&`EGMxDT`#w(67Gud1K&tI~2& zRY50qp7DvgH>*i!Vq3#OKhtM&^>HxlAzMw`LCZ1AI_nPWGa_j3=X&k-`Dz7JkuA}A zscE_1g`V^X`#f)wu#IGvY^m~-s;#zxuC^Wm_8NNWMD2tN3Nx2gvLR~KsOi##_Q{A|EC_USS@QITEpwdenBlNWYUdd z7ejyet=>VzY|8-4K`dbQo10)7%#AT@QNraI=sD-#6nYp{r^R^}wHb@e`%h?+-XnQk zM_p9E9h?LIgIt0Ms2@}YPB)Zm$7;7Jcyd5o&O62GLEDkFr&h$OM>K&>?xZtIxUJLi ze%O8#LRX<5@V0SG1X=M=`Bhb!Zj{~wTA={MK}@g=VS@jFZT0)K!&O>YNOYXn zn=_9wv#=z6DN#MD3~cr;b^W$$iAVTTd=$1Db)t1JH@XVHX6@^k;@;ue61)+)k)UVK zQe=#F9KK+=xJd3)9#l^^8~~WmDfkcgAlwJ3L7wtK290);QXsD#e^e9>lYlb~Wui;W_UB?F3XHU6*exy!fS>{C{NQ<%40==Y2 z4k`C)A;S@n2h~TqA=gPnX$4n=9_dV4x2lGGfaJHJguR$lKGK{$xjlL_Sl@4U9kzF} zt;HW;qs>xuH`))|foX`W4NeGs_)9>5~Xk+_c!AvWk|MD(h%Da9PTr?zdE)MgRG4$sCf$d zKXfT>A%7oRU)kf%Ltbj|Uc?=*o_U%dNSnoW@a1Beyr3AZ0ribQ94dxa!UJJGatgW# zIP^LlL*r4jmMjybI8zy&sAsdB^r~2C__7~$Qye{PKdgHEJC-nyK<(%djBfE;wZu86 z$a~%I4IAT?GK2GFv<*z0`&jr?x>DiL{Gpp|*bIuG83=;BgS_B5Xqy4lJIFb5OFB|C zlh>2khPE*WryIp5McVri&qL=PV!ib~)*R)dCUXn)5!w}(*h02$4%l zA<;JcZ{WJ8rgI1}-1-oIiXK5>Y=yZPv*Jo?UHeSeYM&#pJCaJQ&XpD#F)DKJ@oI=T zGLEvUhR_ytO5h0)0ww@;0U6Lxe?pg4Z&U7)v!&Mr5#C7F8``MCw@l^aoaoOWUi zG_VJ>6IqEgHok~xwD1+w}pYPz^P5*p|Y-|v#2#E#jHqdb(J5sOFu4RrFpb@3c_+g@u4_6%K&M)46?UrSR9VEb9CkcnC-bx@i}v9?B+=Pg%@t zN*$hQo-B*h2-NpZa#ppDvkby&nxtlV`G)eLrk~~G@pkwWdlgp=&xpW*2$&LQuTonw zcXEqGpClaRd-WjQexNlp0Va?`@K$&oGz-k>TWd$E2gq@0R%qefW!<7B^8GWW;a@zV5wLO;qy=4y7H?-gm} zGgO<@8+2)X2cQAa2HXg~0-6G9{b>Ct^-fh!*=vzQU}t}!FQW9$ijpPKN}=1{6HeH% z#(J8ZATQ0U%@Nabvl(?@>#c9>eAh9LC$KKEK0(Qzq-flR zrCXpiDnH0V;u3*`bDdd*+AKFTjU;A7Y6tK6rnm;%4-oHc-|@~yZZymQ>q9q@{fHXrj=X}JL4ZM^eW51gTO|tNRnB9^TS_EH zOI3;u4}I}X@vL;cbyOf;<5jFozr@5e?07#+s&Dxtrz&e#;RW1WDep^Piyrb2W((Std_MIiRx>ikKf$YVb+BJ2Mp%4! zbKHn;zGDgzJg^y z87Kp%0p$jscBJO1;*!)Ms>VCadO;sWX_EdNKM_6|sO0JA*i8(uY{X|_mrZQbLKBSP z=7yHJ*0019=X77|P*H49dPm_g?FOrae?Z(-Ay*yMKLlDrs}aBm6nTu5jO`H*+!m;& z^Q&&kTZvTyBb!AZR;Zf(Gu|mYDUfl~T_0>pB7r}`g4kj7BYF_Mg;%n^A*wlX_h$dy zkT&)rS;+1!=ouq9<9Hg;IO#O`X7zK;b?tk7FJKe!6PyZO1~U3meP``BbtA5pi*%Jx#8Fvj`HypZpc>71+( zaRk43*0@&N?^wp*^RT~21$r0z6FY~0$B)?pjur0ezHgz;kwJ-ZnI47i^epQk|E;K& z><@)QrO;N;Up5Q@U~nY(790%5^*!|g%_#L#g-Etk*qv9#?#CeV6S9tkJoYl!&%ePt z+_8X&;w>%n@tx>z^fNjY`+)be{AYXNXy-ZQzZlXbzh>})p6TbT5bP9>lXudDw8Mcg z^Z;pE6fUY=v=ni{KcUfvR{C@5?ecDtJv<{@L_d|2r=(GT=%H_mYla=Ob;DEWGqks< z33}1I0=iW7Mub84SImt zz#o7^7bCGZpjaqbB)q~qz{2QH3#&7{6eZR(;_^4~c5s#0ciT|>3_cy_V5R7EdvzKAY~XI=e;?`? zU!D4tRZ|!Y7DvthC3+@Zpg67eYH+;~m=Urvx zsK@ioQlH~9BVz+&JUtx^h^(bQe$sr&+|TsJ^w_)}3s~5M))8`V@>@a=;z!fI{0aI% z&S1d?Ni)Sx%|V?T*aEVRoT3*<#JCYT2D^X~{ZP$jB_iu79>TB8-bwo_PszMXQo@R$ z&UeT4(Xo$S|aRJU2}eO%++BYcAbRl~N}u1wS1a;lZd;ARDGNn=G1 zRdsDIz16TC91qWgyCDEs{5 zfso;vc7SS|?7iq6?+oiEbxUqXdQ_};(CxkMu47+pJ%C+9kDITXUzr4^*Q5_no5YjX zPTcc%aChWWVtnRz;S1Hu3iDE;N^+L+i`uN)XxI0ORb&5uQb)BHQ! zM(1(c1Kfhu!3rkGG|9vD4$jgoh-9m0Znfy&Qz0 zbEGS?*x1jw8g2*|fp_#DHNBN{WtByIKAZiD8qDoa_l;A-HvczITi0Z}-CAPVkH17G zqDkx+9<}m_7_r%jy9%DK!SB%;iPf1~`8Two>@w~EVQ=X$MK3i=SE~O2jDiM3BOp1n z2YLq7H$b|7)FwqvdQjMiZ(Gfz2!SL5~hZ;Hqje&Fc3&h+NxnG3W5IN z$I;T1IGBSbm#3=a_EDQM zS^QJNyW~omr~#czKL{v??!o{Pg(C18l2=>x9n|xcGWinGS)PUEpq%ot3UshXuqsfLDyPz zcEbqpE3^q}Le9Ys;1J-1KC7FkuBLb*aR`U=hcd5I4TTlyg9&w17zlc~uE#{gRO(`a*$LZSv6etW2Lk=3d zBdZV(r~|g^Cu=4srP8!u9goWzLYv`#R>bprR@e>is&B^Cx&7dva#ni`uk<{|h^3(Gp+-r8N+|1k75 zx-vC8x0u?9^_ZI%e30}~s5ED^d_WD3fYv~NLKOHiv;&w5?9d%n|EHKB(};KTovh}J zZ-p!AJ;_|8If=cC+)o@8i8Iy$ehk}y=1qjTALb>U#g7ETN%OV{5|Oe*zf9l!9{O1J z9R5&Ai5yc!v`vA#;4ru=;z4f13y~1?0w^(1v~|?wvVGzwyaDXfw9Wae8C864brk<)xig(3VEI0LYYUO%-P1@Ale}nsxs<; zcC;P?S>&6lN#gE3C<06Z8tay*KPif3n6Lx4KDz_;YxYEHSZr$OxUZgjn}cubg9}OL zr>;3_=AoalTKH-k$DVLTybl7w$nIn!qo!10%w#tbl!{l&jmlS=N_vMu0``L~q_5$E zu950~5|i=c_)&DX8AcD8JD^(2XKM?hvFn_- zgCC4EP5ex+&8z9JShWOd5k=HS7 z-OXu`iYE#=iU~;LqlSz1|nmg}wBdFt(o&yo#d4>!$})BedvQ_ff@ zbj#ny)5}%Qe%N-#QXhYSu15Qrt>{3@Lu)_czP+6*=xY=@6m6R-&)%jyVJ_sE1!~E3 z#ZmPN?JUC$uoAovX=>bt6u>V~UBf-yWX)RTE2&>B;f-V7qz=wcOSMWw!V7&e&vWNM zf@z(IZ^T|=7bzA<{^IZE2$+GwtjvY@+;FM?xMzg(H__ix1>b?LMa#@@ zQ6*L%+h}1B2ORU?JcECc42}RJs2|jVDvyVh-v zCGL~Hi^0bcIhjqW3bh%PIWa*@qEvKJ{!h!*uLRCPub|sx8{rY@!vABKsXMQctCq^{ zii7+??CJDYlvvgmUlKbW=-|2UI_@mCkGB?CKA}Zu1#~CY2YZMgwf3=pbhYbU&Lu=x9El;ghdq>wLZ@oY^LW?g*^(_3PFJi9d zRS|uZsTHf$^K^GeR2&RxkfyK@SqM*r#u^m5n%bOPBMS(ga4Ru;Qn-goWXy$LKNd+tg*E1l-1d?M7;<%)X6*CHQG+GR=^YJG17bQgPup9qTel* zY#$sHx89!%J&Cc>Q*!^%HnJx2e~V|yYN*F*C5EcNPVgbbf}6sv;k94^xTs5OyQ!)v zs!E26j&PZ*`?Q9IN}03Cf#Ju&&z|dUgJZ4js(0*tM`M!FR+Hk7PWOqB;c?SnG z5lZq?_7$ZOYX-LhiM$GBWvxYj9ykxGkP_qtnIY6i6yO}7o9>3{sbYzAu4o@;5-UNW z<*Q}tB+9~Pf&;x;_kJR7yKU)5`TT-GB1ujJP$E9gWVK%KH zXQ$wnI3RDJsivm@$Kf@|h@#EL8i)d(1AhQ+=vrxCD*e)m;-}maR)MO^m83Vvu7)=R zWZr+AHlmX4lXVj5m2F2O*af_YWwwoKuWIk*p5r3|SHpq$$~2UpNn6h%cxDkMyQ@rS zh8y+*)xdIi6Fl3v6j=l@p=sn7k*ax$0}`QNC;K(6Pku>?7wa3Y__`){EX!d@=2XTq)wL+vGrKKAV7?wj-Ae7{!H6SLq(!kOi zHIL+vrS(L+NF6eT)+IkW9gWgM-F=l@Z|z5{{jfFYH}iLMxcr4_7g`|Eq}=}AY4i>c zsG>`g<1z~iC}R)%6kjD-FPo@(sd4Mt>jCft^c%E8JSa%mM}TqYthv;Q`Bj+)sfUrr z0j>A0%jfXeGI&FL8U~=t%y-ZN+QkCfIuTu+kG-u(285)}X6>|(tZ&@blFG8$s&`td zp$u3I{erq6=a3Fa2WT7E%+N{WRvwfe5HI5Q;A~)Yq(*a1Q!V4$Lc0Rx9-61b(biUM zU60qtYGAdointOVV0~gMcFcFJ^L7aKh_*}C$WW;@7`?b(g$Bu91)}*!-y6_^PDq5* zL?#>K;6ZXFt8_Efy_7ylPvHPw5sO1>li!#c8Q&b)671royIIO^DZ)AYc2BHTGx-#5#>#xa>VZ27}76pN#2^KFu8Nk~q*-BHyU zBU9onkrpHax?Gsdu(P)bs!MdFll4*eFYuY1P6OfoMN}At_d-X(CHi~n!%DOCq38rR zOJC^Y8)W&i#lc@b$JSwq16ytCP%2 z+H(x2KmUlBBk!(Spy_O|fPca?V^st)79(sjb9tsO)$CC|l+P3Y%Rj|7(U<4vW^N|3 zq}N;1D{+_G3)XSgR+!3C3-5wnz)xUTtoN)Uhsw3t^C<8;v?sAMRku*ac*SZZ03;ka zqK<2}=_Z3I@EaV4uOe9zPiBK`!w~Hr)j9cmaaBQWwc_gm)_6bDZ zqQaF}4*L)Lg5APPtx;PkQE)Z!Rtek=7bW_Vsr^>!QT9uoQ|y!uRi)IY^w0Hn@H@N; z*@HAihQR9p$goLwP2E_om0aT|*gKi)3yZS{6ZfON1C{-oT)pfo$#WRNci}UzqnHY- zhQ)D(jpc0Zxa-XZ&V*jYXzA1W`qZ(k1ovN|OuA2TOvBTS1QtP;Nrtr<-ip+RZ$eJc zt&ggvD5%maf{UD!jK-7}nLf$Y(ec6gzCXxytRXgALRdfChBiVK*m~>*{+IQfeX1+( zsTcSs+#voveJFQ;Hi!8a_o48Htf#W3W`>RhRDqmuB}9l6A)Sz2;6K26omzWH5s+ZQ zBb*@&1+6@LIdwAjHdN{jyQ(-?#8k3j$iOS3b?_=AIxe={uwArQbYAeT@c#%Q@jsIX za=$3oS>3n-(Pv2`#ZI+c_nKtyhv93;3|M9yi1dd9z+v4PO*zTrMhmO(2C!aH@a*VR zK9(l6=T-Mw$4DY$*=O-%4KW8g3agC0#fMpC#1CgpFV(+3v^mB~9n5|xY+)30ID!R| zmWrLKUfOcQ5@;EuMQ~VXG{V=R=j2)6u6?cOF4K!sd={%6y-NOj`gFWvxVgWfyT}0$ z!*LnT$9JPw(PiY9zl<-p>g{r8xofZgV{ml5Z}NPuP@poEWLxgL_@Fea=&0>xm=FAf zIB+GH1K)tIK$F3MUaXBOXUGPKKJm7*H`92z4XL|vML6xd=K0h4(f*xu1I}Y5Cs!x>)~VoiG!2!BX2wSZg{5 zxj=uvV3Ww)#GrKdLN|H^))PTD(QElS)d6i!!(%{(9EWcpBgiy*BK!+HWH_pAqpm0a9dqgiwv^;EKRDK%pD2`mFdVDHVKXPo+3tsm5JPlnFiRacwmN!^; z@}w7|RO}1-gFGVx$enfE_c&;YzD%vn3u$kdQ}{oGBV?^ruQh+^Pm?W*Psn+gVSEao zgEj;04MtM4jgU(v3PG0hC$k52eGX1lh|41p|4#2V*JE4I23b2{rDWe^EBRXoABVrS zhU~T775yJV56D#VYR*qBW6t9&5F6z4l|3{ix?(bC+XR0=+QC;~HB=dRqaUd&RrQlo zq^O`PzXEeEEs^VX;d59MyjYSA6;Ll#7z zlwY0hmYf;667cypxE9+7+ZtI;Vau?3BzxDQBhhEr5VAcp)s^z}2`!8sNYWoA~05mZi*6vozlwG73$nH!zdphG5r9JsYIz_XA z8{Vz1iuO&m?Uq;AE0kw`WI|2ruqKvvwlV^AD}CdG*P@S;@3YmY4VhoL?S;pryU8@< zy4IxE0JY$6&}_&Ld&x9i0c_KGHK*m%Wo431f*#Insc&KYn$AlD&`Qj_bmVM-&0mOYNto|v?)%A#@VAAoZ36||4^ znij#Q$eGpO5Ybjw@0R}|IVv!5x-!}q%Cb`u55o(BPdq_aZ^CICVL641Nwrgvd{caE z2!79c!oI*|^>z&|j(B6{OsvqEev*8~Q1J-)dgXg^7KVZ9&<)4}Q;|`~BBTk_(9lvR zQeTlr#nps6I5n8!finq*@0X8D8m}s!fU+lIB7R_YdX;O7&c=m!GH=(c1y-+4Oub$$tbq8^oY!X}ib3(sjFO#A?pZ0?_koQESmmOC` z)yMUyVG7U_eh7JCIot&nfwO?Ax-;q%inh}2LLHCBT0(oAD@*N(Er>Aul|5%2nEh|- zc1r~;i&iEvD}o-vcUfl=&76zfZm%SCFSa-RIJbj(n%RUK6EI~zl??R}-C@HcUr%^ctTvggO3h!;1m?zP5Kru*U1NPk!Ox`oF3Ps0 zSZGNOA{Z=T%abaBwxgZ_&VcOjJ~)KjftNxz!N2rZv{zL3WtC1(IR?H2cgl{E6kTP2gBUwz4w8?cx8$e`Z=zFxpC1mQN8C%Wf+MX>k{Gy>}wE@(%o%N1hj0zqevjNzbE%+^f)47Uy_eAk=@ox_RoR-pyLy<|`I z5$VlbvqY`Sh=I-~URj_hOig?vPskzad)8=PAJJRsH05EfTz?2U0UkiUk_dl=)VJ+G zAyA@Qq1r01B323i$2mwBQ3huxr5&+PA(n5d`-E$heZTD{ewS<&o-?0Chhh=@skO81 zU%SPP`NoH~#q8<&g`PAQ%fV|avdf#RV4Xo9GQ0v^&^V+$G6|jmjRv3SS7|ls#d1ty z6JF*XX3wLl3W@aDc!O{|e`oIs$3dd9^`^NBi6ukKy-a;D7XI5}wVfyXAfEz>P|bup zQ=S__|II>p^+ZN#H?jl7*L~A3Hv9>{g#q{{yc)U;JU86e)zqw39F&a|&Ei*LS*gGB zV^f1;m&0@XtK2EVYMp1PgVn~HlBk$N2VpWx729KCkaMp)?SB+r8QYzv=QmQ1u;y^; z3+GA#@*}Diy3U3Vq|0=O#F9zKbND{|%rH-1q~R%V%Yvc=BbWjwZnQB0G-j_0$bNllrNVh0vtNQ9} zz!0b=T!w5zDv->#GQ899Q2RtPSUFm@U1a9JVQT3g3LP`LI1+9heBr(4+G{^bc0mT> zJ+RrR2Thl8W8|1oj)jH*Q*(LFEK_w22*@mLYK2ETr#la&!m~_UwS=-@KY_R#h`LMaSc@){| z{%u)rKklmLHwDMV#A#aY8?`(0Gy6aOXvtIgFXaa{lWdYc0sbW?E(3WDl>wiD<@$!& zx$3CmmZXQ^8Ari5L-{XLGbxUC2ueLP*A}9$t-s|6_Rd^nK4peUZoR}(Of+-ccgy{Y z0?Q&Jlckw=1s8n=dpqAFqR8GV>uP@LRKPCMk*f<=G>(VIz-(}hp|kFi>a_BNxU1kB z`yxG(f0j8J{}SN^K6|^n9^0$gw&HelJpK%2<6-Os+0~%fHrtOle|eht2Su#$Tj_22 zv$PQF9KVnFtNf{wqHUlr29}Vy(MRKL4yb?v66E^@JZ?jyCtECinvu+=V+bt3(`+xdqa9Z-#w4` zN;V36<8pMk`Lr1}*TolGaLY{l1!vNK-*1kT$8V(mC?IqlYbK8nK9_V?IMlzjs|?2h zBeWR~lD$P9@&){C=&omK)+t*`hY4?RYqD9CN7)C-YtiPx%D!c8&~d`{FWE5?klbC0 z^+aFbPw;EDdW6VT)w|b!A=EdvIo&PSiE3e9=Drk;kuFlU*UZpn3`yt&yc4;AOho!Z zd%$8KuU)A+rua*`Sy-9tXLhFk%u~~C5{DyW0_VK#NGA8$){JcSmY_Ox9_mN;VP{DO z)WfmeRm;CFfgWroYQqcyUlqIFZ zxh|QPabIXq@PlW8tFA+4?QAK-reo)^v)FL#D$cPAiG_BKXRCL5=w;+u;#HWL3%jk?Fy@zCO;CL^0XaSb`zw zKJ!R4WZr^HtTbYaqnK=rzYD#IR7oz)Tq%TTx7ac6ZBb=eHPuV)Q@tIy2`xt28b!!o z@Ipupfxv71Ep;RLOmRg4SrlRD3O&*XlQFVsw8oou|FqY!ZMSMIAFv1LEE2JvVE@Cr z+M3u;I>erv{zc(;@$>0U`NQ-+tZC%D?XBpkr051MAG zM~eAkw%{$N0z*yX=bk3b(Z1p8{*3FHV>IyupNdDx^ARvzF!QnYxXLz+h&c9pF9h~Q zxQR3AZ-r5GI~(Dj7H^OZQ{7W*bREdPtq8J%ci_2D1Mnm8*3d<-)SM^tsWZY_yfcj6 zwCj0wiW|QZTH~X+r`T87wpa&X`_L=qD(0?azkaCYkj-H~=iK309Q+ve#QLTkxyjV6 z%;DU9qRo<=e7(9vx71LBJm*pP7gCOZ@L8Zf@LT)0dZVJcc@k-o46RZc|yf z77hB!JRZGa-inT}ge_)brQ@q7L$`FX0T{DrP_0OET@=6ss1Q7g*vBxCo-$TF>&zl1KkTYoiFN zu^h2t*1>kjb%boP5LT13oA0}acT=#k|DAis-XI)zBOyxsBEQ}DcZxk zz-G{Q7TRY1OmvCN3k5w7T-)rWwm+?vEmP6P7>ad5pJQfRZgUb{$gakmV25zm#F0#` z!gj_&Za)D<@=U&3eNB7DPz+_DAEYa{9l8#w!F8mXdZ@mt>L?RPc!DCXh+(4~&b3Oc zjD84~`P#X2_C3}$_)|=bo;O`LHAg#R^{owv>5fm%*S>?ns?m@)ododgaV&g-A4Hp{-!XZHmna(*rL(3+#J{zpS4y0zGD) zKq~e2=tC@Kq1!>%caJ34G&(;qIYZ>X(9g2#^S=oj%dRT8n$g;*9tU1Pt>E79B-jj5 zp{0h|x<573NIlhFgmML}G-W~ddjgM64R$4G;c0slk}XE@)7Wxs6nYG|<9l(~X0U&7 z+B^sR*WV*M3sXR=ktY zh2`9x=q{Hu^h9^0D*j zK85wPu}meugK)LXsu)A=-Z_R&z`yVW7==c{X zOp|z*AQD*Qx$B%vRIzNd{Dq%IpQD#C7;k3jXuVIE9gRJ@fH}A*B2F#L7^q_zTHYjq zRC+*JqM4>!4j@p7RL@J1eQ-C31_HoC-3ZNig-Oy}G@47Wo6>vdx1=8@{Na6pCEmv_ z523aWvIa2;dE;TV`4-vqTxxk?{ciWTWj;iY zqdHzY@B7vV8IiNe`nfR_1DSS{k%Fj(e2Frwx}uu`4u=jxgOQu0A8?FpX7x7wp{t_) z@Bil%%HBbLOKF{XAHN=%9h~O9>DpyqWBY88TK*;5Oz+WgsLFB}-(i*5FS=HEXOitQ zO?+zFoG+#W>{0xbc$#9O>TmK4P6D=rAekZ%kQ~-QjSQ^}2CY}QRdHRiUeJV7gEfHi zAa^1;BX%OV)c2p;Z|`l}L*4=_nD3g~m>Z+#Ftufct-k%8v&1_!@Ncvv;ZC0~+^3&r zw-SVeG}(dwAS!CgWq{b>YTG>t#`=>t0riEB4W@u6ziKAp6PdEDr^i=T}x9;mCg~b;QLt}X|Kss zv&R$H!p}o7-x-g`5w|t7>dl=%=eYxP$xG|YOVpg$O=Iijd6vx$m$w>Vwt!^o-J%5;iwMRkX$U~35Rlju~al| zel*MZ77?t9@F>2t*h)lwv&dx(|k|1$`| zsT0%f(2=xP)W0djvLT|=-1n^av>fR`rgrK~bQR1m=ekNA^K64HR(zDHFK#n#F5P8n zXz6VoZr|aY<7EZTMCvCtrE~d})B%id9FHI*R?2s(T4>0+2iOttnyu0=$1Y(#v1Qst znu*E{GQFrAzl7BQzTSm7S?W~G5uE1tx`#XN*$S-^^IY6)ng|*oDQtFbT7-6itCyP= z=p6bKZ=PD0|4896f8)r7^(B4fbCoYOBasu}N0^Vz)*I0=Sh21dvRT7aC8f2+4f#>n zBHW`;a&JbPF%FjIdR9)^%U?J_qG{=VW1S6uB+^4^CHpWicu{ ztZb!Oi3~zXSZ71Ap$oi-#por(qq(A*ChI63E2zcV${a=cT$WCM0C&hC{}*@8S!fS~ z`VxaVR$F{-=_OM$qPz8@^@&60qWc>M>&Ks_4(6VbJJK(+mhpYyCEl&5r|qYEqvN1= z^cVHTaQ7b6O+`8*tCU%JZAnex1a1LCLs?rkF*7J(548#W4ZUYO$6*V_tRudHM(%6r z8GH@V1ZJc+?9V~t`88N4+A>uoyMuI{{+fM|S0uSCJ)wA|>J1a1zF4uI01s|N@5A~c zyR^sD9l#3@dp4ee`Hk8)-z|M1zBlqDQ0!gnEO3m1+FFJmHvNDeWEDOTc1P8$-yQ$B zihXrMp4ekJ>76L!X)e}M?j*r_a4TO@$+QApnXWUo-e5D7U>D)9UKeSl{!1Z{o)&fH z`Wb#oyZoMPyTsAR-T=c}#q|`v-j^`-Ye`HrdW|#ji}*gG)O^r3+8Of94Q!7NO@7bj z$tdjs>oIqe_^3>-Y^J7ZUuaLlv>^%G&*@laxUpEsVRaMbaoI!RIbKcnej1BZCv!8A z2(R_)ynS3X93L#F2@>3kSMdI($*@CMWvL6AljTl}dvVYm{u*nL>0Wl78e?4IEfd;g zUqQj&U&};yV9&8Mc#b;g7h-3ie($3mq@+ooi!6LC$3^c(UY5O@+!ostY~?e!g7&=m z1Mv%gZMa$hHV-tR|*c#xBMI zrq-svaEoQ0E#W-wj`-t|Wr+ousd*B01alcD&#x)IE|tJ3><6Bs129*tYj|up1t;+; z!q(naTI4sxv-wroHR*@QlfXUxTTB}&@K5lBoG$BmODVx4$b{8+$~4f_n{W_&tOx9B z_ey`gkPxOCoy#^+<}#1-(t^6uA+nvy$=be%6upQ^41O$veZg`F52>IzrM#zTAn7UG z$_+6ZQTF9FrW?hgAyy#o?(WFg?pYq=I$}4jgc@!MR9OP+R9gqfde3&>v*7xuH|fo! zNfFw0R*ZjHDwX}C>aHEHn~7G^f5cYn+v+*k40Jj&Q8P!Sl|Pmo5yZHMnagSI^3`*S zge(&DN8Nurzgzp7pMVNziAiqiWIBSc0QEtsZH1HNG5f}ZcgEMkF7IK!8(qW>a2pEi z%Bjl98V}MB-41@}rUmo@8cdn$>HgN1SDlnK5^LbS?a9cHh51~Dp7<}aK3LyZ)8({x zvQ09#A+DO182>STGX9M}CRSNj*hhN=zAfPavEHfHIR-gTD`HpX+k|{+U1b&3O3i3p z1GF4AUjNw86`a0vVcxJ?y+W~4a#%=kPcz0*mXwW1_exw1jSL>~EO54V{BAvL9t$V^ zEcCZ_xU*R1BbIsgl=F_aC|DYul3bK+Nm>cL=Rsa?F)r<>RBE;WrKtke3=`|GVo|IX zR!+B8YgRdw=cRg)ntz8?M*BhPmdPb6Mz;Fzc-}Zi!4AP~*5DERqNxyW_g_T9tgtn+ z&vEwfwg|M2>`TZqma;)q2Ghr_ENUymm2*@)PH*u8TRO3>ig(AYs*ysDI(H4qMf{n92ac_ zxqObBS|42(8s%^4>Fl^;d2PM{ynsR@13b7Q+(($q5ABa!&As0O!bmb9PY)s8BkyHK zIOhZraRd1#rChrNw8KS)v7l>treA{gLVbu?#ZirrmJ>JU``J<281nV3AZ3cz3qA55 za@TNFgi|;bFEyd2+NMRu`uJ;nuX(!7=gN6D1$A%`r)EBs&7&F_yE$Be6Lxt+mHoAq zbz+nb6FI9Mlv(=6=y>FzdbVn#e1P}~?;iUbqXyZRnFJp7`r#-3rXGWKh$e75kbZ=l>&jr(fZ?`42<`<&9M%G)C<*G>#qy)ommFH~kRZe&mZb1-cfQ zgeecWlb_p!W!Ugs~oyD1BkjR!zfd1R~YIOAIH*My2A zlT&xI(@6w%A1lhQDw-i9lv6cTLCyUfeWzc6^@U04S@fLlt!A+LtbDn&oTxH)KXWn= zFSciw#Gi&s{0#3P*L?d~=nz!IVp9uKb<;T0A!3ikW>q;du1~(b!J!dyYGS4mSxY^~ z{={{Owo4x=$7%Z^dEIFsMGP#k=_l!XqAPV9G_#dE6^A4u;bHC-rioHYYM8yA$VE;D z-Jb2PCbqTKJW+&KHT_|lXiS=F6GHQ1+dF$RH^sLEd;;52>MV(LnYx?Bbg9F4vTFgPLI-=I#`XlRT3>Qhh|G==NZH z^>XZ*;W=i7Yw^YaFQfV8}ZJv$Ug4UnZBwH=HAzD6E&$rMs%=y~($f5wx=ijE^ zjD3tgP?#+@ceD+0Wjv1pox_XcCo*&L(73KF%qVNsp_E~s%rsNR((Tlcts9k zdEJ7V-D}pY^-rzJH6m4eRGwV^Y2n{kbIpF~1i>HdN0b-2wXs1VnTO{nwbV6E`^o=t z{)_$7n2+N=U?1y!Z2!5<*HJ%4mjv+sKo>IpyH=?6PhTzS^jy& zWmPIw`%tY{wc1s`R;^a)OZn4$2Ywv> zp7>Vh`;ebKO0vdb_@CCE&Q72vejhWZU1iIt``CAQtt9mo0?l1*7x=mB7|8IoQc-4fdBH8`8vwh%km+JqZKSib^^9LUo9MIrjk1dN2cp+&4Q~r>7hE(13r4}; zXc~|NJ}TQtn~D1iFwSP$Z)937kenEe2D|&txfeQ$KufcXr~~`ljj#b91WI*>WwUjJ zQ{uVm8xh_YYnx(boumWwg|PqbE378#qgbFcXm=uCbg!WUx`(#F{?N_UGzX2LQQlW_ zOz@a9ozae3k2EViDD^7ZGW^QF!MniqxAU<*U>#+xVrguiZPD9K+i_s>RrEFqYzR4{ z^-}FqP4aEYROTSoeeQI@W6=cJUgh7)L8_PP8rok-Tg@ePJ+)d{LBW=AL^lK$ZWq>a z`gm~BRnI(3bdEA3{|3tkLSCOM>8#=sIltP6Ia}Bj&Qb2)J+#{Uc><-Ke3=#c5$|W+5^f6a4_YzcLw~_^^MTxJm zWiefh6{{C(6a5smMwdp_2{hqJvQnQ?pE3t>{c^9$mXTXgs#3<#M$`Axe`nNTjbL|S zsn`wKGWKBhHg-vTaA=gz=40r_0B|nN?#Up<8DlRF0QqtLI#RJx*&e@$)kQ`Z(brzx-NFAcR4Go$@bW?Ge)dMbLY$MM>Yhju zT8gbI=w5WJXh6B&%55oVWY~dj)Yee{EBhpV%>TtsQmc@fW{$vb>Ye|J+vXT$?f{Ne zy^&cWDY^8keQ8Z&J^Y7xKB)c9gNN~L}B1DS(!#oR^LI+>#ATA4T}u? zqSppNK}-Em^fw(F&h>QZ8ljR$Fnv@Xa0&LrH;2mwB%a51tM!d}p2=tGS=!#nHFh*E z!ut_?>oa@Iz1w#`_*ayXT%Prj>cQ5tk6@noq3pQov3iE?cT|TdK+S#7@EPlhD$vK; zTgu^znG%xF40ZKJ>im3*v^`FQs|KHVAHW`3YVB(2NHoC_{4i_`+Y{xiFRTgJ8&&aZ z!Y5*aWF{*hi)mw-1gDZPC)uXRDhFyFX*;2WZU-pr`Pd_5qjsm}g%Xobk@Ob$IJ21- zXt(o$%)9vWXrr(qu-|*o$+j=GRy4EBlPzb7mFDGE!txmWw-Qg@*C{kH`e$-WrXb&+ zQbHfe9>l8wM5EiX9f}(2e?UJhLM!UpLRG@nsMJdpcVy?phXq02L6)EXld`$Ykj^Lg zu^FN2{?DFzt|rcnHuzS7!gkT}%Ca8zUtVVm&nhpFBO{gK2U5>+wMc!bO&CJ9lQ&bO zmWt(rm37oMwGKI{)ge{16+mOOST$HaL^?=3QE-$qiiI(Z--q*@2v+=m9Z<#| zvq?Z%IL$(~U9;AdmUIia(^AMJZl;&TZxtx`4#XJxOL_-9v-?A3*V^bS`j&Ko?Tm{M6hA zxHf;l?(IADw_fk7;P=Ru#OCya9EDOqJIDH+cT32Y_Ee5kUr<*^Dk7`Usk(+byRJPl zL(NhTRwSh{(Rsd@(}KZ)jp4#{I#xOQIPk+8a-oi{HmS8G_*{BGmtNI6+(vi&blLoO zLmQ$;lF`f%(jDp%c6}aC@P{NPqpHfQ)kq3-x23wTFxyy;EJS)~PbsU*ABbhbB3?Vz zXX#nt{TPn}VKZ)r=A+IWP0=*OYkFsJQ zi|q~V^hbbi6LYMz7Fl)?J8&!h%QW9y+p^Pg-Oh9iJskr-BbVc%^wC@^@)3GH)^%Q~ zXthkNoTu??YoJuaN(|8}uyJ}Owh^@NCZ$L|ND|<$1isAyN}Jq<|LLHE>jOoeZ4S3} zEin!}U{_0BrH@K38jr#oUfbH(5qDw!@u4-*aB5NZFonwK#ThQDBps=I1zf+*=yAif zg4u-^3M&^n4F7@~o?_}&N}`i$vDLWl|}mp*35tuatj+2b}VXC zc+8-Oj>@S$r060YEF1+@Rafff+;-qZR101ARd)SrziA0yo(J=&n&x3-NYb(*3wb(o8pG@h1QKsMy*&}-v!(ugRxq=588T~rpg+! zL!y~{GW#LC-z&1ksdjNZ{4uc1qX1pH+&bCZnOH{jC0gT^&7CY?Y+dbyv&j3@&yM^S z_oXJ}@}&K=4Xm@=<)XG?o?NNyrXHaUBMpE9RD}AGX3rj1r0JIKWEeY7(?s5)sAMv4qYLS((0Vz`sC7VHC ze-k`GCdpjcLD&;Zkjd~xT|lMS8}uiV)1Fb!Rj!bK5H}WX;ofKdq|P8+%PdU3j^e?= zKBlLiv#qVSr8;pPzlq;5^@QE3-aOno&K_}5y!QeRBFz)kGTrm@DXo~lxTgixBr*9D z)obluT?o6bcNmUMPovx+(gbh6zP4 z3WbF~3U3r_)XUIu+IPxZvKOLDyo#)+xB3r&>-w@~J3a`M$;(O#OQnE3{fX_mr8jYcxB`r~dDbqVmI}e$ zyTnHhwT&)_KgqPue+H+)K}M3A43X}ONb09KqA^hn$BvIqMXbj zSuR-1oyRI*45g&XW~Il0>G@TV=c9Vu&I>k;?V))mY^G`u(_l;7#rl_RfTN2C_iYT$ zj`|Y~GrIf%s)l)(cVFm|jaN9-{SY$NOyA4UtMIpi+6ARBLD{Xlty!QP1@-z}Za3Bs z51}H%MN~EFq1g znOPKmElE<*RXqV2fbk2S6t*l^r(B1^Iz_t+59;?Ke`#2%5fZhqE0+M5Z|hvG6cXDT zcH~bx2G1Ga9oXN#PZXs$lo`k#>SfkDj+sADd{s76FkysXz!|I@;0Ir{}3}neNZM$n_|MyHlUo0vsNY&Mze89Nuapv&keuUluj(| zN&F{|*|UwY0sgHvB(epRQE*N0^vPUuGCnSX|Jq=uW{6{W`R}cB;Cs z@*nY6!5a22##~CpG9>jl_AOM!@Ari4AFNTc103pIOf^jF@V&%l^B&tYN5I+B!w&5X zeUBbUjn2)_C#m;Xv$P(mg7S%av8KPKM0Zv@4EYC9B2=wgeMy;;4i^W7TwX7B zIYtM{ll;QWq{O=Dvk)&p_DbDS=MVc#Yjumrvcq}}2vfam1&%w8@9v5);m<^tf^ud9c2-$MlhQ0j zen(HCuXXQ`RmgO0Cv|tl6j@r_NjRI^fIX77JijrUPSuEyjnD%vJb$|M_MTRX<%IdM zX%@~hU%@Mx4VJpL*^ZMgp1(_o0B7FQ?0NEJT5I+y-Urc58A;U<9MSXOo$6)q8x9vR z3oe3#YB^%iG*T{+ToX#zJ7^4Qm#jZA3HZjJJ*(}rt#+ai-v^{OZt13yJtfc?mmAW9hS$|JoSny9l4TBPUfHc=mSH)!q zCG`Y5xew_silXdJYGr&kqI zfMQ&ppG$d8U(6ZJ8!DP6X`xuHysKUTetWl0gYJTVCy@tQwWg->uaMId5sz#Mtb|iO z%{t!SLfths|+ zL*&3b-3OCPkM0Dr6ya)*D>uqylC#2L+(9fF{W|#(^o4ih(a=BsTHaFkVaE;N_TDm= zw=^{WN%SWgTRU3!I()7f?nnOKq0Z5#$$zpH%bLO@wiahMf0$S$&nQ${z4jy82O;Dh z$V^~m^%l?KuVbI1E6JmB!;=3-{|b)vlsYRpQ0r&nDqbDb^}S4mL=fL(erFkI&pHQt zrv>Xo%HoXdoBV9*eukXwG1!X8(J$H;nggnV3b!N;OW8r3 zea!!W!6wf2PhN_j3{MQKhP_VAUf$ZsQr$eAh~PtsS>{jX9o9qk=I-hqL9l9=9SbDC zW$Ba(^zy9xyeFW8{sUB=3$%Kyg+XC>qHk}wYEbLfW0SRis;(=3@#nKIG7gZN%DchWjEZlo51Be0Cy2n%yDZ6$6_FCcJcW`A?OUJW`C9yQ-h58oQ3?U zBDyT2IH!66I_N9VA+*67VYqIE4g;dmpUVBRBFSR@K<-_}KJY7-OE-w?BKkm0&q!yP z?SuKW>Aev%?kX8!>|7cHve6%wKK8%eQ+;oP^!TgP^Rjo8O3Vy*p765tGpHy==zgMW z3|k6@7t|>*6x=eTu;WNgO%tU`DiM5QuV-x~+snM^it+8?PyTamiu0%~VD4t#YC39~ zhF`<);7f=bmbi7lv&7TNe<@^)?n%A`HMfJZj#(c#Cl=9d8KNjwZv=JZUC__`iJd^5 zx^l=!*r>l%%$L=Xh+%g$mRUj_k)N8`l8i=M1}Q$9Ymegw@GnOKnc#=%5^RsY;~YFp ze72fhk36ZM2EJZ(_G8{gKgFgAo=dJMpQ?9hg`jUh4XMI01=9*Iz*}epHQqbbVOdSd zV18rvBWh0)n*BRj5>^McdJZ|R+U|l{Y8-fVFw-e~2+YMRz`UWgqorr8?|P^==!|}5 zC8X)pS*&*4CxWVyC$ehb{@b8Ah5W9oh4IiZ+ETXwDbe0hw^tmM))QY7(6}kaEXv;e z>g?1+B7%mD{$8HZ&bPKo)-~|^@_~xtZ*V2-0Cx!A{>nMVQ^Wr_vMHg-Od(yT^kj7e z_3&ruT%aE;*X`Al46_Ti6`q6tOJBo8tUCH$gQ$w6%S3$c7sg_8=d$~$&CyQ**Z(RY z+hR*KGj0l&%7BhvXxw7@1Uuq6Hl=F^@B^zv8YGjcWX?!!$czJ#^pLoxJO|tEG}J)F zx;R3?_Ms1eW@J=vRc}|elb)805R`E)G1pNUq}thf$ttliA=G!w{lfVWG*cBV3A{cr zm*9YJS#Qo;ssZaQ<|*;L4u6c3)3wSB)UAwr+=@b##0+|nrU-%R4HUy8!-j&t3)U7) zFgVf9z|$QnuP^GwZ3*h(aQmRKFN26qPj^ImZn?OEGl(9hI1>v1O0l;~qYZN(0eYqqCBa2uS% z)+r>nhjo zWzQzNMHdFPc{VuTI=)&OT1FFvrZuMjjEnJ)raoqe#bNv4?BE?9U`8t>g_&5{MoM$$ z3a(SoU3^9!RyWb=(MI~kSPz2{JTA+D;Of=RQ#)0gWm3^K-VN3XnvFC)dmuF;stm96 zZ+ADc*R$5O?8L1=5Db-01dsPUVz#-fy`pP{+v=A93wmw(Sy?^GVFu2%3w*-vvYX0p znxVR1=yLrZhTD2C&?s2C^18F?QpHBu3*jJMH_kQ20`l=(CRrSlgk3<;kvNW8&F0TU zMcApoFa2hm0owNmmQtJ4RoU}0-KkvofsN2cGCE`XhRu zzNdaEb{Rdc$dG5bo^F;B8b^V6dHvP%k)W)*k?KB6&wMMFcwM$CrBbxpLz zN~-LmWU{a^`xxUVWo~|J>L56qMuNtnxodz8x6oh*)*9alF5JPOVAEOp!!FMZRj)XR zMXRKGW$yxexH5Y&@2%*Zthr*F+NAv*d>iBRkMy+-Bye~ChkVxzR4te9lqf(OX@;~7 zdfDyt%Q!i5GjPva+eKK_F#V~4k2Mt=7lVU*E-}$O%VuzNa_#gH!PU@BP0PI@O$UXt z1hyK#aJP!twpa}3M$4Y8G22i+a*K=o9`5=mp>C9aXVo7#|c8;Et)BS!yv zZ*|z^9kbph{v!UD6;xak5|RbWi@SDGY0gy%TlSez*rS_#J}S)d=>G` zIs@oW9lZ|UoCuoOlG$BWjkcB5f;&XGTJi$&n*y5t@H3i#GG`m8%O0U`b)B?A%@f$D z3&l10YPOz!iZmw6NzH_O6|S$I`?S51Z56nVD&fsdy-c4>b4-5{EbA=$c;^Jq7r!p@ zAYPa)&X1&^tN^#Z;I5>#oU7Uoo@ffFvHBSj*jIf&Y#Vw8xuhN`-zPgE;_}OZdYDZ5 zGdngpFZxettKZd@IwSnd*=@$JT}sgY?pj+l*>_4eT|sc%`36|Ej$mdTS2QO7gu z@e+KEWSwlcvRHFNn@7r{U!nV~iVZ~HA@7hsH5-%yd0cdZPvX{tnKA`j>Z20ZBFzI& zy*1(Mtz{X7&oS*aJ~w_ZU1{oq*R}Mr4s_ggGW@kdinu#@yqyGytC!5rPx-{)ySjpR|-vxjYwv4k4S9VW!4m4M%Z6MRdxav&<@>W%xlQxZ_*$0?I|=yg0q}gM--4G@=RNDs56$>y?K$%lnH<_(Jwa zsNVl7JC$w}M9qi2G%v8}SD6qv?3=n^^u5wRnISRB^+z&uU)u7!?8m!?hGCgg>*eQXwQgXp1T zoqV&Zokjq};k1qoz1nwlna-!JrKzdj4BAMt_$B{1J4EkAotOiDeXJ_fq+i_QK)3jb zn1+Xd!f!1-VVnkjmk`ugjhsz^OfW1gi^tRR@&Vd7)>d9Z_)fN7aaQw7*A#uCucp6I zP-?h}xpmJG8E9wLD2gSk1p;1UW|lH0|0?q^xh#4-*vB`-{oQp4+#xT`+d*x+464Pi zuurdKn*o}WE}jE{jiDN`OR2rty5xTJ`t0ufZK8JaxMHXV(H+NLV&C<93bq*#{cPB~ zEYNyX0jL)10V}J3u>dCHvE+(~Ie5ie&E>Z3u{1Y-19eVgQ+?xolN)bsS!X?Bcf0xl z-7gY(nVgVG<{wh?3_6!Aii>Z_k1EfrgW5{yUuX=ii1P<`gYiFIz(GRy-OjLO%~nb^=0$u6G7uy6*5q2 zg^vWbcp|QYjzboTcA6w$axErRou+ zv9^b5w8AePAezGK!U@v$k~e1mNcD^y3@-3}b)U2ECG=zt&AqVhGxKf;! z(Ui@myk@N7P7ytmZdFFqospNwpZe7W=L*;c)KClCfws_YRXtG{C05~0?p|gAb#cB% zwrS#cpa_qHI0+8lA&= z$Db-T${r{$0t;~!T3c^4)F}uS(Di4~RcH~=DGTM5#FhCqfDpSQk3iM?J#y9G!~4d0 z7^lJ7za`0@z%IK<5i*0ot>$m;5MeBB>?3#l64?k-wG+GQRkua3%j`_c;g4?j*(%5tG1J zV$77{#>%+CY_yJcO!d6BhYmsBsP`#WNB@G2z|&S-~8Zz(OrqF znI@zX>V9Sy?gXJib`@yp1CfoG4>Ym3;ep|Avo`;1Ie|{GP;y$f3wb3?!p?#6 zha!KbB5Amge^OOn$6zuv23lxM^cJ#G`%qa|c2QJ?Z{cL=pC~)Z9;O$>r-%Cne)m#c zqwSY0*Uj7T4lq9{!H?s+fYx%}8nMS+8gKbv?`Xy3{>;y^MzrIsfjqC!A|9(ORWXp8 zx;^^-1xpM|!M}P;UjbXH<*I5a)=TFJNjxjF2Gx_Bn;w!NMV|Vndat_9+nkn%1d6xD zmzgR-PiQfZH&d-s9CO`!ylAjoWOJf%mY#P~?=eiAK0q?>3A9jLI}NRdHO5Zp_kiBo z0~F=wh*iBunUQu89p(zy2Y`xqJo8r~1X)LSJ*S)wTNUdxf<#mTM^JB5*i?cq239EF zQRrFg?Hl?5-1lUrXBm}hWA@>e3crg_%g3l}8Xe+AZ=)qxW$@b5^jTd;-Avfr*Od(y z>jjND3dUs8cOb;>i>N~9yvtpM_7CPF*xKJSt^<#j+q4D91pCc&$92~PuPk&Zs!Z9^ z$$U-fL&kD$h+i4zuuA14&3tfv{ei{wbFg)o2P(M@+Oe9einFp?Vi9OOCo#^GN9X=d zt&1%TS^PTpar<%Wc*`VXWz)~ntnrfZgi%TiH?On*<^1d^2{L0n5+&(Qq;<6W%qrY5 z!se3w@)yb}nzo1oNGBp7QQXB^qW?moz`yEE@&(clqG$Z_kc)7WyuU1;Y?zo6ej6C$ zS>$MBJ8C&W%rHqzS4wUePePBNvmCe8bKLa&;m3pR<99P_a%ZSBS+%%UVOmn4(5sGU zAL@o;bM-Qy+oZ5gxuef2}TV&9T2b9cy-=!4ny1lvW6RY21kap@x3YKi2=q3L=>~A-b>A6vI3u<;);7RqPCzP26Hxo1L|bdZ ziaQo~di#2YnnwpG=Vwonuh2}ase*rD%4AaVH3{7T^f7qNIQp-KZ@@>Z0bb(k%2V<+ z;^%xmrz&FwDVuwh_Qt0N@A^Afy-yl*CrEmFp7ojg zuV{wEBL58R;dY1w^q0r5t@_3K6KF=)98qbiDyz!6i&*^HoW8W7q;Q5v=E5)ibT0## zj&IFlAa$y>sk>>aF#>$!gXV$O(~c-`#omYN$66#WWKWPUQMWPM^Vp&mQnUPo`n49O z0Wed(r%#}Vuo84Xx(8XJ&M1${hKtI0N!Bg67x`Iv(irI%yzX_mymqqHN*u&prPGX6 zj1x>6_^zHnPDMvoOW)GapeQv-%grVYrgmn}<+Xth;k;}bkoZd=u|R`$0v7*vy%-Cj z72s!3m09TpNhxmx>pguO=~qsd{u=!!_=o?F>mrZ|E)s)@VUX@H3_Q#4OqYSmzRCWZ zv#nPUoE+(%Y>`GtyC`Fs^?752E2KRYboF#CqT7poKu>~qYL-5RVmhj}gNC7~0H@Fb zN{uKzO=iJFd0FgC@V5WEyD|Jl4w_F8A53J^9^)m`1k+AJWzpE4I2Zf&1iD2QCQoLr zW4OW?D|?brwv=_cZZsVQW7Y&A77X~Ell&UV?c-rd;WC0vx;ogP&7oyuTPxF*4P zNqhM=V8Yyl%&|RKU42s^DQ6(nY&0@ky-}Hw^$?%nd)c2D_sP0^F!djmWYN`fr`H7uHWqv%S*xne$Uay z{>GfCk11tdZ8g}LE{U&Rs7I^-+&WvyOBq$zT?7+FeECZiWU+x(<15^V_4JjoC)f&f zx6YussjMOoi4B5bKusD>#mc&6FUO~YLecB}%hk``%DNsnRu4^8j5Ce(U}|P0T$cLw z2CgZ-uEBeeajD)pBWWSf(%bRbl4G(PigKE3x@K@6)&h!31wCEA8Lf!8)R?NaV!vb) zALlG)?uUej` zn6>A_)Ppdcxhei8k13XG3`i?br8mO*7fAHmKm#U2f|^H4nf$e+qp&TvK9fg%lAn>W zBs)g>g?f7ryQ(>d+2ZEu_-4E^xDomR$-JqBX}xBDc4w91TqKRCJF7 zw@x{8Q{tF$t?4}MSDO+_%SP)vTgp|{yT(5t5=q$7?pzB>OU8C?ZDAAf3;8G20quNv zrG8?&fxh?M&>s62oq>#0Q(z{yU&!Dc1(JDH;BozcsRj}J=KI~V)6o}Zixc2Y-v`sO zRd^C~Cmk(j`)cPDZ~dS>jK_PX59HpHA2aR%321|)lYF+iuVyJs9^Op%o|6`kP4fSXMs|HxKP6~&f@Izhg}Tt`!TM{}MafM)&LxEe@m!Z!M``GL)DALu#Z!^3UkLy{-T zT2MwXX0WgEuSk3_WqPLRrMsc~i1yGw)Z1W^bqiewNuswD`{cdFcLgpsh4F|yxlEC6 z75_b4Baj89Q44!3%MYT6u;OYwYW&YsM$9x5kV<~f_14=U_%Ze!(r-oJyFSal$Lk{g zAPXz2YB%coqtmf}^}qDbffP}Q8j-CUqq4o+2Ckz#hr{?v9$Y3)Z;xlfG|<=2avisw zvsj3+_$}bhECtS62O?@6Vcp^=b#L`e4h@Ko2j$`u@)o+1L*gG0UjbhpReM=?5L^Pi zfh|8mPu4%jNJu~JN>!nvq0}!p!5PaGQ)lJNWrins(ZXPFAL{OCzin{F6KY0; znw09atcv8cumpH53#fNV*E7t-$w-IbFE7tC)$talWm}0krVhqE#*2`^(9OIKwjp+> z&yx=Bi>`;?l^FgX%UNsrOwk+}3O(C9Z6W#%dbV~2TEl4YVlLKkHJC;!zaYsA2XJv_ zi25}j%&Y^tjX2cL^M`wq&1#`qTH{}ggG^I_%l_500n*Nw+P68Id!Ggzk+I2mwm;-4 z^=9_r*@Z8qEJY>tXsr`jiO~#wfH4);pTZjIR%!X_pn?x>om2ehEFGOiCbAuqqjmll6lVt{4mR!oa&pKN!`wR$;${N(yQ{N zYQ9bfNyn|=1TN5X^%is=3>+FmWqnBcNcfZgl+CBzBJ;}Z$=(iV0sP}*ID=}4p05SjIb(s8#Z9is3cZB?svf?Nf&vsYPUA5y{YT1zkvP@ z``iAI+$}^Zt5&IKa+3Ho|0*OZEu|cWJb|zApCOz7tb3iKw)HRK5q`pmlm<$F!I#A~ zFEMX|M9E8VV;u=MO<2>1^MBJ53>K$YSWhxhHct5jD(fw}KQW#m11S=_vA)tLwSS7&>Oq0>#fbJ3S?izN&W`*A!aM;+_IsWnelXl1e&Z;*KzwR%K&o^ z^Dz@pHgPXd*vOXo))g@8J>s1hsvT{e$mb$Jp}ov{!aF3IDyyiPuEvm2x*-O-L2S4V z#EbvX8!(eIDtjw7N-hfI+$5t0g+u-`yC(S+@&rcs?zv_=G`886F`#g`Y784Innswa zn2gMzOKAfJE>d=5_es{c8nb#z@r%~Mq; zMHMMU)R6a<^^w+(bS$?y^)}KD7*oyMYav@_7cmA`zy@rQu?kR6w-IYByWtI4;X{LM zqEC{8Go8tCYM7bleHMO^v{m5h+E9@$*8RlJV8gL{SQpHyi$JHoO0`SYO#F&Bj9thm zAt`e2Qa7T*!_R#_7vCYY)F$5I6-`CPy`?*h7x6mg$>0e3?DBdgU~?RrD-{35w|3OY?8z+}UEdFZV zHZF_32xxM%h%Ini#Y}PBhp#XfSO+=yZj*Or;CWyk8-6} zjcCzx*d(Co{)4T8>_?B5uBoQnDZMSC3(m7EGCbrvxv9xNqc=juzA5gUql&GGa@K-Ym_ zZ@@UH2KlJ@p?D*GCSJ&&2w(32vLH`MKaV4k7ycG*hod`qyRQ=|NOCE}Jw_>BLd-SS zv6~${&rLr+B8aU_O)ncnNirgA6Mw7dBq%&Df){fkCV;zlK1}@vV`I=~Kr$zwFKi~6 zCWx??GRIT4mYq&*0lsn6FYyqLhCt!xgX2?ycL$d`D0?+uEAAv`DO+kDBel>U@Txa4_@Srz3#I7ZfiEvE>m=a|*ibFrr#vY0rq;oJ zN*LJend0(T9hPS1_xM(D<{UIdfcEy>yvg#$anSR~HzQOO)hGMrDo~!#|6!lvjTVoR zzE$*6w}G@H8YVOhGA!1&)>nfpmsUV;?Iw4N?+9OUuQ8`l$Ckl2pJ)}S<>z_Mxf0fn zu=kt?84`uiPn8FkZw<>ltH#mZecit>)EzRlhh+PbCe!|ACHNlEchHN!Q9T7xL<3A~ zfHWn@1bczD!LDgA)mTMOX@T%Pw;7W~&4c=~PU3bXV%iBl-=U^Ckb=9$sd7E_ zctaI|-g+Q2Ij^El143+7Nb_X@H+#8uovt2GvI5YtO*C}C9KeDerS>Y;$u5ado*H;u z%}H;w`9$m3p%4eO!#u|(YmO*{oA;RMn{l7%1>V){0V#b zc7L=lv9-1gCfq=~SY$H68JP-9$CV0vh=l8a?;&bygP$qqqP$6G7lg{>m=(E?}vD& zv>K3yv&dSkqu!y<7UY4Mz787N5J8ZpqHb1%DQALCp?k2f#tr(t^QSndysK;*64tl1IKQ4jfG^Wr_uJQy*U?X_>XgD@~?{%(i$)qKLjV_8TvP- z`9F@%GCqp)Ys2gAF0(VcNpK17AvhHG;%>#=wMg;eZpF1l8&X_~OL0qfXWiZXJ^%MZ zKlewHnR%Xb?)$oQMOXd(rN@_KNR`x6KLrx@#97}e$jBt z__t}BWf(l^P2B_i@zA&En^g1MQ&N&{^Wb)K__S_Ez#x)Ej8&`^Ob`VAj*XIVm(&RKC-%*FS@#=kMl;mRb(I zYoY&1Xj$TXdO6`0r3>?4PLLlH?SPY9nYuP|5N4$J!LQ7NzpnOZG15{Ql7*ywge!Tq znFpzIGMZPpmbeSJ5Hz6wbh2_xl@qA#+L z;<~y_vmWv$+QJg8Og9&}GxedP{y<(VeJdQpZNNTBdq*6c-3{Jud+3VqnR}4qq?KbX z0JD9ta;2fSVHqwkI*b#otL$yv7rc*ywPJJ9t>O3ame!ZOl=oGTkZh56Rdz*=z>LfZ zZ+IZ(qboFzG|SaGWnMZ*+=;K_Y^VQ2S_pk0WpqzyxSt5w`nf>2nPcpZ_t$UN^Yvd1 zEK|(%!^(Heb#?Mp3AP4*4=?kE^c#Gq>To*j1qmc~kCis%5MwT;R96Q;s{fzbqo7)9}Pl#gH_xa2~EPSF`SRtaFul z7@E)k(DWqsxh7rd3w72Q-Xkw)N?tONJk^FVz+g>8UN&{V}9DNDSH*M@~L z%%ti0zL~;!Vfau$?fK@yto0$;GS@g<&wy{?BK>hZZ>+S;vFV*}Ju!dtNGuUb7ZGIC zQS>(4EOgC^AkF<=T@?tJ2eqr9&A&-I0kr_pXoiXouF@ZTA9%a76jmNM{0U`fOrW*L z=g3&4mZ0&afe#d`#Ri69B!1NRmwB?4>TK$n75Erl8$X=+n(Ir3@Ch)#B;rC@9n}x@ zEZE&{(T>*gVAgBH?t;ItrSeZ1NBk?Wpa(LFsQdEnbXmd@*%esjY3n9KuW7w0fG;yR z4Y%O==!@%&JIwEGh;y{NufJRLNBp1k>iki-Pn}?A`6c2%B`F0*O+!~e7WS@o9z2Ix zQ~_rDbt+8WOHv}3#u>tVKxt1Jm3g0-9~J~_L+0e5y{|bBEUv*g2`sgX!ThH)ORR5g zZfD5dEzmQ(KDHw@JinUsJG}|J7k{LXE*q<;4!r4=*hCE1a=^Ul#u}p+k@c$fvIdgP z!X=y~OfGdcftB5n`WkK+Quw+$8`&E{%jJb}70fQR_#neD@DtxKb++BKukd{F-U<04 z-c+aDII@JkmwlPHNYqkFlZ%n|h!bw=y>)Z7Z?!Ga<;YZ|i>iZyFY)nLatl~J!AbLL zZc$=T^g(dGcY~`xa7av+reuF9-N-4} zRqO>b$p>r&b^~3ApwKeBBQ1v(SS{vY`T=r#cw-HSHH4JhD!3OewmM9g@DI=s5gAT_ z8;Wjh33l+wj_=Mb{^3D!>~v~hhDbU`o5a}8ts>YXDU#`xKGl0o6dMA&!o~1Dd8(O; zURK-XAK^qgg#Vbi0-p4ZIY;96m_O9ff7DaeiP+v-LZ+p73Gmo~FK_VU1?KtIWsX&D znRkCs5#5)Vn^{2ck;@s)SqtF_@k$>ma_T%f4mfYawT%i=&_p<_xsB9Pbdg;b%;59c z-C;VjB-b4FY!kwwz-;dj#|irw%V*`%Xx%5}{>kTpEALb6Wmaez%Hhv`RjrYzB zAWWhD%CbWDuZQ@VRIGdpw4q|{R&dN=kUmJEy^smOgy}1vBbmkD%xTITOl?6>XVrTa20b{finEH*=5#TbA|R)M9=deK?MyEt$$%#U|W#d5vi33hS{kw4=e$ZF8Zm*^(;JYKnIne2?bm1;FofZhkQ z#}M5+AjC>hHu6UKK+cie7tZB0h3@KJLMXF2Q8gR`ZnoFC(Z;q+G*>qs0mjr6Xcdd` zRVJ0Cj?HKfdU*ascz=wM?2vs&Hd4p4s`L2bb5fdeo%&ZzN6Y{Yi3bG~NE;mjw#{IN_8jC$A0t$?R(VS@Lim`wgZVSH z4e46;X8e70c3`2ei+iX2gf(C}YkYwx3@`Oh46TheV@GpOn-dz#hdnz&x1!JCM9PE) z?s4Xyyo*AzJPZ8G6&k9e{R!_PoWYGqtvT4>eVjLwv2i2tAP5imUXbKOaD z+A+44*G4=?Rs^}0_b37W6k7S%SBm%2t|FYjn%#==m6{?v&hAU@k7hzi z@1L$_jw4_|nTnHfZsk4Lv|WKM@dir`+gV7-t@1C6j7ykOo$}o%`)Fg?%lJ7#Tj?C- zAoV9?J(%ncYooet+N)Ryt&3h%eU+b;eCP8xE9u`U4GD+S>cq?N-+qp_mTQ;YZz-{K zHMIi2@)E;O`l0wVV-3?fYZJ!}m|q?aJ&T=7P0syCzD6%+H{*R5ewXf3Ow{y2WLOCRT!W-OvL`UWi#dncE`VjO(ul!K;|T0^ z{xgg*RksFhA040F0iP(?H7ZFx%p4_6qY0P-?oiQRk|PS1`X(|7e3E$`r=YWzrX7O? z)y1m6Wv9gJ1iLtWSr*Dqq;8cqw@)CpvAE*=qb%cgsXZb=gKaKP6`gPeT>=^SDu^s zD>fu#_O|eBwU4tP;PJ5GDmeeF)weX{O;fCAtYwb(4u^M4XnvHKs+awp@HeDxZ?ks@ zu8C{P)~hO!4KQVhYdh)&X-{a|K?E|aA}g!NYY7i<-!ezj9+76{=A;J3n}_H7+j_sc z=h%i@=a@W(_xLOzEc7-!$K&`|3&~D(#y!!%p=g)XsB9(S24w=HD|e)zzNDKhpxC2& zqv?vZ$H=-~*goCws1oam>{do)Q^j=!r#Ro}%gK}S!%}mAX!OL_-95!w*LK)E3BI>K z8~fw44eg9QafRu+xs|=Gi|Z){7xkOiiS+I~N*%yx$|)6i#UZ&|xfp4N=FuK& zh_yg-NKW-xzCe0e{7^8QQ_g%(DFDm)?Zm#wYk$%kbnVGv5+~@Pt5#w}GRleY>TKX{?EFFaaZxp2*bQ-oZK7v&^?X zv?z8xT`e~X`nP9T)%gv<)b&H&?0-gh?4i~OyY7kF?pQtO(lAs{rAH-u_8J>1_u44)Z;AK4C=Wc48Iu1W@02 z@S6PtlatjZ4_H0I`f|wFqsAZR9@gK0E%efNHP|&a4(_+BNv~-Q*#h2v5l?zn{+n8^ zK8=n8`sG^f0c}-nebj*@mFMM8q-4<%-hI|c;J-Y}>_~be`-8WA23H${O8RSD$Rj$zB;Hq{Ka z#VgQTNLIO5@m;!1(301c^?*JU)`SHqZ7d(W19!HFgJEq6+wO(Knj(afRU&PBc|o&fBE!o8C7t)yO1@ z!Q|4L7G)0MwB=8c42AZT8Mef6*d1*v_^w-~TdN(d8KLGY>PcfFCy&i~PScV1=1j?6 z(JkRwz7@b*oNe7}Ml3H47~V@i0j~|-0=sdX<%R8~v$6N1e|MOi7?JVjM^S!e__;p> zEyT?gKP%;G1v&yUw@b9e7>3ot+9R)2{giy!8SroJ<)~Tx$usiT((@BN!-4>`4IG_q zD=qu+Q8)*G1DyX3h9+Pqscx;X7CF404t`*Y#`~rB5bBdt^f8=a{FkDmvR4YHYJp}o zq>RpM_rPyNh%M3#04B_E=>gFP!F6sWV<44FSfBAHN~1jjX0OdrYMpI)Y>MJEJW@GR zzXEz%yCK6i3f$lWy(@h1rHKdAx3ebldK#aN^Ja;h(l<&LG8GJ0$KV;M14-2&oO?ea z5#>FZT5?X1Wiy%0sJ{UV`gY<&I1cTQLGDT$!#c%8GR-kG!}sVvgH6I|>|yR;&o~de zI|g0=d2f5VTD}H3LjS@Z2?X%R;{Eb3$}h-L^bIxx{vF35fj~m1X`U;iimuWgf;Aip zlSyq&oSvDK@P%3jPkH}!h~eGa5K>uDpg>idu$UM&4txR>{d*_bw#bU4dOcZ?o@ zout+kgg0*^(-0utN@36D#~T~p;0MhNU`laa&0&jRi@r&gXa6PEpiN>m;%*alkv3PH zQr7|Mi~#0+L$QE%8rll7!%b9FMVaKVa0R!R^Of3?Bq4;7&gi4?NT1%-*dDf6Ob)|Y z!w^G%eHFuEm}sTJqBYc6&ExgA4`R_5i9wk{Qh&-C27^~kv;y9}{Z%hvTDAncpt}M5 zgNfQPC_^&`S+4j?;u2osG-K_j&mooM8l+sYEzm$=dD)I0)&-_}_;BEISL#c^R1w7| znsMthdp-9Q@DP28dQyS(8^Sw^15(iQ_~*rO`Fe#0>8W`PS-{~#{S^-k?dprI~-|GY}qbn70=S0KcGfcJY9Lt`KiUo?h{Yize%>pYgg zo5+tO5j=B$P>Z2;G?(94Y?WP6oL2vYOhIeGed?C3p{@zG7m29nE3?u+#5)8`_I_%X zv?seDwIzN##DtTa&FQokz&&J*u?d{z=HL!|I9_VvS?IR4PP>~Mm>cer=$sh|J>PH4 zY1{$Ar4ot!i-L=E*HGYnn1k8-F^qwUvAFt~qEt~Rv4A`62za|M<|@-^$b&rc?REX- zAAKb(8K;ep6+Du~|d6LH82aAmgzXny2c7;(@H5 zxUZldZx7=tWi=7Y&Pf!4x3Y~d1=;s;7OSz3ai?Jz%*Kh3nVMoeVA^k6?i}cD>3OyVd}WbFkG9tp74Qp37al0&6+DE*>P?MEbyZehBI8$M9|YHKmpm)=HaaPs z@nNo7HpGm2b=>EDo5HPy;gIf~gML%aRV))P6pZBv7zfFFfe~9Rj)f-&uDTyO&6dmN@6cjAryr_sr+)^f z=)O4QXRIHc6Wl}n|AxNCo~8u3W|U9#Y3yVCqv8n)iQ=HTqjoQ}81L!qT3LZWOT~Ug z&Ow`au7oGr52m@7l--0YnLfbIj`^#2KEY0Xhj}t=)cvq$TLqS@PxwI7WV6Cn%kih@ zu2&jb60HE6in|8 zjWqM1(=-H)XdWXJHA^Xwr$tRg1G!xGH`)}UC)+qx7F`<(`HH*)otXWZ<%4Orskw22 zQ3kid1?H*N$F>R1cJ9Hx0CZQ&l7N#W3rK$&Lw!-UrSbiN$WrLdE^r?NOnRugs=7~{fcYS&61mf zR=k?5&U6(?k;|sKB(Uf%|1j@dx7t}@y9f=;n&t#dWh1|9Q@!Z)nBStit36L(t+aH{H8o3a|W$|d^7(f%}=$BZVERJeD*Yf^yM-8 zEJr7+*YeqV+}_ikvX6I`dN%w13QP=pV?^+IaPnSK56T9nowbI$liyIZQnW=fP`XCe zRdHV~mfw|cd4h;y~owh z)x@>mWpW?!*7Gg(Z4d1Tj{#b5IyEITJl~2`M)puWjJoX6+;`kjf&rrSBCX`GWCnaS zUP)?6XNqQn#V*4;0jGvWj5u{Ec|M^D^js*Zbi75hN2p$4V_-7O1vYtBy2iRuS2Oow zccC}nTjd)Ps1{lfeH8mO**v{J`<&2&JeTHRY+}9Pje#lrM9~1rbm?B%Ecw5(e`Q;w zG--7)MKnuL!oSOrvij2n)T;zhu1#io@^$o1_;}!m&+VP!N;<0AXFGP=S@vVLm-f2O zB%DcS`p*Tt;a71VP!`6+*6=8u$h^tP@T-aTN{-5EshTLytEQ?ytBR3?Dy|rz=quYO zY9{*3+sf?DSVO5GUeAt6PKuHtan1I0bN%d)Th(SJP$LH8RZSJ9PG*Cp*uiym^8Dp9 zg{#FzrBCEyq+*(lHG@|y+ADjksHra02(hlZ`npZJ0L(T#ngg1~YM+8C>o2l%%9xj^ zEaLNwFf~2WG0@#})p6aTG(R^m^vi!VtGxDu`J-Ot-}-AXo%>+B;#vwOxPGxU=>o!h z;LFeC$V7VSK2;KVsy$t(sPeriR3%k4Q}tfaje%_19zHh4-Zg7JEaJFl*e{|$oVkz*T&oFOtTZ{V1 zUFy%;bwx9(KB?BL#@3qsYp$-ItNu^bRfU_izi8CT=F)D0nQSXLm&a0XBW?Ud7r{2l z_@mPH?a-Idr;!s}2s)1C$MHt{aZ}Hj9;I-C^l!EwXjBJMAR*JogEo zB6KTU4HEW;bG?Zg>V1Zpb3w39^aH3|hm{F+2c%r{09}Uu3Eu92nx~p5zb@VGZDTWWG2pO0dJj{5#-h)(={ra^qw}yz;F6q<(__0e%Xt)STWjXMS2Ei?T1%pc7lBcBC$F~IU`&W8~Iv!aK=KDq+ z-X1p_YC*FbGYZUwc8LRXlD#ECTI^Qh-%NMHuav=b4VwY^2CJAa7s=DgoO-spGjagA zqI$3Dt(>D=Dk~Q2fJfSeGnZbKc8s(<-!|PTemSxs^u*uW+rd@hblD@;Mb@*{zpRsO zWZMnwpX?{aE-s1OKllv8oULS zK(IfSXHbSQ*Ycdg#`1DyFSL$!VgaLyqN=Crk*c4noYtk#iR#JV?Pfw}?i9TRsb_|k z+8(JBT%ZAMPa5f1lolaggcZebPb0l zY%E?atFL;muA+GbB%_BgAFZvujCRtvl#PJ&Ur&_bzh!Y4Y03n`+RX3Z!2Kz-+3$A$ z;hbl$W~EwY!`GuD{KvKwTE^KXI(s?~`tJDZgyzTAB!_3}=X;au(LAgr+;f6@;#SgH z@SOKhCDmGFF;b+S3mdR8N{PG!oF6!XsW7!p(yo)I<^`EcNnNxu(9tLJSYWcz-*VeL z#wa#E&~GvgG+s2B%u{U)XD3g)z|ru+Sf|vmoSZC%&L>ImL9|i!MEMe#iZ0SED`;Q1 zS9iPMrS25=pJu&^tY8Dv@fDZII7FG2uaib&^MbFu|2m&rXP70%j+Iv`e)@rbKUk6Y zfmbRF_01W}SqITOG*~D0A>A*(iF})03FNXnaH^gUv;ZC44K5WqiZX?5imDWx(+)uA zs9q}*a8Iws`9W(!I-2dB@I?j(Z+kt?HNdrbV{DCY({Ix^F^thq1QHNx#%#y!7u{Ch z_fT=HAbl-2iPWANVx8ma1P*9K7bzO4#vt=GGvMz02)T&-gRD@EQ!1px#kECmxa*iq z+AGS8{PJw)_fxxTUH#h)`qKw8bz@7T$^XRVHP*Y`(C`I85c@g zC{_X!W}P-&ASiSfO{{XEaAHAk-6d?7+AJRlJM|G}e+>M=uPCdC{kTzi#qh#JwK*NX_?iW41F?5eZYJ5uSi)T*JRv>^xv%EvMf9t- z5PsV&3Vtj2r68?YiY!pwkWG~wx6G@aCEe9Vsd63VH|k{kTnSWcB19dPx1q*amXI*JMcVd7z4V*b2W10g>sUd zDK6p*xTTDGUd zP>x7?NNvO{<4zC`5zmx|;SL=@uB-1OYtZ)^BJh&ls>>nkS6{kV*oZfc{er%L5+e9A z{{n-J5US>1;T`XsW>;8cmc!7H-HE?8{%LLp86c^R=#oP+U{dgAcyFRw=3ZV2RL9Yr znb7`QCetYM>N&_D_>wd#=usdm2w;=Z>&Q!$RQ``-oL~m~SB8mvJAXN8iw+H}^C{hI zyVoo>eXKlOS*=0}^MWY1WgK)bY!>B_kB@E8#6Q83S;AZfX`-5YG?G*HN9z&7>NDhYXko_W< zU6w135$^Zin&GOkdMPsD3h{S(Z}xZoDe-K1V_?v3M_Yh}s81oeuxG(z-6?b^+?aJcoUh5HVJkD9vokKPJ&> zboN8;Hz8m8RoV@{vOtGL>!UBw6JXX(0CBpFYLa}s_^wFE|Hvw(422L-a+eHW(d_F{Ip{!nzWrVz9bg zL)DGZ9xjwsomAAR;G}LR%zuumKgzmG)WW~nW9bdabuvwo4I`@pUp$o#8+g;$rYVNT zdX^yqrrm4$Z7`8*X8p-k7ibilL(^iyRENBX;-l?n59A`EGD)dCrmUs@4)^nrW)T*J z{Et~ZQ)O2?m9`QKgmLa_<`)`59!HpyZk#+4Z4jIaH_wqyr46_CGmFiAja^NTOf-wp zG?Sm%`(t)@Y)B?{Ab2W+An!pT~b zf13IcdlWw9o9n4(n*)idDv&sg0sTgbC>t1|L}WKbdrM6x`cMB zwha5KDMt<}CcrZy0-Nsy`fQ>iZvmoFt&qXD)HTdr)4C9hW4L~#eyW~pn1-)6958*i zu5&bVuk>FI{Sh6XstYN(oz&Stiug^~QBqglS#=EQ1AAhQmWdtE-qGxWhE`|QKk}oJ z?Sc~CMfQ8zAs~_-N!L%b3&;JNJpVW|_EMYKB!ctxPmnEJ4^#eLkZWmfpX6-pdGCK6 za>a@>M}dCu1>71tpl$zECQ}YX=7Yc4s=Z(E9-53UupPZphZKLx_K0c=)^ct!*O0I0 z(lvrX6Y)(6--z4OmvUm#S$cm~Rep)6ST0jG zK?LYiw57ILLH_~|Y!bxi9?hT1rHZ+dzQVJ-TFkwapNPJ+J#jg5)L-bC<@j!!WGXd5 zZcYETaz^Db{b4-<_Nm`&r=WqW_Ad>0j-^w52_DKw=xto&{{fj>s&cjZxaKEJ3SL12 zID(#`+ktvISJ76c6CdRd;$rk&lobRbY!T!!XJD!CqFd@1Xb+e^nhxQQz-w>EM;LYR zv>&(rXMYV{gesvv(HvNC3FJXkBWoLHyReG%zPzT=1}1er+FRQ~7uTks&-NI(s3I!w zNzRIh{17ui+e2QKt)5yK`4F7wz3NiimRL-XE%O+VN?&Df=qsyXMp_S;FwH%a{QE-P zqKV}CYy;9R8k6nh{UO>QTcX&fK8rrZ#^^>Aloo7-N$-5kU1XVBrf4t0`8ke?`73oe zVL*ChVp1d&*bBS7B1hah-@F()rQczDdlN@ZUErJod}HTWkKfl8a-^q|&$Bgwtcoyu zb5{!9iOZ#QpuT@WZo%8+xb{D74*Lz;gzlGhgK86hO+rWWR>Q1bNaoP9j0NCVXDO7(5Tjx~pw_*6(B zGzP!x5p}t0w=5{GAuQy6rk^H{&Hb8A#(ITr``$oSwE!mX8oa$>vwm;o*GlMK!&_@7 za83fQyWX?Gfk1R@l>e8wpEjS_i#ty^Ut*CxS9R2^(OiNjeLTj2MAI=ycs5mAWgf|T z(R}Vw_6WL?3^&}2Bk@mUaNw&)4vl_+wcMgIN1*jr32&^{_<7R-%ULViG2eXwZVAU? z|E30K7m#n!zp>`>=8M_^)3FEg44tFhRUjznS)eQ+6d+h1ja~Idc1A*jeT$9$3s@`L zq<@R|4p;G`o`H^e)=}m~I2A9eEH_lE+@a?J;rN4fuiXbftJQ(!ky8mrCPgTr^G= z+SS`Zu#Pv^Hnzbp>AUMc8tjJV#(L%>mTUIo?&-e2LgQmEQWQuty{2zsedT%JNjJh& z<}WZPO)6Mk&`Y;iw*)v2TQyfz1le$LrSKAaB|}5$L1+!uN)@;TmwV2;rrM5KTAHGU zkA{;t5xA6>O(aXi^3wLgHPri`e?a&_tZKS@{sd_beE@JHPYJpJo3ajM@fM*pl#KDT zO2}&5LgpeSrBeAyGEj6C*i0kotH`%=;`Fq5aY*1NyAcQ9*2+A?*b^ubw<-rhg6$8W zrQfl%v0ZYpylsO0Bbj7%IGdEy|7G^(SBQwRTFUOoQ8WOFle)T~_7HXs9Rt>l?#g=d zA>yw53>#zkDH6i`%+ADcV3}|9^>h;)&#g4zI4s9!;r{>!=&q4r-e7rP+iq95ulg1S zb+O+Qy6i1NRqA_2e@+B=6o+LyluuM<*hv<^*>_aIXzg>fQgaY?I_JfQ1;6utWiAI} zK|b>+A&KQe`+XhV^&A9y8O$?Ao6Z}18mr-H<26&tRL6F~QPsWL>kPUh-{S?@9{CHf zW$Vh72o^z(V!g7ix&c}R>!T|H6K*{q^<0N;(*;#C*&@+Jel5;)#&GhWTq4bZT+46X zxvrV^mtb}6f$xP>WO-$_vZ29j+y|`CLw2&~zIRKoGFqOh%*BayX*Zb%xle?hA-C8X znlxQCr!*(fome4Ogg(`DL#6?3s90(i_TecwJjOMkxAw`9QbVI7f;&9Vonm`?%NyWP zY=r#fb;$PKGORVyECtq1&aCU6uUp6;@0?Z=PE!UmdAw%Alw_}>m-;pGH+l=qo68D5 zYYVX@*hbC2>L~Q!WkLfuJxYwkE(1^LUVNLe zwPk|MX6xsQdG`6y$g=qE)SG-Aa$O*jGWiuk6L2-^srn-KP=RizE`%Kc>cu0pyXKr4 z*p!l=MN>EpnXM=X2oo~Q_=WJdz$^C{$52aG^Je^SLr48meg8@!WfNVZ!%S8#wc zibbU^A$7=hNga*83KjdNySh5Y*yfv>8A}a)3>>`_lIf#>-n!G$#4+0S$a^oiE;>8q z&)y()1u|0`!BlZO8C6k319@Rc+#&^sz)(xZra|VmpQ5#lDPah1u|e-mJ(ByF`Wk;3 zlKMY+3!T3?bhdA%e~hny7GS~a8o!uQ=4BSW-R1lptn-&b)Yzybp1n$rQfn|*0DE{V z5Yk2~t0Sf89jrH`nN-kj`V*d!fcm*&gsg|?9#6>TK%+mNd!CR-#|2ya%3US4wUBRE z47snHm3x5^yUQRpcQT*1s-1=2hrWXmQoM2IV!ki=Eo}l@#NR2jLH=?i+|Pg0On^LW z1mkL(p(&&u@|)tj{GPbG@I9EJUeGR*{>z_DsbgSs3w#0dUjR%iFO1`$(RKhFi9f;a z^9q=|iyYk?X77Rk8YxRY%eElaq7Gzs;V%^7(%bSIY7cq_&hB${2Xrs6*SdtJ9SU1} z#WU$yfsa#_Sxn6nin7%c*JHJU+kJhZ5j4W~*xbmp&p6v?#&_dOjMdCPnUC6a&gZ~u zc^ViTeF^E|wuJAL)?jO&A~3?ax25tgWdNa~C$*QgYanmE9sE=8kv+<_@>ej4C9$4U z8<4N1za_fIUc()FE%3Mq_EXj~=4PfkIK{XQy8KxkaUP*1~Nx;4!y4B6}aGQ_!xd8)ij4yUFD}mbNLV1XKDM$MfsP>SJ5^h zj<1Smjs3PIU{2wU4fBD$H{Y<(*vBNdOti_I4cru8_0XH>&&h)9Ai{6tHT2VPI#G&t zN=@>lvJ4@kn;|)az%w`y+X|$JGG#4UMp7S|8=Dzts3c->HkOzZDG3UESts9i#LUF^ z7>4Wrtdvxq(NpoJ#)al-w)f5lp0|PV(c6jdnWcn@)Mm_KoX;XMbku38X$VJC9Tj5J zv_$B-bOwI%NjNJO%PxzX3-)okG0#zmL|^7i@>7HtGW)i>hB^Ya0N7$4L$@iS?`~KP zUz0arLiuVdaufYmfqMEmc`45!H=$G6`-I!XQx(fq%hg{rEg%`wcP(+o-Dp_o=G|6kRbk8Xd3xP0>bLAvn*O#n?!G zm+PD^jcpA-fYf4jr^MRCau@Fn@5G3q)Q~oGhHkgTa?47A7FfprFkBx0C*{b#A`hmb ztXEtq*ki*$w^6D!s7qsq=kRwRq)kPcnsvY_)X1cw`@HLH8|@EL&HUfM2Pp}4@?CS~ zZFchke1_qo{&MAoib47*`k8oV(+1lSXIIZ)a2?HvkA=$RaqxOg*W=;-a}5dt+}r^wbFPyBY@#~?V0*^dT92;zL%X8B>Qya)Jodynn7t=S> zAlpS-nd_N5?*9?~7*D3i`PJmfjK}P4e23(Te6aEiG649OmAWGBN9}Q47pyJXK^<2v zlLkZxw>GPcHUhqd`;zTquR;yI3*Cq9-@q6XF`hAW!1ab=+=YKPHMI=2F`YlVW6*4B zA3K{&WYUD`lz-^2Snc>>VNF>>#V*wl%}j87j?~T4LOTze1dZIuz)dOv9+#VQmLa09 z&-co9iGL0)^{;fB9p$!iivXI7mkcu?TXxUz3-HlCL*rBBl6YSG8-(vAe@_h}NT_WY z=Qw=?^(38SEtPZBVa;1~BSy!bLuYO|wi2C#T#>hx4-viL+kg=Jiu{SNFi`g-^}d>U+sO}6t6pGO(UhnVrnK&^z z;U3OM##!oHV(;vUI5{>t)XZ1iwH79^6{Z2k_V|2#2LsIz$KQdqAOcOvZ|7N~fd~6pxhik^V53 zc?oZlUv)H0j&{?WP!%XjWfMgWxYgJL=>~Ffo|b+b(}oxO&2Echfi(LJHJqplNo@fD+HGAGfb%Kgk8iu8Y?6M z`YFFi9|@=M>anH*H*!?IMIF7;2lZx!U%Fkij=ziB zkKPkz)-y9$qFQ)aU>R8d4%-@;+n9aE4e%S+8Ri+5;>%55OA6+GJ;4#QAZ$w%WCHow zlw!tC_V2vU;#Ja8WozIxuhQ0reEkk>H|)LU5OPmFR+2X(>s1E zTqRKIFOVtU8G0ICn^=}|+g4{aZ_~h#NV~+ej4^Masu`0w&4qWw z8|90XDfMJvMcjj|^)Brnn)~QGWRUuyoFE%2=J82f6QeElJn5J0mQ?N7l0XHtbzJt& zHkoM*zQb@(Kdchb!#Upc4!TWy9Wz}{-^j2Lj2nXdWJ;W&~E-yb;{zRACOMm6C2}$0nP`CWq4AJ#M{yfn|p2y79fClfeuP z!%hYx?lK;>G__})^Sw($H{!2S+lE0h_muv4?txcqD60c8%|Z?d@1#C=ayNHlHz$1-inYm3N^5c;E2R*vIO% zjdeBj4GArcK1kVfO7am}1zW=3BofHaDZ8oap~YA+Hc;0A*fVKx7I@UP6nEffb&7w4 zbD4RWT8B6;_ar$k_GhStzrAO&vpsMMXP7qNBk}tBmHNT@w4sV=mANnYF&#j9TNb&N z*q3cb+(NI)-o@W7#-&>2a`jqhcE8641F5I3?lIaL==D8R)nr>F1i=x`H>QOe2gj8$ zxhA$V+%z!GJ>9j~_R2cZd=I}5KdmzT9N^HJjLR%>TU{r~>j^B5bWW_#J|S$N-DOVT zrbY854VAsr6EqLOc0|?9DL4T?uT7deh(ozcu8=qc>wq$TnRbDAExRUlA!ZBS4qWl9 zbDp+uwJZmA*<9RjIH@0xn~gPapZS=L>DukZ{X@d`_{L1H{GZevtV^73LLIO|D^(SFQ>4|+k+zr?Lv_UkwY96YpRjST zaWl)$NM;EAJU7!#OB0{xO48wIJUl1x7qFR#aM$S$J+OYpeb6$D7^WK!8Bdx=+WI+8 zc|yLbu&aoq&gUc~5uL{AB6ub~tPrT$Au2Sj{R$40t_2<7|1%tIh_q8qkTw<_=21D{ zXfn#g+`Htf*zm}MKu_NR=$hp$cT9HU3Ls#v$9Ld^OzlmhEz|9-oufQT|D5o;Sb1t$ zo=5Hj-kUkRuA-;18mbEQU2K9*Uf5W7TGv;5ReJ_&f;3k3l&uz%1$8*z86-$r|48xT zpCaYZgYW5lWv{Revixj51&rp|Fqh*Qt>zil0oLQrKJID0iNREal1gR~(r#LsMdlmD z4k;H>e>G7NHdb4ptEE-wY}k3!qVg-BN)Lzw{My_tjIWd@gt6&ki4&0?!Ij>3(4={7 znP{nIyacC{>fjiBhYx_}>U8T_hs;g(`-85SKQ%ME7YuM?z**2sG)A^x!B>|f-+-jM zQQK5|9-E1s(p*7atL%_amJ5I5)n+uJ)&P#xkz~(kt3YQz&HW2lUH6%j#?JU|Y-e6>`EIAWyZMmt_UPJ_CmRHYvWwM}H%{10`c=_bHC?k>a}Dk}gS9+p6n6mM zV;iMk)>VQF8gT<)+#r)0m8b#!QwuciBleYx$Fsix@)9@X!}+vqzRS*B-3hozT& zsOwkXgkU6k1@3HY5`o^5*^akS;0M~!YgHZ13apnlhz4K}Cf3C?8lVKC%}??WHc4=!A98ND2o0%l`F%-5+>obY&u6Y9oAV#iyW-o!tiS}%CT9a1 z7uuLx@B+hfgFt^)@5HwlW#+2(k4}%bV{leve$t<25~GyuOb7d*zy(C3KFSW7ahkDM zIds4pK%;FTTB`A@FDpC9whNo{YjNu{wo}d#D49NSEP5gMpQn#=xb3y&mhm!tpV}Hs zaB>)jFEc63RqW%ObG#h`ouadn=QB=1OX?=ZM$S`yT0BukRP|L~)eHe1sR#H61L1tq zT{B2MSBc8+i#PMHusg6AR05$mgU2PX?_Li!yE(8~9cvnjk2GA;i-6U91LiY*ET?T# zoNK&0eBZ*t#Mg8^_=bF=%Q`n65saKaF*J?TeiR(L<(CSR6oN|2mjYpZmw%1JIma!Ad}uGzAfD@ zzne4`tRACy&qM=c_Z6#wG1U(EPi=sJ*#Z2U4$V5GNR^NWC22v5n_w=Xbs?EDOOsC` zkAqbIa;L#|!qOR7DsqEPpVGh4mm5vSQRb__JRR!2;yV!z$JVD>=O~mN^y#df{NF@Y z>2XChl>)f|*{r*e6+fnXgzZ3Is`^8p?WVY%;1YWi^DIR|Y@ZpP=n=UPI_TTwYV25T zePrrxI*%X0&jIOwBHjbcl1D5LZ4-ggb0OF`S~Yb)`#14lT8#Oe#}Lw$ahE?W0vriz-V_1$A8wlru{JWD=`d)J=+2OQQT!Jv$V49 zba(MRgOglks&A$nNk?;n3&SaVFCH#$qkNz?XpHC|*Z}PlY$Oo!-@+Vrnxdg}qG%;Q z!Lcw{R9^m0IuY}QNBSFp@460rZS{D_u)uJ*a-qI6(9-*xD=atd4c$6#)nM=FvxFx?$U17_0o3LPC<)df7?Ull-?6>5fV5i`Vev?zc;Op zw+K!14|W$h+JV=MZ){~a0WKG|!D2XS91S+k_KvF1=f?tq*uZ!$bBPcnAA~H^W8OGX zZyBPf23@oHSQKld>!O_kvw&}CL~VuN2ub4L-{6$eeOyuvks5q{MzukyW8x}CLy@HLyNl=cPqtRibJvB z?(Xhd+})u-lHHkgch~RyzN`N?SF-HP`=0YW_uY*?h0G$12Od}d$eX|;Pt5Va#w~B6 zD*YYUbhpuhuT5!^UKJkU@8U=qyU6nhH!{qmI9e8b43^I~_BGaGup}C=LPH4{oBCp# zO|#6ithF7poVf2*z#NUGn&q?Pnsg7RI`4=0x~xPg&^$rf1Lti&s?rN|ENHG4sZS{x zvNAY1JZJA^{zh9(^klvycSgsDv%X`l1CA>&;b&kn*yNpsv*KK12D@ikVG%jjx?1_G zg@(oRDMj8-+DaeHs?Q%T{w!^;SOVVh3CI_uDV$0@+GR){d8&58B&)SVDXhi&!XnTL zNr!T86Z2!2f(ajZq8&a-N}VW439%O7A@i~`elQ&sC5M;}jL|JBg8Sl3i}7W}-l zFzY<;i}0l6o~)+o3a}}EA@6_r1nDxE;{oBF(>y_7GW#v8|a2)1i#u41}NR1uoz zZReV1?`Pd*;^BudHoT)60j;I7iEFxTJ>_iUdhZv7auE!&crS?-?o;hy1Zh1Qd2Zis&&t_T>x=>FrPH;|$4v9WNJGLrP0o{eh^*TMN z;HIvzwgMtkk5-gOcL>XPgP>J94mL-ube)7Q^3#6|GWDAv(c9U45zdNyn96~e#K^-x zm{(X^IPQ5~`e{*N;#NjUG*D(Tx4^fMDA@=6%ZVD5u9fzw{s8&_osKR<{?+nSqZIRH z-$bkVL)fzz_n}q#C>4sG2zLjTN>`WFHq6ot`ct0_q4F(Yc(`xeg_W91A-^`&J1@8* z@>_Cm=0CzBYMRlNJB`nkRFYOww9{-rv|2to513;8(N)?8+SR}}_DkzaR`5@9$jmR~ zQ+Y{-8$T9W<0pFgjt;iTmRh(KI^8Rc0xV?=;HPn)^%u;5#NNt*!{JPvoR$-Yk^iGT zV1MRa7sVub#UWJ<#HtPHcECO48~Q`r3cAD`RSdp`UHD5mMa=c&KwbtuRAJN-2)X_S zZe#;%)N~0ZC#{XGu^X5MmzXJ*P2gu6<7wwN2Fv0DAsKlEd@(4i6W=X5B0H;`rEZ7> zbc3ODeINF>Lv@P~p~eP&wtM1E!lmp4y(_gQ@n$BUD2?y}rV5N*nbm~$mOL@1Nm-&3!d3k>T^;Q8EH2YYtQGKi29~?ZgRs@PY?^3m z?WpV-?4J;hL|>+=!9;E@?Ib(Pm53ID;p)0#uzCgZ9qyec!JD=P&1n0;n`*b5A-yM1 z@MJ6=jY4XX1%gg=M9>JX$F#k!wT@{7J{)_9Z8UrX9@i=0qiJj#9Z%fF{$yxU)RoL< zw~-D3d$<;7fG{FiCqJTcYTjxky6O5;`feywe@ZtMS+B0H*d?ngsK;Zl)zqpaP1c*N z8(ST04%7e>Bpl|NdjffHm2nB2tG|M4x2@S^(Kx?35BbUhZ6e1KyVBQ)F-i&Z8)v;B zCHW{J zKMQZF-_Vx2j7FiZtvCp-BdVYVG!aasTloPgWg;Cq=zr+WI=Qym=7FYJ_*Y{K;ODF` z(!lF+!fdvkcMkR)3#^G0BW;Nmj1R?Pm*+$hG)f3>QKZY*xWq79GI-7bM zOndFprQ*N%EN+;wnp~6cF*PsID7|9!28!)v=iKE zKh<-Q0lH)8Q+PIxL9^O4xb3>Aw#vFnq{1-g4%0)~N)TjQCL70k0!_ERbC;b2^9COF z2u{2QfxLGc{0^9B_ec|=6BZxe?ib%P@yi6@0wz$Wuyd>Fi;{>NKLVhyns!0ixXvy9d8uBNWm8IGXa=baJu z#ZD%_WXBNS(?+rSa~BAENXE-It77Wz(Cr?mcYwpN7^P@$YU-+cDMkPZXb5EMyV3iR z#ktYx-(m}c0q-_9&)L{o*PH}O;b!AV<7=!IrpEW0$6EI~+Pfct1(zJHo?M(gPTWd$ zF}R#DLK#rsZ>pMsId(qG_@CoutTd%3D-mVxXeJYyHn+i~+C~Y9dElAr3099dyQQ$1XtM0IVxaPxMhpA&)o3%c zoqiysJWIe0K2>fP5d}f^1X?Q+FMlV!08B1c|6@1HK?mNn%-j_h8uuD+LMm&PsmR>M z+7FUnTCXw?3*L==O`Rk-$b7~e7EQ1Wenw?=Wh9LJhi1^U{v&KxSL-GqsCt>=m9)CJ z6%S!gVsI%^;+S+iu_6);%=2z=7D0L@Y;K9Sg3qIa!E3k+6XllXQMRmomb=hzhzvI}$p@?cLWaZh{ZDigdRCXvvbE>bqg1QpmnAm^MZ7J{a*BfR zE?Xy2HBvoL;?6tG))MnfQyc6Y(ByK)Kd};gw0XFd=osuGdk*_p;fpb7bLC4(7iha# zBY1y{CQ4^2&#M0gv#SWc9e?Y|`YmWPm@bBuX=y)kPeFIipNxqV6G52imN*g_66o${ zx@$NNz)$IcU&MQ3e;fXSq{CTgx`?cC`!)9wU$+n^ekwIBPb2SS{NRiP((PNRQ%O;; z0g8i5D@AX^J-s=w%WkQ=sdDnxlAAyz?Z_TN>qdN(Rj1m-9>AtzH{3m&STMXIo(9h@ z1$-__?3}5NWu@)0nn_kEr5B)mb+SZf2SNZ`)~uScrD z`}PCj6ZJiFGrNSp4d~npl;Q6gRvzBB_RPf8 zy~vo*NXRW7vtPFrT2`7?;yKuVtpKm&Bz%VXr8#7yyGYgUc*vr(W59 zS?b}_!MJ+2d^R}w#$r40!s|?1!95cd5TkWLb1#>S%r|xhws5XsCNc5}3XZ(dLEk{%4t)fD;(s)sp%e6nWPso? z`!1sz_3wQ9G$Emk^bLr8y_{REe_6=pCcuJTVQ6eD!FpkxOod<|w>zkwBLAcCoG3R% zBlM@NhSTCxzC`qg)Sy_e<{-6z!v70s|FzNfK%1(Cd{ahb|4H5mzj4km?o+n`L-}Ze z9yJ8EdjED=?NRd_b2~U=5sWRdall|(gjKWbvb}c>^{@i-L$~6aQ-!(bq-C_Rkdi9` z^YLHuQR?-YLP+_&)~|tcTs!nSGF4MeeOUfe+)D72t7rb8_9O4iYJtNq3)S@{oeuj! z%LtR$)WLY#m^26sG>m0hWrBvfW4D{*{}FOUYNqDq>X1IsR` zPB#;N#y3=_zl#jhtWiR8S;`h(=RW*@Tl2Dvp5j~XbluHt3(iF^@oEbu~%&S24sc z;9oC6L6+7Og}FG(MjJ~i%iaf$)%swmU+r$_xM-bXVdHWw4Vxj%Lxt+Hr9Ae60K~YcAQtZ^c&ASCU`nKc}w6 zWYOAzD&8YbgY}Vlx2X%5|H431seui`em5^NzlW{;5Ko(+DN-Z3G9AxC+94tTrQpx>cI^9op52`Mg`!{5TzF>h1m=cDQ6@mdjHV4WxH^n&>~ zhabm&8Xp+)#+G<(d>TFjk}XnaKktyhq41PM!?Y`RnS2v?)3?D%^HS1Y83pgnbzokc zM?302=)M8Td<`_(Qqm!k%lt#^g$z688R28*YOHzWhX1*j>Dp*NVmWGlX?%t~H9guR!$iSJinM09^@Qa%j+ zo^G5k+>YXFQnm7LbwABa?P`>PZqk0yzSnXQhia=rAg>`)3LkN2vIfy;#P&G~7_M3b zEBPL~`r2fcFE|kriv>odfn&^KO-zGK72)&f?7il%9BLa&rjBKg5Lwi5Oao6YXe^m4 zZ>JP#=sJ_`vHtG@wtg%a3^8O0Fg7(3r-09`!NRHAiA%Fw*n4_IxbM5WmxE}FS>&c& zSm$yfcFFM0sKO?j2U!2L)7=MsGa#XSIkhC)5lDznSogU*MBgPF@_a>~}1T3yMy6RdnoPdsLD9Ty#xVWz1IQJoAGNoaDV#XgE9IhC+ z<5}+5YHMj8j+X&vu@0Q9F>n^B%#AET>vd;;@1Vey@QBz{U=kp}N9)7k^XG}BaI*G7 z_I&{Gj9lF1=|M4ezV&SI>gJ}3N^*_Id;trD#4UGL;N+M2IpCB}`$ zo#l^!HIJ9GFve|QguiXLZM=rZP1US5Ad{u>_Xzo8Ka(Zd6GRbh9b*r) ze3Ovz9H-iXIJDDsZT08%jr9w4pR|)TwN!e=4{>!-WnNq6D~ga*oZFC^8tW0}2KKmq zIp$dd@J^o!sep@ysm3wJZW!I9wzaYkcQ^8-gV$rK^s}s=D5HO7w&St{=fT=E4vg?; z;RJM7=hUA-4Z5thGV)cuTUiU?=dR2AsE91b}+zjvZgRn*T z2H(QF3ZLw_XgZkfhtb=UPv={vHpSkBP2Ni`t+Sb}lW8qp37Z6d&ts5lVc`?Zogm@R z&sps4=nqCd#LLr_2pRGadRtCEVPA<*K2~`YA!y&CXHWs`Z=Kp=aK}>B6h(DuQ&E8T zp52b2qjV=UOV3F-!fgUt_gBYHFpf#_j#vOrCrUVFWiT2{1KdDwJ?DMu?-cnbo=*So zwAh?6g|$g=S3FJrMmZI{#~0y*h3akkU+4))o$OGD!R0$hR8JsdkD>)gWOz^2ODvAm z3M_`kGS|M;vKH87_rPkl#83n&ej-k{1Z-Cv4)kz20AvcCWT11)z#Y;W zI|irH23Sw*7(T}G!*bQJ3-~iLTn33wF z^@RcMd{%&FAUd-9lZl8aJk$Hhm9=>-A50mrznuc&;!SX%^u>y-b!-Jrviq6ukKow2 zDfKZ&qr9XRv)l0=3TjBKvWBYfnpN6&XdhtKUD1bieYI88E+ajwS{0{fPx!MT$mrb+%h%zdXd4#=Na7O9|zw$QqP}ou| zf>~Ba{W`R|t`r%n5-4@jj>6`=0@gF?O46d-AF1=vtC8XUDIV0h$v)pQ3Ez!vHC#7T z1iQ|Dyp5S*tz$<$&HVQQ!=tq1u*_ScmNu2qk^79lKvG|}Pf13i8eF?k-vS7+cj1jl z)Tz|tluP9_@iX2T=0EgNqz}2tskd=bs9Hegz38lEKWx1OXX}ITmMSqUfjjO&Tw;yb z_|C1KV}Uu5?MXp4Oc+9a%RI-qEieHAytT5nYPg1}9R-u|8R!Z0oQ{N?(iAGk$g7Hf z@kQ*d^oy_qyOzER{E<`sf$)1Yx9_&tOxJNCr18!fAHp;1Gq&Bl26E6TZ?!<@$gqSX zbtxaGEMefByMh9k1}svRtEXw+z?tD1x?Hyx7_L<4t-ez_WwXVV1po61Y@~D}9!SrN zSBe}Bd~$De-mo@@9?kDywhseYYz4L#HtMU*f7stS2YS-p?V+7O0PmWc5824x?Aii{ zXpMZ9vOiLW7M#vRE@-sRL`%6k%0fF`Rn;B>u`gi9e6%gO%KqoCWqt z=2>PGyK6iF^F@Qv1}Xmi);YF8u3DZ*KpZZK2UEPX=tFUT@o zMd#@I6^ur!>FD4%@2c(uJ%Npa3fu^@HtizuzfAX3rKlmO@+n+>?9a?iO;g~x7&GMH zY`q)Ln|7ODTP2Q49)iykTo==%`@x;N=Cs)VH14N(6eaU{vdcsr+&%{DQE5l>MW#cyJ{w=dv z94p-@+&u}gnki`xgH7}T=2oDiiKLgnU`W*T)UAT4-&VAjezcwiuQVR)r(%-n!VcUy z%o!9rv30IOvS##pXuj{4dyd0sRa+FM4mcS)hAoV0<0H7UsV#qiFVE?vg_g%|Bxht# z5rwoA%gJdf7$$xuzpgx^xeDj^1k5!0!G02MAuw5_CMeag(HRK;Yy*vQDK(Dz`sK!5*k{~Djl_sXXT zr2UnHeZ#r1Fgh=`EOj=0HoF$s5Wi6_)8{j5v&V9_a%=J~3kHaGi!O-ek~5-hBAF=8 zFXFA`&S0-&)}&Xb;-vApTy{jdaY7S27oHdj`5nGLy?eYS*9rG|S0(p+kILKIH!{#Z z=nHj^S>oR0KiSTCF8MNL6TLcc6}Ir-2pS7-ibqPeNb5^gGMV(Ylpw7wo+bRoH*n9g zt}_9MX5{639+`;F1MvML9_rcmem6{gf9J1jQwVP`*_rlmw9c-KfSw9D7qD|3AX?$!xwbL)0X4=ZjZ+50+PISsDuzJ0+8(FXC(>6N*w#MazQBKF_;r+InvVng>*+?P)rS8 z@z!(M9F=TSfL~r4zkny;VIf0*yBtFnEP6WW44qbTSTlxKgi+oABu-d>p(w;1Kj;}`cVaE z3!ebxWR7khc*oO9yKI_dICnK`Iei-GLT*9wPIPh5=KbU>whuLH@GIrR%4U|WD0}m( zU0F-RE<;U8V-zGG*FwQND|Db*E{k7v)%GV0tY+wKUZ}YEjWfkxl z*4@rpK1Q@>Vga}#rZM;Peu`7d2(kj*QM9HaUS(O;Yt@HUn_Qh(?QzX5HU6xzwAx>l zmK7f;aA}Vyo{5`t?=xSK&Vt>F6I$hJYs0~#9sM=tJL{X{bJNdTK8^WI`Ih~T|JR_5 zg?+aW+$=bcHcu&tdTMJHSFm zW>Sf5kqk_Jo;tQ#C&Is9qG3_llCmjfBg^+1ZW*Jv*E|>Af}MSXf^%aZQg3nzm|Iq3 zu?5#f6QqC3$Ew?CCm_3ZUv%?f@6}h^4;iVRuV@Snv-`s#R-cuw~{X+eM5b{ z!#$N;G5aoS4QQ>tuuQRRgq`h9+cbyYwZya4H#0aqawPswT9ZqYuFw`Sk21}`4IBZ_ ztiICwvVgpzGN}m5&&sY!eG;`~oajC81gDr)NM};NLW9Pe9+(QmpGF>sW(N2ALD1rD z;9lu^caT$!?F!nuZoJEXs3*rLiNW#1k?mncXnRl<%=-v| z_P$E~bH0ClvjS-7P>2&*5&aUo7C)8zoDSx6g#N?`IZPQ%r!b$ePqK}ioBTrl4Z$!W zUo=Z-5wsN&Mb-J^_)oY$*afUx^qRC$`)3-O}@i-yZlQ{4hKOc5PT{O;$<#lN_O}WmII9aG8Rjz$F|YUMKq`KMZc7 z5Ar|dO{C2wZ1EtWk^hquW!|QbqD&*!%CAnHN!*IA3t@r5-gS`0yk;NZxM00$xo%xz z;o3*psE$T1nXgwM6xtnolk{h65_^#O%ysN3&<)xs4JcMAqbk0(D>6j;9g%4(X#P~o zz$NiTf{Lm9#xOytNoM61!)~%PI3M!88OJ%xR#S7B%SjB?%8X?L4ATv3@p+a@)`t$A z_fnuiOrHv5+LLC}pRjiF1(IK~3*cW^h&C;}Q?#S#K!vfzw~BTZn$Zfn*Q&HUBL2kR z%{l|jta<60F=+_*jIv*{u<$PBdrM_M=lwVAhy1@bKTChMD4kTk4bxgGIA~sXh!#JU z8BQ#r$GP)h-s@7g*Bvi-Up%nlrYifYe5pF9YLCkGDshT87gW*4XlsZ~b9kZ&Y`P15 z8(k^eE6XEO1$+Y5!tljNHa>yx$YfJfaFa}N`+c$CX>ftv&pjmiX}>Y|gBP=^WV)<{ zVzhF+MvA~BR{H?>4Va3pssN4Bv*IQKCT}21OkYnfA*{a((V=?y%UnwjR$0Q@$(&Kt(@!R(4)|N7#|Skh7U(rWKH%5#DAFCBH{%MoRqqfSa`6G01MWx-B{L zaPtN8CX3E?8KxQ!U7J0Z{h83FSjCh)JD&J~+KO?7#73C({sIs6 z8!#kRv@FDLW2^95SORMR4BDXOjJ=t=u6Jx89iALto9>>QLTV0-aWCg7qz{_Oj>x*G zHmSa-I%+;@7|2@n6D33OQ955D7CL!*)Q*MRTz2 zgRDVo&f>TBv7NNfcgS3CJ@m6;+Y+mWAYY#ah)d zRR~Cel~hNR^^`?2RC*IA4wbo=SV~4y%0a@`Or^xUmoclwdl75$MhD69otqzsyFX_F&m;az0 zt{JIuD~8CfiSBSauxilqgt6HwsRfauKwHmv$4zU{^vgKI(57r(X`|A@(qX_gx`!oA zhb$ePw>_0Y)cDf0jF5r9*8tuJQDd-(?nmyR4GU^l&{pVBab>Z&0=Z~~elr@?3{hMZ zuM>3RETEq!EyyfP1VfwrJl6=@I#U)H`9ty3kb>S}>})K?@8G8_Er9j5(_I!g8ZL{k zOfMvuNJhpb)=%C{psIdWY*#JRBoHDnPFkR~^^2gp%-76Q9hcn@mkE|bzpxLLM$BcF zCYD8vfjjP@u3?V3*2?A$*mvW2%x~BX{gZMa6mGGlovYoueWOAbV~>-WY%5X$tq$Z! zM}kr5I7}SAAmg+=eG0n72lZ-QFKrv7NcE3A3*YtH+%&5JZ2_@j_CAoZ2!U$8k*@Fd z5nye43-{*{hHvGY40hur(;;)fTIl%YYUwiu`^N04%GoKTVYD8sjXaKMxAe3^pbn@% zAS-n)=p(Gu)AbDKxr|m_lGCIUgjr4%)-&2qV$1A(xKAB`Q}%1uN&5xs95eO*cf@-P zuQ8Lcn`w`Eq_vxUw8!eL8hR4@l>CyrNAl3RF?;ZOi2jr|Qas~^h_%EY3PJO^tm?IHPj?ojGbbUkb;JnpV8f_<&|0;a$>8jHX}9>k_&Z_EkH zMB9FMJD(=_Gja#sPd4I4s*06m&lHNpkLAsj9W>*RpTPf~tnY}ng>EzpL4Z*>U3y70 zoM&O0Xm`oJ?Dq7fSnrV7H_uZ8XcR9jX}l@4D&9gXuY<7+duy6!`D&xMh2E}#713&O zapo4`2jv`n45x%|6Hk&;Rgb|$y%&9t*3_>D7tsMA8qH8OQbc9lMK5`0nTP4k$v5+b znW1q{XsX}hdFa?|+hlg&4l3hgT)-w{ z;qo3v%=pq6G&Qk~g}c>ykK2DHtV=Y_u=2OayBM?CKlybe2V}dH$5lS$19D%t3mt;~ zjc$ZqW)H~D$YcufPQg3QSmq!qlaR_xO`eWi4%GHtbBgR0Ex(zGrtZ+(Xol6nj)PHP zw512Qb)LBc-b3O2u}|q5`TC?htpRk+s)*jpNXnhyi&>~+LHpzh%mTKecfmhCNX3_b z7ZHRc?g_?w%3b1b*^0@^QFVaf^8;fuV(EnE@S27iMVcz4x zz0t?1=7d6u6WUX&_~nufihosW!L-^Hp74sorUjP@RzV)`Gw@oJkdl+}C$Q_#ZKT3n zn^f1BDb&N)(LEC^bIUCKOd-4(wiZLdc61RRYewv?oc&xJza{u*gqkSH2=W2)8Jdap ziZ@qyM)F8@N&b&&k>;kRjW(!#scDYXRO{6*fB}6>JXkQ3JBoFMhLOJHh3Nr_9g&v7 zVct9L$@Wv$UzUyd8OYf4AfGc0A84*&-e8;HPkRD|lHDM-QQ&k=rVXVy@(lpee`8s6qK7|2Ub9d<$^B38&Xu*`mM> zmRB$P8wi4p%Pr+gjlZyBaIU^}oc1>i8Dl5Y7xPQWqZuO3IKgMpcG(nFu_lS6!QhNT z>gzJ}TpDTrQfn1`G8%%pl zENeyEHOFzsI`6=M0eS*|C-0=Y5Z997iOPJ*Ya;kAPDsZq?x`-STk7J-U8IigvbLFK zy1Iix3brGLU@CVA*xF~2+U2szCDDsPxxc4-5iq|ZrYtlnN(^g&eqb{+!i({5mbA?V zi;It;k|-sOXPqQBeIuv3@S^0DTn>KPU)t6{Jk=CFDjZtiKugg#$aK|8`882hK?5#} zwusa)-zjMXD!0H_-#OG4wv5J4Vutc#27CFV@=-B;sBf;tbH01~ZVcL?bNmd}~8t>WH%3hNJAe-bzUJ{67j3pexia8jYq*2J{V zFuPn`ez&}T* zcmbjCntnF=LVZX1Q(7u!3wE++GWrnp`N}D2G!@w9-Q!y17-M~GD#l*|d+)q)rV&or zrhcY{R=V?qXRuEfoD=PvG-Ub`djVnUIJ+Bnl1MDBDF3BgsD7r&Xnr88v^H&9%{TQP zl|ivYdQd!^4^0|IGn$ti&n`@#ixHz4NVc?dpLM*jvaO5FLC9;Uu*#Sd8f|N=hrxoo z)XNWy4*d~-k$#)MPC5jZprm*vOfSQlR@xZ4QNOI<2bu)JR5vY6(@CC|H4-ZX7ugl* zm&xn$f2I$`A4ci~$9eyAwX>fDzw&dF7aS7BrT{k7v<5O+U2T`0ZM;E$jZp2VG}$NH zk~oX(v|d1nnz%YT+1EDw||gd52S*ihATlz5s4I!4bgI}> zj;rp5esySg>_PIsteaSc(t=rs(+zy6CDN2Up=hhlt2b&NL6>m?QeS&p^{)yCx?fLm zRl!!y3&v#{f!HN~E?F&J5}M(!3%jGYme-~)_!Hx5Lp7|iF>6?k)yAKjkJz@jCit5N zYe##->Et?TFKrR4A)h44%Z@9)YL@D16$~#tTiCF0N#U{rp{^=&N!d_FmvrW@<&35C zDLeu@T@bGtMtlZ$W5*ws-KN3NGGiKh7%mv(*i?L^`G>WOv!`pIzh0)X zAN@*C*jdvy)>2~LjeP?S2^R;WHnecNTdUf3Lc=ic{~qZV7iDe|>r%4}8h56^3@lxe z`mI*2KZ3q4Xi^j}tW(e!b}moBMcr7c2Ulq!^CG2?I5YD(J|^5X(Am=mnr2N+6w`A9 zZulJ-Cl}zSbir?0URb5BiEzfM6t;lX>_hGg*-f{?^!h1uqC3g^tCj-4b%k~(bZ=GK z7075!vHGsORF)Fe5cK34nBT!l+&Mor&5LgV-?h{G1KgP7t<5c)@WGJtEWx_r1MxAY zXXehZ!ENN#`}c$m@u%qpc_X1DyzT4MBueJ%)8Bg&Dctr zM%b8LpS%qnt)HIDPNt)QS!jA}JZk7+7+OB5TmgxuBIw{AcLY4Q0*gcE<4rRI^5d!H z%n!UAutL8nKdHAOt-#sczMx}4T0aiVI?s@H>hX%B(!Agm*U$Jsoj^L3{g9X+Jsk9V z&$>_Ad)t(jz2xwd0{tKzAD?cUuSKd%tHN5%eJDHy zjn9xWr`oT*00hjYXe+cXIupT>R;p6PJn3~|W1gHfntF!VKD#xsGCC*V^E89L!(#JC zNd8324wRiJzgg}ve!-T5h3JIyfTvcld$?wzb+!?)3vD6uU+yKrd)YEYSLN@T7%~>R zK#%pMknFW1A2d#-OSVfkQ?QjgoE4!_DLr#n(~}Y#A|$X+Eq5JvF1AT69n5P?oA466 z6^;Of$c_Xx z(}ozLZeum$qQa%pddjz|awMu17j`XbP;j}R9&}e5A%7shDc1pU`U-b4^LMH}|0eY^ zF&IwP4%a-#VoS`t0$&GxARQ*b#v2~s1!j(QiY@5eMt)1X##+VS zBOpnDx2R~T8mGR9IJHxC&2%BnC4~l(!}m` zmw1PT@aWQ{7>ts=Xg?TY-ZH@yaYlYfSxs{iS){Fjj@5P5k#tsYVN_AAkynB?=2vbB zdmUo{`B45*CYx9r=^K3D<+%qtHd{F62XJB}fe(HzM!@@<-dY~o7C5(fEBOn;i{ckk zf9JcB{q)7`WBk<;ks_wlXg+BtLAPm){u%m8|4oM@%`|f5YRH2S1v++uR)tiO-;{F3 zu<(3;2loQ!Zd+B$C-Vecg%2@qz^-5%{I>bFrL$wZYqXaZ;758VR-|e9sbqvsVW+ub z;b%z)#V=^|Q?yrfYV@#f9$JiU0|U8QHC*P9^c4QVZNZ#Ey-YZkX_;6Sr3ZU^M>!0( zQRa{MJM5@oM|sFl-MGVe7{6;CV%_V^xX=3^!e_oV(}@ruH)0Is4(87nj{p*4Kz$53 zt=pnou3rVyvOYlL8mcZ*o(G~)E7&2S%oUVQ#J!nh;$C!IXpDcN`=aA_>rwN1(@$d@ za=m)27QP;TWUg*~Yj5Rx>HRlQKXx&h$P!6zaDz|fG9@=)R(%&trI)qc(HnX$(1%w- zB6hK6neve$C0;5x$vw-QNvS{>4x1_h_)yz>cRE@2p_bX^#=tHM8jcy0aPurN(JeyT zOqc*Y@Cn1CVvc0}`~%`Y)K<(9+@#F*Jq9h;p( zay7{fX?9j4o=GH?+*GL4FVvTjqp&etu3G`j$TH-R+Mx8x#!HS1>v3h!Dy<4k_L9_# z*t&2S?o+QF-E5t#Ys}vu7a26Bu(v=WIfT`O%=l^7SZ^lajBHEn%u0zPsf(Co?iay4 z>1p{6wHO(VCUg}c4>DihU;hSd?bp-?1lSzy%Sd~>m7i1i_)>xJIw!L^YS2}15T;S$9`FX70Ahs8~09h4K*pEQf$ zci04t&v)P_HX}UECY4$?LNZLyhb?6mQg?u#2TGgyFjfW1{S@6H< zjkBR`Uu5}Z<%6MQD7a(SCYae<#FNxQCdyqbjEkts393Fw4wZGr9^@>6qA zEma%`Ylwv3mHmy;kJ1NHx5wgdLtg^BJl)|Yve~l1)BqoY-81yTV#W=4U&|-!SRgv~ z^Av>Kk^d0{IfS?1A795g!o`FmWk=*u7!%USd7HfZ?$u$XZqXmi0nML`D z6fq;s-pO}~dPqZx0nl8Xj1=j50efaT^x)SZN;O+KME+R(RM3dmi1CKHiU0`g)EsbX zzx1AVPOy)){$?J84>KMy02x zt%@m_2L4r@H+C{@GR-r;vaWH=arg1B4&90VO5Vx-PTEXg%<9N16#Xk{qWq+~rFo{C zQef8+^;z9|9Z&aOb3k2BeqKTs5_un)gQ<;(vg}&;8ODIrD|LOg(yhf72gb)EzyN=N zzs8=JO3fRsGo5EVRRY^XV}bO~fj*m+RtL=XwS*_cZDbpiPR)N>mF^AN8{G#Poh90u z$U^lxd6`rq8o@uwR?@A6N7>FPa%@ttz!!5xZ40dXO#6%-v3Wo~7zkM=E!YIIme-Dr z?!Dg0p&RklDM`K_2?(*Q^W2Yuq0-*K$gikz0ySVbbam3Y!*GMHra7$arhFplAo_=Y z2~0=VNHYl0)ZDl`6oriEUg#_LG4o7xNUEMFuU6j9_y_*gv>bM<_uN4sfZvK9Nj}M( zAx@)*S!=mg;aKTRg#;*t)3jfqf!kK!QMX)2*VfUvl|vMdBm;yyxeoSynx8l`$IaA@ zF9;uiR%r|8RV!fYOcY2lF=1YI7Q2b{G1s!xv7dJu+&1E=B-my^+bpX#s)Eull3xM`XBuq=S)HGePDDqA=LdGURy+IKs+-rs>0~Z889oua zVHm!`)YWpyJ_f!aw*$WL#rTFyf8q{GJH}Z~3qc+6U>QM`Q+3w7(^i68`ZeJ7)&d$u zchw=qM98I6;N;MWSx!Ap=$~zyY#Lb!M56&N7IdQ3kh7kG-NFLpGYv&}ktq-S%Zl)~ zdf~^ztW>qkBf>SxWk|`j5{wZ)lBe4$?qIF#4^7Dpu5B=pD*zJWoZJR5 zvmN4$7VHwEiaIJboUdL%EAN!9KH5=xLwiuOPW4(*C_N+^BdEg3Fdfw1#2>ju$&;~6 zXpwh=r_^q-{sAtU3b++Gw0Dir$;3vPOqM_GDpz0M)372IPwdQ9Ctag$U^nKMiskZ{ z;<#onFes>n5&dhRQKWTT-B)!+>4E!gHU1rTALf2?GvbyEFL^0~1w-DQ9+hL6wVGv& zc?`Y`uZqvcuHi?p)n>2th27&i<4p!?MNTFqq<7hY$r+KLe~EXN^O9|#RSs@&7Id!F@G~@c7^Y08><)WZ&pz+T z@QG-jq&M@0u%0r5!Q^-Z77YYv{j| z9obUgqftUj{W_Rww6p~AJCGe7TK>CX91s^<;c3%<)_IUsUFzEzIu|_w@7un_5Un@! z4(GUlCQeGPD2ml!z|ab{?{vdZpSBas<30epW20OmZYP+}Q8J6DPC~B?B|ZzLi?EAu z%B{^!qw(*?*+xfs7x1Q4Foy9><{9?gF0W^FFcO}V?2~~_DK*XdhZhrchWX`n_P8|vfrOrvd`9Q8e81O3D66Dxp4&dw%JQJ^$?^K`B+}5nn-GL4m4Sdve zolD(TIZ@tO+E3Jp-;Bd$o}dmRe$Bi{{1!bQyx=|V_BpCp_gglaxW-CA>|JT_8sFis zOm=7rEOWK-Z3Nc;iqx|FVsd?EMVP)@#1`2x6-8szZq--TPb&DT|BhbOP13Xmf}mUW zw@Avb$yPF2QO@Mk>D%%9Fq8Y}tLUlfAlX)1X5x>*CvXD$0KKER_%Gs~>K z6|I!)oq0xFLH*8J&wDN^lUS9P)KuutG}JTE2$1E~=uSk8Oj3HK3DIc5F%Ahxw+`ad zbdO}6h#}a~H^#lsVYlwHXu!1VhQ8cx;|=gs5Y7MC?%V7xH&A+L(P;8iE<&t83o`ZG zE?~V0Dk`canxt;EE(`q=ziyn4qAOK@hTj7hlLSk-bAgJto8Zd4P0ozg35ost-2#}u z*Mw~3186)bjaQ6&@rx#+>6ImIAK>cZdmmaCy`4ChSpim8GRwg2B+N;#D;sH&Kmt+% zkAhKHL0?I~M!QaPM`czlmU#K=AxB!DN+z8Ldh1`&BcW3GTOF}awY@R5HIIho^*wm2 z*Tw3Zs#p$Kx7xS69(Wf8jz-0ae>2mFQz?Hl<=mFyB~p>%B={spf`|B_eo8?>K_z_& zJhzHfe1%VZUqIx|W&Wi8PM(%arZ}<5p%1?4p5u;DwuY8cQ(u?|04X0jzBNp(Ep2VB z?dzP4y&nUYBJ~rS(^rTNGQyb0*(*FN87%*#8mC#L{h`~UUsCX~;5isjy2Et*hy11F zs&Fh1;e4b$CC$t=O^uG(!%w~QT=nczY`3hHOhUMcoPeJFF1R5YOzo`(;OP$Xz7Ax< zMe!G@nS|ry-i(egFS{bzEPJ7>t68R9kG9r_;EwQ3r$k>PsOG6ED?cQ>&kM4i(`FOT z=H{lFLR)8{Z>1*;d+3Rl6Q+822DZ;kpwW^|Ueh^zFQp5~8Wt zllVDNPgygt#pr>AI1OE^ABDbzzuF7!LXAcBM8*}r*|EVKUy{y3md}e?snLW+)nO1G}Rtq~XA3n#^A$Tqs2q=TuXW zTiR;SAK!Z^d` zYOLw0xtHy42i>jlR||iR)=j1|9Z3Uey_i&9kUvfQQ~C=I;0si z;n@nAw5^~gcM`J!Sx%H?IN-e*8EoZQ>+ERlWbR{Zf!~9KQCc52Jj2Gr9{-%BwX=h} zzONwEFFHAKJL@GSsUsP)I0b?^;+wK+$|b5-nm>?wy3@c49fz*e_R)M-s+6^*_XPd9 zYk@0vmdHpSiysM}^Ivl1J6GClCbsD$mI8*uGH`)$;T-qf{L9+UvDnS@`e4c=O4P_~ zAbzJY8OPa+_$|d8*%pNd8d~GDN$6BO$Ug-f!J9}gReyPBsb4URJDFjjlSq{_jpM^3 zy#qJBF6Vfg-n`GmH$A{g@J9GdtPeE8j)RrBy}h4nlec?dF-$eM=|{O@@~XTqtl#v&(#gjAA$xo zmDGGiXW%VP;wFJYyPH&;ElzHT_7C-eUfwlliLJHe50k(o$IA2*u?N@#*dC2EH?>CL zZ0+`449<+nQoFL7AazaPOySGK52b%7&jGu>pZ1|{NPYksJ4?{!@a{b!e=gC8>v2D@ zj?i0^$%GK}9X5wI`QNykJFf#P%Wf*h&f^J#8=7;Cp;NQnbkOqC_S1REn+pn}Z54;GDanoK4xPEq1h zBTxMd-*ne6+c0Y_=*PZ;Ce0#!Eub1TfT>(D_@{QdYx@=ihDFyVmS)$I7t`yqhx1m6 zaM^gcO}UV-$luyR-6h>)bP@6d;i){bW765ep1jdOh;>oQ38u6!VTZ{{foGX>i~R@i zbY(!bE;H-_`tTHJ>>M|R&DHEjoKvAEP#SS2FXXn7Zso0G&EW~)@1au))CToc=&}t4 zf=(sq>NMAo)J_FKwnStU)a886n@PDse3(9v*b;dhQ29L2^ZjU*n3fu^!CWz4Uj?Wd z|C=g1Ob*)$XFE@wfFzcebmn;EmGs9f3;%CHKvGrF7B+1+!MpGhY<2+z1-fxf^+UxS z={M1JzLA|`B&c$tGpkCTi;{ypAKmlCma%*`^~1jyra?OAQ^iHSAIS2(EK_X@AwhmU zPzg9E^$FEUZ)qo)?RW~mS=(%S+Q2oP#ws>@@rdzWIJ&MHpjQY%6yVyjgz?y2P8(V~IXW{X8Rd)ISMt!OxhX zeu<1kPD0a+rn8`O?NxO@)i(JL@f-e7&Nx;v?FDIXMw)ydtrIEr>fLRfF6%1uUK4`X z$HfLO_7_b0{{?EmYU>EcW4FaOIam`iC--uPV5)I~-B&PEyk1&UHA6iH&7qrh1GSfR zX7Jff*WkeMq(bAfA$JO^4~4gWYOdHX>*zsw?fS7!ULV67$woiOv*yO+9 zVZm$VG8-0xS(M{LQ z(3NX*$YeDRJN1^j;MRGey$8+J_gVsa7VbLFWrsvu zK_l?f4ujeIz09!0wdjga7ubeObbhn$H7z&R!$nv_!(|`?R|fLTPxDZ?-v-=f-?-2> zFjZKHd#DV?RSqgZC9`BM)dTej_&xs9b<=sF-^4*Ls}Cxw%1VJ!SeNrVb1m&E>A&2C z)Wz6}@HT$~_c!N4tKR&}cmjJ1Nv5WTYx+faOH&Vv)Sh+dyn6q)aMMJ$%xS_0aNss% z_2739jg@tgr<7*RF{BT=K0gF=>vQNq4O9IF+=359&3FuUmb#s+&ni>DqIi(xs{>ZE z%2orUvSiq3Y%8RUHe=WDYcOxn!^EMk`+@&*Xjb%cYFchKNeJH|9eEAJAEm#8pLPN4 z5YA}3=QDK%tpSpF-_^b3nnXXdk=jlWd?C&x^6-h84%p%8Ryt-tzOHr!Kl>2Sk=J;mq)DhZ~K7!Y*f6MY##oV*aY0{ZPd;5I&2+3C%zy(A@8W3ufB>l%fGBcbTf5((1n_PnlJJS z$q3OlZa?-3+97g9=5*p&U=C~6v2A10KY`VrZXxG#*HXvg8^Wi2 zg~G~*p(Rp5$EcF*+5LVaRK(%pz!s)Au=W_V9TuYeTs zR@qeZFHHVYXbYG(yhb<(sz#LCq%VXI`Bm5)W{h%)&@{6o&JVxvU2^aKf2Oq?3}9oy ztCJ5*qu=rS#<}LH)_eAqu5ms>SQERGEXZ9U_one#0j^mfl^&FPRd3YoH4<$#prfU= zX7oN%M`Kj1mFdN$ya2lmV+zHdsgwR3-xsb3ymt?B;#RFCZj3;WUye`upG5*DSuM<+ ztnY0N;Y7L@T4(zbe`fBJUcx)84$mko12Vxq$PNb(S^hNLzwi_KqvMd}>TmKhQm?qZ zU^ge2H-y@cSUpoeF)QK?RQJ?zZ-t%uN8=j24mLv{s@MS2%bVC+<0i{Z$8?v~lMP;v zbV=3D-h)j=4b~9IgDem$6y=Im>dTro=n6Q)Z`Te-HfkQIZz;FP4v0?)cW_9o_Ow}~ zCb<#Gwvk4GgPwuTl&zBGU(;?}WjGHcxvz#r*h(BTnk`ElAK|IkA;66FNzBL=6PHrE zGv2UI@t2DS%6loFsE;5CAn4rJlJgV5ZJDUqtZc8?Cdmm3xOW-d=rQ7^Os~Z3Xh~q9 zXQ^wMjbLeOo{M|1DuyZG_&kO+#{R?kmU%X*>zt=cNCMlCdf*diLrX9wa_e_OU3^Qe&_aQwxhix-OCoHD#yejrqAmVfq(O;X$71| zuYkS#z2P?WV_N~m!DH*>n&e#^K%$}qIoppEqjX_n+!2B`q6f0QiWRD2I04nxEkKV! zZv#UL)rVA7<$ubKh^q39%y;y4WGvS?bq7A_1aR_=x8JvjO;>R$RtGz8Xavlpi+EpS zz&ys*8@3^n{D#ojc;ECv;@{*PJW0O=r~}0+ZHGWQJy*Y9`SA z=8D>I3)xrbf0FAEE2mO%Td>&I&sF>XGoAwDT&y{!f%AJIoEF;|8=5-;y>+5{tp9Rw zZ>y+kf^Ik%8?zUJjX{%&v7|0}anQpc26ihHjAcItHRYtZSIsyavO~7DSnaa#D zQxoIT$W`B1&lFeOS{*1o8hn<1tDXk4rq93|T5gVj18#+Ti*H>7HtMM-*)8Pr^ck!@ zyl=uy(l+u@Fgck4nE8Y1MgoyD2wv7t-lCCt~!s@bX=o zY`d%nO@HC*fPcvZpG#Z)Mtr#`Xu+VpaT88*_hP?NqjK{p#d#xG^LXur&m{?YSkXY^ zQS0Euz}1$*`>Lj979^BcO0SEve4O)~C7=`%;;FUq*AZp_^|WvXIBM`;iO47Ar;WXn?S(cr05kdBgv~ z`<>~dRt5&i;AEw!988Rdoh8` z4dw5Y&(#BvQCbV^4;n((egk-25t#Z-7aIgic}7MJ+P`FLj-L|7hK8KJn2Tc{Y-w+* zXM71BfdYd?FT!VFJ4~CcBdsf(b$s6gr^1breKWg>bHM8wWFO)E5{YE16ra?~HJyR) z*Ad8NU0~ucSv_0bU%{1D5y^N=RvWs2vIkzPHnBqiXh6Ge*%ksd>8!CgR@YD!ZwQmD zSNKfhO!HCO-*%p771L>tSqFkpQgLKor)Xmau*Vfc|f!r}( z`A{}a+*CM#+ndd$^(Jl2wM;`MINUcd4Vb;Vfzw>u*dKcf>6{gYF~Egs0ep}fmT8V} zt_l8r;lqho>N$Z+tp?i=wcxmrEy-6*P@$S-NCV(E)CGEL3uK3;tLl~Fqtq>$%5EjnqN_D-pRA_)HRcnEYH(0QN*NMYnoG1TA{1?2g!O)Gs zTwh1$W-H&a+H?t@kL@??sTgk}e8g!bOo;!HjZ;R{IY^ys0wPR6YXDQpZFN{F zlow0#g?G7c8JB6Ni3+g!s-tTIb-gSX+1AZG%J?0&otq4}VWQy)bem?GYgjMX#<(7M zD*S@TKFC^E0S3u>hKDm+_`7(c%mFP%1$qpPqo=e(VJET@odK2=k<1`&CfLDQ&HP05 zlm5xfPd1B;4@v?y*FF26mOLQc=EFYnV@0X{mwp9)()7e!WEgMf=i{2z}(F-7uAREx8aHH%uGbSoo)Dbtex z%{#+6-a)nM%qmkS@I-ep6dM|0bMT1qn|Y(9sq=(;hMxf*(eLS#gw@ox%pqKjNFZha zrN^z=shJ3tm95|+8Uo3Hj;d$M@$x$2ZXy+LChIn>D`giLgUh3`2*rQiJ-~j}vd}aM zOY7lY2s4M;*ei@+WLeX;*Usr4c_0%xkl2?gA*`iP7-W`-dlc?dBNXRU2Q-6W(l88~ z{UJ1qepByIhk>S>6_)TivJTM4k?v;)Cac7jh4%Vtdn{n;>TCJSNW;(L8N(hp|2)9H zLspetHk+{cM?pDvohuJqoHa3p6-4Qmt_p3VXqlp>h<~wdL3rKI-7=BD%m!o=B}=*89onv;PMv(ku8) ztW@8_un!xFy~lT%VAKPA{%V_JhT zxUqdc>^&vHYY|m4mOV>cK&!;O%bfvc`-ZY-ita!jmTC{_ChK;gGVK>l88jX)$*zc~ z0tqk7JWPv|9GOip;r|$H>b>LsXnSm#W*%r}#KexQM3_y8>}q3IaRtUXSvyC`ryjK?0Oh=lW$dW>%D zSG@WXr}Us=wdw<8PI|znd^$Aqa!60jze<~8jr1ar_pUO>=OxK6at~9aI07VdrR$)* zz4fbUIX(c>>MJU4V+6x2yrHS4Ib~5e7kV7N)!|7%G9N~KMCp>J<;1vj5nuLN9#y@9 zOx8ASPN&l?(0%}~Z&*DSdPfh1X>NqopMI9wfN&x8Uu;RZy1&dVcXqJNHb2IjV$HzC zSPf|DNAWvYvALRcv3<0AvhRDiPMnvL5((5XaKC-YSBeiw8YzY;PibnPH^9LdfcTZU;JA6J0y45t{Z#RqYif@kdb| zo|Ani?+}%r`<$GY7!>{zh*Ph~9~xgHPZgaIC7p2?)_W)lNh2B2;xBKQZ?aXBBZChhkZ=WTgiuQ|F$z_QN%4=p-Za2Ydah~Ek@B$9O zJh?z?*Se*iIDG1 z>&p#0;Dj<08lSuE1+I@U;eQetk(>?FnU&OPEI#Lspbyx zAdL%-IQRMIBpP`wRdw|hWTmz;+@*@qp=by?16P%;WD4m^ z_=N0ciRiD%9SN;d&EgG14gFnRo$W)RNxTt^A!lJC*HwQBi{c_va|_Ke!P(h6JTNaT zPHa!tBt9kw=;iDbFD|MlYod^8h_G=vuf3o<1;5Ed?Fdb=@~Eu7L?bHZ6fx(+y|5@Z zBo&DkhZKP{q|#g1#+!@5+5KEUOrJ0)A=few4;Y=+w~nXoa(}0AMSOdDCgC-u4PDH> z#@i_zEO{zFsCKJSNWz}eeF4jyOq3RjXLPl3bzB1?hd5njv+@>@01gzDzTSO zVmtHlsXGWWQlWTZWKyt?*Y28QCs_Y5y}(3RN5ez?cfG|>-FOkEOb6|4+zfC1(Aem! z)REj%@)!C<)+bII!D6vQrcw@34@VZG6SRFH%k&V)s)scUrA&T6N)>K}F2X))0g(j$ zp4pMLfhOL3_i$(g9f2KK9J3o{W3#b`SgE14sj2y-t+`{i_oM%7)SQxMXOWN5hB0&APxHVUVe{d5t~j zc;{KN2APMN;9p!j4-F!_G&WU0wp0pKJkD-b z4f;dMa+uEW;twH5`pezS(Ze>|#4tXD-y&{!px=h|0aKUH{F_bU{OIl;09)82X(Wfegz&v0%UeheMyBvr+1dX7%&{zIM&{7uDd$WppUT6eO zhP3KpO&QW0(!;ItPoYcE6Pg$5MatLG<>KE2JWey9`~60kn*RNNe~&;zPYocw#m&u3 z3$WJU(8`14;=kanoNJn6UEnzFe&8DwipGAX#e_%D@;$)X%DXOXB`K6IRW{a~2V-!B zR*}B~eFn7Ki|WQ;gkKG`^c=K&2T@#vXzFo18NTTM;QH73*vhlEgYBvkKMOqQ4Ukp6 z3NzB7);BhxySvXCgE)rPOwp5$6F}8C~?S!D(gVT^BJ7mYeLE>faW8$)lZZH z*&LvE;G8v#9#k4(Lgq^ReYkOe?)~nZXWM8wWqg5Y@qUI&@DsTBMZB|Vj>T&Cx^%vJ z!E~f=GMbr78c83@+`z3R+$>%XUHdJ_eZ-7%^VvEX+@{XK-+Z`&D0?8jF5q)NGbhuA zks4>uCa5qOzv3Y}PgzSWw~QyT+J^mx$%a1QNL*!3P*b3{ zwzHo%YfV**v$5_N+rZaX1E%#WNVd4G>srmW45N{OKfzuVi?vl0lgvrT+s%+S{$ z(znqE4R^5;({S@;+YHxBPpd#8+$nK04HR0cm0@6==d~4&k&S^|dPmJB*y;ozuW?#i z3q7P6tWn8}q;T8fXjo@x7fAcF?&S8^`S3TN+kMS3+xij=hG*b;a?J1xCZ&Jk#m20; zCTtNddM^8l!x!R~%qt=Wrrk=M_x!b@3DQRjj{2>p1M&blq_t_ALVN0gCR6)v9YS4d zZE0=GZ`G?!uJWSb9z4Z{i9T{g^g86F={oV1{^PEb7KcGx(YtiRPs%s%mrY+je{TI* z`{m8I8b6zt2rGWa7gLsRXDtLP#20YQ5iU;PGk7sx7atXiXbrQgbHY^uSo zG2pl6RbN(`mcI|Zp)8Qy;)hr*Xk7^(k{=>WKiOT+Dlxv%&ns(Ma^~ms@44^mzpwgH z|3}+mb*Z8JA?7z#cRcn~4&I4VG9prM`gBfE@LZ}@htSyty8>nrvGSElfkL#Xc|mjC zWer!AlkJf_;C*C?>HA5=nMW~yXsf@bs|NJd*BOb}ZGBPsma>&)ma;D8-Suq@-EfO} zh;6Go>!}o4A6uR(f<4br#s`?jZH$X&A_bAG7ba|>IS>ndD45_Ul7@v ztekB}WYUf>HnDH<>xpJb8z>ej`)c}YteRCw6=Wo;SBq736$8N)wNPm1bY$J8SE8KF z9#4IYbq3$gBX890vNyIj2H*Wl*dC{hVbdRGmQ`jm+Uf3NzK%h9BpfSD8M0SNG-wI6 zXMf`D;;Tg`rD8=D#Si&) z2mbKBcb{}p9kuKvdu{uEE8U*7e{t>yzra)9uz){2IMy_|Gu*A6GAA^{XY{`V zek|f{?0Vwt=o;wi?dj-s`?>_yhG^kv^nH9(s!HYzK~D0MKhu{nyv)b!a~vxFAny=A zDi|m{EWiYX{QLZk{GRYiQCMciM|u}(cXA9kW3@7zRL4Y7v{&>;sD1cbU}nJJ+Zs6N zYaYOSjRPM7lyJRB^GGbVH?bzUFg+^sG}n#TnG&JAqwb<#Wz>YW<}MD2qh({9QuaO$ zmD7kFV5S)t85i<)(74o{WF?tToJ**iX_!Wmvyy$|i(~Dhl<4Y6AUrO7Av`l&79JB( zMA}B{#N_d%Nd(wz4KkkWa(MEeB&A3xN_(o9-j#kmuXP?b&(Fwb9Ayq>RE|vd&++^R zv)+cr=7wJSNZH#mSJ{FxVuc83L#^?fmSX!2cM04+1&OiQNu+MTPr3Z&=2wsLH}g8c!0c><{eUBHzr?MxTnxq zNGhsPU;(F{TD?LsRPtK%jkBF`m{OPUI(0N^42SYTWp&#Ms~4>;Y*f%Se>-^j zI;o`cp5jkD3adrl0dh2Z7$^=y1K&M|9Gk5jEnK`rKc=F7MZ5A)xv;{d?~aQhty<)G z;I8GL7WzFAP0u1Vq*XB6aIXtXC8dg1n!hz1XesY1_?h3Tprvk%wgHgkyU4#tR|~yd zj9DL&8k@lYhlcO@)t&{gS-oba8~Z?}#awZ*B3hBr&w*{>MpHxkWM?05NuWH!Pb|s2 zAWjDMK{2%QMo13JW-6a*erl5NdFJaBkkDC=&=3bqNRwhc_$1dbX3*-8T!zI~d zxmGnmT^;u5`;lf~O}nkWrJ^d-GPNWR*iQ(HLMtR2a*@O)uw6U+Jw3f#YaLsxvrJaw z9eg@2GFCUPFxRsTvLCf)-7@cQ!A6mV@!_c_;Mtu(@6N<{ox$pHLK>G(R31`)Ri9B4 zHJ#N`^-fiRV!HH}_#eKUcZq4FKcMU&{*`?bKOOaiTKH_9aZV0!#*599Ec;9=fTDW^ zo>Tkm^BfOdrSAUzJ0VHblvtAq6JAm;O+XPQF2X4Dz9d6Z_pMcY@m+6e@vZc^k)!y85 z+}kWrBQy`J9!GKmNi%4fJO}F|?~q`!WUOonnCI81t7szNtoRAJubc8d(iLKOitv82 z&oYKn+mR;aMy4mk%R>M8ncm-B8V4V^)*XOEa^Be8^b%U?9W5$*nWKuESz&39Ybq%p+ z=AT4yzj`w_dB-c7nl$zznVkMe&A7fb3ZyQ_L= zN;Q}k1`5ZAk&_-oKl6RX4l|&cp|Y>5|G+u^W_!tLCU>K zo$|T7oBWt;o_H{%bDnV0%uRU&`a$B*+~-s-(J{I<#P>D#oN}q0uk8)(AJx-CJiTISHqkI{hufM5V0%2YN&5co- zd_@pAZ;0@3euDj(QJ=DlI5;yku{bg@(82rDG0r9gcL)z}iHU(=wi`%}3-Al3ZRWVG zwTs~^4DF3ZlV@`sDOK`H*rNnLLfH3t`RfO)*Eh)NFbhUDEr7o3D7quxQ7d+G+&~#M%C3z^IahB#8h^h3B z_{Y#NU&t{Dcr#P(N^kt%2Me*Q3dBavl9IV(U!Ru`xqG>(0SdC zJ2r(SXUt(kAx%hu>_I#10Dj)Yvc_%ST*bb5A#&88@MUvEgqqBYLaL>vc(AmA{IR04 z=CJyxhK8Jic6v(rO3_D-ONI+4^5UGYj8n8v&`{5&S|!d!ii2q&gfd+79Yp(g>vHR6 zOUk^^LI%#*UdLF+cz4qG(C-U%jy_F}PA??fAfKccGJ3QB<{spC5+@}+qzrkH;*z|J zYMQdU+$lQ_Z8ndDD|pU(%}(Uqr{1KTBYaCQ2eLeDayjoOYbjqZcr2+WcPjL1zh*odMUFvBq(3+e zn*u>_x8wuZF*mXD>2Np9=8{LF{X%)ZPVS>H?QL&tiD6(v)t3z|SCwzpE3kP+)GUIX zVJ9Cgyo4mDO=0Z@d(St?Wk`dJL$)K=fDRJVhI9^8fi%=KQ5=)q5?|z7*o_!y2{#+S zs)BivGnLmySWDa*ZXzdCFI5EfcC`|w`*l?vl<#Goq_0E^`Om-@ydkeT^)Es=T{$@v z*i3hQR8KK%MAViZ=Do%_#?$yfm|0&owzfXD7CP>^hIz%o+VEX2)-1-fZ2DKgULqDR~|tb??d1a{_i;zg*Q@0II;{k1s< z8|VcU=Cbu=x69;Z#T7>VR{Rh1OY0riWba_;3H+974C#Xu;|H&ic&hY^ih}gf`gFMh zBRmz+O3Mm9>DHm!G|d!6(i+0$oED5Mc>|#|)i?S*)ZRDD{nFOLI^Vbq>t{fKWmK=C zTSZ8J1fOaiW>W)=;+OyL$j11p^mM{7%I^#b8{?f6O_45@<4QU5LcIaDlF+!)`*{hOL^7Y&0AIdgLUS$}TeRGxu~b-7~yr zL%$%;EhCKie-b>+Gx$R7lELWz9<-mLe6e^!eC-rU$ms&KKSep-5~^`UhbT zwKh0Cs)?e~lyV4cx{IL=biQzW!M=QIeo!k#Dpac!wWK!$8#w(KyQnNkc>anNMB;wL zv)3WFwKPSH_aXl?%FqM0UrcbW7LMzjriGMHZ07FCh7 zl`T+gSAAAjs5!_i^%3afdQqQQMQ2WlqK$!hEKdcZlPdEoka)9BqhIFe@&V zx71hF@6-qJbLJsdiLPdy?mCr26GIKRNeD24xh5LyKD>P^59Orw9JpO7hP zjpB!_Lex|shbGNs>Ib4XJty%pq7Du8nt>`d!fG=;gw)AXtlY2@7$i%L?@eXq^|r^( z=U!J}U4#?AkR}rLP)_DmW*SRu^!GltIiM`L$OzGI~Gisx&fL8L?C95kB>Xlvoy_ACD= z@Go~M2CFja%IFj{tgAo`U@NT-)3RA|fpn6{z^%)gpZ6O%onxl2#?&z3pW)sHwA(9| z{-$NvMZ#?Pik)`#|QKn);-y2aaN_5uI01LF%@1L=dmWlH5!^&Z%*F4F?}NoPijQ3(*! zm&*4_x4?}p%c9X6lUo5H%^F)3>g|uX-#PYJ7ntLw9DWS?a<>ih4SkGHjZ-Y2fZjUL z-O%4AG&(jmS&}@@QQ-*yZgrl8l8|g?@`+8+=2Vus3)Q%W%8LIl+4|D2(zFu}p2U zhr(j*Vm}i+lOB?@)VqM)`VUNDeY)McKH&77qsb_D$d-!j{7dY~jJ{L~@ph&nu_Gk& zv)#9yDa#|6UKZd4Fk{v+>@xfWn$>sHNy{+D1$R|HAGkBylOu8uNl&3)_?l}IHjt|1 zEmRWZi{>SARoe@wj{A@bWI1#yPD)e4`Fu5}3-dMYH)1eVGwF<$1P^E#2KwQR^D!LPuXzj%=OkV!RNag z{_a|>3{KW-l;6Q@e@GbSSy^4_J%PQ)NgJbmgY|qC=Kx0yTT@dBb_8B0GNiID8-8H3 z@PEt;YzF6OPm932=&1O^RDa?NYEOoOGm~Fi+)uGobw)E4ZK8dy>ks7NOK3l|7jQLJ z%TIv~tbk2rJRtufj7+zPcL`7SH-cI39UEdjY^ra}H=f59Lqc*p*3n#Qme`*-5|7V!aZdf~U-tY-Ntd-s!>1F=6U@ zt`^0dH=h&ZQ>0B59W^sGSHPmqD_mAMBwv_s(+ZI+P#h{j53DiJhK5kV&k$N6 zGaiCH!Z7th%@|EfWR51KIjS73bU=T+NYsd5&KbZgry=B#IcMTFSXZn2rn$nlGnN^q zWq4y?rJMCN^a{vQY%{JmGi~*pT=y@3tHVa#rDGWz-tSvkE}>e&n_blq`b*%2`7ge0-v;|{FL%I%&kk+4UuEOi73&GR<~EK zlKl`L6wT!|;fNR;X$VP~Bd7O7t#FGz;9l=cTbo<%;5%X0G6NDicl4itO)=H{#7cHP zh1m%|{3w1e{SeL#7-JvjtDuggT=rd6hCb0w(A~{%QqZj62Xvx4qLx5XM8{6+ zanouzH+-yUQ}J(wwXDDXA=bf|GcU7Gb#eSJL)6%bWV;-Z;-FvU)ZiTu?S}8E6N(X< zUC3DE4D2OC=wF&T;C4ZkCdpsI#r!Yqe;He82~tspn(Pwm621lIzp(SWt-ocfdB1Uu zaVWmYcmpdo-U0$@!WOjmcdz%|37w1Cl1noQVhy^BF^xA%a8vwJwo*w&HbT1oDi3j*;$mzNMia ziRS5tgx(Zp-g9u3juA~38x-wTi_~qkUm>v=)y>i#K&l~URDa3qNduyMzK~s*H-<79 zTBTLvogtNV+Wp$@w5~I+HcE^)A(!RTf5zruA)ID*StbGr@tk*OxJI;Us&3Xu+LPCf zeV7{%lt@I1N2>bhDP#ajgENp)TMZoN4s}&US7~GMcK+X-D$wm-11F%v@zdc+kb*wx z!mOVy3S&Oj4jZ5+Vp1>wj)E*+Ih^EWv2!A7xm$vN4*G5DThKyL9Du|}p_qG8nFALt>tc#biaD&_=M1N#kIVyI_u07K`wsmx-x z`<$P>E`RIDZ;3?a5DB5ZVcIxM;U#Hzxl-9fy#wgn4Bc5B7m@)V;B($a)mVC1Tw8F3 zBVyjCZ6c1%wM)1l!M4Wxz+GY+VF5~^u|Duf6Z%HjJ;+gHj8Dyl_DarOp4-7T(XWYH z;Agu^8^<`z87%4~-V8Uk7U~L(7Ht6r&NbT2NKAujo+xv&B8gGZg}0x%f_?x#>BCaP zV}ww#H{>KZE?WkH18y633v(LQKss^}e%{Enj<9ZWqQ2t5$H>RT%XD|*0P26xa@iml zCawuTW03kP0-Rphd3Mu11bRmwO(*37Wu9c9pfj&NtB8(}8Mz^ei!oDZgjea=2t9!f zrj4*)snB21^YkOJB=*QS-#pRw&@l~2=66C@ki$(AX~GzG{o z-3hdsuA{aB*{Cg3FID}aAWN$VH*v!7do&^6%30u+ZVCi^T|GIVrS~%X@s-#IXvZ!z zl)_eh0Q3YVSlOV-$Hd%a4(12S5 z`X>{~1%%&IHR9p$#6U}L5p=sdLI-y#bZG|Qjj_Rozl@WOkKokX#J(Nw2sObFb}+Fx z(}HxI`X`gk`zRnvf5^Q`tL6pz7JiFz-QPgg*o$1$9D#4De2I;}nR}mppE@!3XS!4D zMDUs4pwtR7xnAJHd(RJb3X4ix@9_9w0np40wsV7r=}+>^USUQWNue#J=% zj*8mLb}HhkoccLrV%@-WJb-LQW~F9pNwAW-)3>r$@zkOL(&5U^%DKoI z^euW{+ZCQB$B|d+LCPAC_Nyb>$ZN`K%*ap<5qhN6$*qxB!5!W{&L;LAR+FX3C^Kz< z=dTDqhyTESC_Mq|6Z(+7b{n2CP7c~gSKXV_xu;S zhbRa6SN%d>S-Mgf=iX;-p-v;!&76rVA_sg++*Zd*%Tm);V@E7&sAWikI~FxwGLABR zwU&X^BjNiT`YW~>(%f_5u2asa%GoYx44Lt+@=j`(nxJWntVUIka4>2Z>itTY!XVit zF6IyCjL17hN#}Y(X1qn%;63Q-W`AW~Vp<0YhkD?)KUHyG|6Fe{xQ*v5PDcmVDgWTe z^TgWB8`3qJ4BSl<1YyZrg%?s3T(m&z`=4c3y8#`f=>>DY?y`n3XOeJ6GwRXqk}3m( zgdJNETI;8|-$K5uzhyU^NmpPM*ggD;;S5GJx3=80)pEXbHTR>TbG8$M}>(x2umG%`&gZb$luv3a9M0`t^0t;{SH@S*9}ViE%w2f zZ<=n^!n-%)Q3MTPXL5JuUs7dSlrfT9U$|QullN85)LcjUqiT4qI>Q~ohHO<=1)IxL z@gTl|y(uqFxkz}GJ`=;jO9G?3CP!6UN6Q4$B6#j54ND9s4J14ZPpsM2H;x6acK*?! zSMmFav)L`gwloQ|hq7xa@(l=WA- zG;2^g-*v zM`?S*^zVd{DG!UEh&=3BtXZ@$>CbFYLJgmgxxTpTiG7l3O@)2 zln(ZJ&PCp>!D`{#@h6#DBp&rqo*0@m14JEVCGzT!T3n4Tf&SD0-D~X{q(5Zw8Yyl` z48oV({;V}{>K&9_oIDkM6zu3@yNm4oAtm<#Cqn=Br+$_ps~?0JO-(K9ZCsbsGZ4J4 zClWVP!wA)=wHYq<3f@rBN2yuSNtMzpL`7iKF4S4kndk-NfNGWe6WkC=xH9&Ey!zCc zxf=iO|Pbr}R2vbt*=u za7OX_irz@8s%`=E>l_+Ghw9$LJy#7R#7C-1@`z-j=qGnRD^Bl1X`UOD>XdMW*wE3c zaQ=T&UyF**@EOrN90Yp+2JQo`W8in`9zNSVK&XZc^@!|KV5bl=sQWmTJ z&{%+F{zy9t8d^p~qM4z(s?bO$ikA9fCknkzBJUQY2C^`o=Inpi+PusStx(D&b$!?O3ZOq2DZBFcDW81dvWMgY) zx~r>gTi^M9L9R)6b-nL7&vW0vYkBPL@A_>ET6>zu;9HHjfdx(9O~y-DBa_2yv$b;0 z@+bmlA_a+esiA~o>SShRPM)ZN#37#mDd-Mb0o>4i+F#Ix4*?Tqj&iIF$gaGqoK18Q zrB|Litxa?fFAB8qV9tq-yOx>eDaJR(n!qt%fc**0wppgH7TmVNaojr!T%`-+wX-|& zGUR2f zLfdRKJnK(YvlKz-3B2QNXM5>SNsY6MQtP5+L6fJc`-FX#`Mv2k_SCSzFxXJ4_vklb zC-GY5m~Eo#uxDSu7df7wW^}|aPpU~F>HbE!j2mGD&x8sgy zg}*r5Ht{yyJ?~%g0Y)!Qcb-EuT-HxPQ*VGd(*@vIJw=IVKjgmZv|=0d;A6r9{smT& zF_1iwurob6aUt9~AoDzTbhdZ4v^EtO_hKR7%+E|(qup>B7?{ss;&2{2ZQ@&=*{V2I-UcCG^aikp=Mf9(8<{=$)kQa@ z!u#N0daNyTh<1~pJWx`NOB=i##;vvFWuSOzTWcM z)D;hcC5UW1jwHH`_cR|ZD2@^mHPfr}{-G+FGdaBl3du(K0M!y;8ZCrV z_3ivMx&oNR9#bDx_LdfkQ@k_mZp;s44Iu)(jl1F6!RcP1vzu+OskLb?e#W@auoze^ z=M9rghw<;03gE2O_!b0rM0zECnR7tJd(X(RcL}(XJF<%kx+aGdYi~lYskZio_95^* zcPrKMp^`@ARM;?w(CE z3g|@lquW?(_&Y>v!HzmXJr5ay_<+>BS4V~{X&RHU&ufpjQ;_A{1#|qIMF=UPLP zw6X4*maA(F)AyF@q>>Iju+IEtoSpQ)$yx$E!;LwE4lnLh*{N0yeiYn-M#C|EPyJ!T z4dY+tu=$zI26VsXfv2IWiBNh+ZY9Z1h`AaXs`}Qn6 zoDc9I_f?X5lN(7YqmJk7<<=B(BvN^Go+9{#JYO%I*}Iss-C5g9qem5X`F6Y3MPzV{Z@S+LpLMIT*-34vCEwS_uryKG_@%2 zA{c3!GKD;k@Semk?V*&YyTXmC6CwbT!)s(aGECJ7s9!ZCwFD{d5@t=>W@7tH>!cvE zI3V{rocC;d%~N6e)4*`I{A~GQXfcKi|C*0lb@rs26xbbF8!t%h%*`N;rS)YW;jHzgN$Je0>Z2kR@jy1=E>&p%rmz>T+IZl7U*4{fK)-Fjo2jcIrM=ZH-Ms zK(8Slv;lfoT~9q+)mmOxsu1Ts&B7oPT)_mlUUR84*Jdd z$A%TgBB1^6wZC!R^DYmvVii-TGizbWw2)cCv-6KhyfUd`wMvIRL%N~Uk&&<|_Gvz- zx+#;=^WuHN_S`#c9*sbHob8c17xRLjt)ZLg_-0;UvOv4AI<%+O!zL_^Ei$#T{9|Xj z^l<8BL}teOXI|yeXtn4c*(>lkNi?CkuE{Coih9!K!UfzR zEGz8W=NRdxnwG}4fWzYv1y93%DnDH* z4lKtD>Fp4*-35f_E)2P$~Hj=HuL=E-;q$Oq_w_5Tb! zbMx_srn}}V_R;Qyml#?YTbz89GZK5y#LP9kfbgw!kfO0#rKzMX&0WDoD949r&YbifyOlTEg4P8NhY3pf!Xr93N=b?1D=p%nW zy8?qkok-}A=EN*vLD28J;jC_-1}(-r#&g&j;L!enb7@Wd6JFi=-M-LS44r6Av~KEY zhDlsbQ!}-|BRwpxEkC7vt!a*q1cKEX_+4CwN|CRcRf-F;Ug93Yt!x%EN@+(}ni-yG z6zLiK+xx{e*iN?|0d{K@uoiGImtj7Z#TuB-nbr0WjvL-_fj5z6kl}wxm`+{E`pBIm zYAuP#yTROVE!s(&(^iH4Ni{7Isi1kJydZBU9wcbS9mIG~Wf4gkTl`6+D0B+8-Eo@* zI_ff91n-cC`Ub#;*@dZrurStcb*}ez4cH>#1UXwLuO96I<2bjAps8et+@Lh67eeRA zhIRnLLJ4cs)5UH zB+MPc#@b+FTg)a#K2Xfd!Wx!1`TF;b|nuc`Z|-D)W|U&Q*uM0ty0h5ogn2pfu5GoP|f zcR1a91Mx`RWQB~Cu#IYDEZ`9Mb})54QQT9%(J0Y&=xpH1v$e(OCiO*CM4pzW=T z&<`pB{a|>ycIbT(Qo z^uVth$OJ9H%IDH<&5vudNGGI?W)RR1{uX!UsW@e{Bx!ptntUC79&F?P<(_DtZkuWz z1s<&ikOg@PT*_Z2hUtxEkhO`Uhb!i78QKv;l2x-ci2>>p=5B6RXdSsBiT4w!3Z%O0 zI&J=3-6wP~I#<0;sg&&(e&?d#PHRP8ogE51u3aI&@3&_r%$dGeJ-Ezt{eYkx@~{rWO;u2 zLy zL?mxiYJK#0a5lIF+u9dfL#C(jE8^0BDBoD#A9z4Em1J4w7b!)Z z#%#(D3y+H9(lN@RsyFIKNOyP=DcbSqceO}e5v<1n(J8?|-Vta7Jt4oz9#2k>E)AJI z<*psJ(`K(R0bQLELqEM%j~EPwz4&BvR|nPg-B%T6y`IE?Y%fwR>LX?wj!vMK43$``r1Gf*Em9{Au9J&iQc?1!n}BS~eTZ0=?EqBSJ9&byQB5j_i>W`*mM^@=$k|B7{j z)@psYg*1U*6q<=^)7XpLIj=5wGg2+tEnS(gi}DwJ5Bn2OFRm!vEq|iytWl#ztvcTb zOvkA94`hkvn0$*gBRtOwvOdtfq*_@{QWAaT=X#sCQnn?Q;if0Xt6+8Ajy=#Cr@RWWEGT4p+F$D*U_`tKjKK;=ACJu6GW2Kcztp8XKKVQ( zFu(Dti{#R4iVRG9Lz?PZF4|G+LDlFM%}f2chMwVNakBq5Om__oH}urESM6+Ks|LK5d$`Eh3FcTMfsKb7 z{g5!LYv1OIdTs_bh6%}089Q+xr6r5V-6-rV9E_4p@ zHVf#Ymy*tmfz*OVVtxX`f>iQF-at7TNGcbRZzxH-8b16>r`BaPXIQP6dH3=4COFo5?LZ(7j$~31zShX$HxJU;vMxC z<1@P!|DZ@EmBLA`7+rvL)2@Lt5TZMS)&;s9MaCTc^Z+{uzf`<)# z4C}B@;41wS-w*q#&tTwe?GFXd#0crK+${13nwc5lRTK@9wN*9)(mz9o>V9e?+OOI{ zXk3LW*C2T77QH}xaN1kZWWeb+G`Zt8dNqnH5eZWyZ{rXLABTCFK; znP<1TyZXC?6md(cdfsmGWcn#crF%pX*oQn&)rF*Ob2yjq;CHbQy{fsUJTA{k{t=b& z*04($66*Ne^Yq=sws1AS+g(h{8J77GBW99>Pr}Kh$TcBxFmmHNlKz>8-#p%WC zD-=sM%b%$c&3L3HT34%u{c03h3h$5~@`;kDXsrNauVzrG7YVWKOsJ5R1-^I}*f#?6 zRAoA3xNlgfzgRw6KiR;9v-NB%(LwQ2{k0)Q+9++$ricxwahPhX7hDw0mMv1ORXNlq zbTPaMWm?fpD zYyRKvVA9zfc7rPpi786tZTx-u0+CG_&g=|llkSqE3Z447<^Z}GHlJg3IWR;uL3XN} zswT?jitqAq)=v6ciZkzUW?>>4X&lUWx$dX-I@Z6;Kfy&k#V|~N*HEAj!nG^(}uA}^CCiyc(IJDYO5*M^n|~o2px+KLnkBKRsX1V$(Klb3JE+V zdl~H+DVyD!d=;A+%J_OYM*?A?t|@9*1=;svtN^wlv!Smz(9+iN)M@tA4%LfRNF>rM zVkgQY##HuLem~J(=|=eh*oGv*r?f)H1pa{;eE~b%m-4@)^96EV1LhS9lh`Z!Dc&2{ zWle!t_suSXZug(2c9}^%i|g!zgTwaj)gLwXs7E`Ab%qoT!{_mDiuri$R79=N{1;**Zl_*iT7;5&I4j zAuGU^S6yROZH2TdTil;t$T>{EOjZ(yr2EDWhx_^$yDK|3TGpCYU?Z?@`YM=C|IRSo zc;2+qI>0{1!S_7zJ45#PxYVxPM3Rn{WZmbC7dDkXmq}II)h*CG=*4aTQuAJ|5?!k< zP~MkL5f$?LvgXj{l8yndWmz;BviQ%s%Yp89#(c;`H-0pBf{ENnY%4YqKViOWS!C0= zH+X45XVeP0tSBi%`;+yH+gSWY@b}isVn!?$d4o2FXaUl?vo%#m_`3o{)W> zeu8{D??IZDoEPm9oZt&NSzw>)0rdLW`jO>*%4J~I83$(9?iQ_G=RW3-1vT*&={0%x zDYa<^_I5r&ctreB_FmB#a%*HDo#^3hrPcODW~nJo3ImC095NagtzG<@tdJ- z{t{?UEw_CKCtnzQXjp3429wxZhEv97U{3pHm%0f4ze6`-LzDNjUkJl#4pv9*QUOzP zT-H!^O7lP?K^f>Vtxk6wxB-5c@Q;=kh<6EYaxcLK_XNR_nV;MhDGP>R@9DM8w!8uN zaR-9{XpXxL^|9K<4S3Kx$WC%uJZ*!v$jQXTOk3i4>N7@L&N_Z`$vxRIMTy#s=pf}; zLnqMPMyDWrbxUO<84>az#hisqlxhM(?3F~NXy4#KPjgoldwXj={1!eEJdAzx9bvO` z-B`thT29)gxn$mnK|-t`CCJ_003~_8UX*;&j?OBHiSmor}3r^>Z5HJL+uqY2Ga`7`{|= zP)|bE!N1`GN;9h4gl%H(1m(N;Cw~|Ca#WTd7hZci9wxZ*hm0>=OmtvD( zlkmVW82i`o0q&lcEC-z5T<85~gJEd1J*^P5|{{4k_@B|Ha3^U8jP69JCRp8-HTW zpk=6XY;s=q@xqN`SCVJ5r$|X^f~Dkb6wsvS<+GJ)aIQAf_SH?&QDIA5h_+YnRJ4*F z72n}?WKX5PCXdM*o!Jv-N9g|P?q)Ex?rYv`8eqHvsm1FCtDysS)0hJ<0@*&)wcEEF zob&PIfb3S%eClxa1nzucR`OZVU)cd}Z3Wsdu7H}OMOG>f2h^a#kRVYq+NkyYy2$|3TxlAy2&Zz7vS{{q>_ zo2hQ`S0Rf3Pxn##e%nqwiz@(n{zbn@-_QWd5STi&uy1iq^o$Ek594u7I+;64^urDJ zEBBJ9Sh89{RIi3}gG5`bYX&_nx~?mFPPIZ=U)Ep5=YL{SXeFfO@Sa*8rG}gO#(IuA z4gh27l4%g69F`a+7#P?mz2CUmB)7J+WA35;-l2N2g-Ih}4S5(e(7W@^qHEHd@(HSL znmH%}^MG$aYjJCa!<^}aVvI~BIl$k=(!n&Kb)GZTJ>E35#5dYwcGS1NFcsiOj13Jx z419wc$lNOYA4|%5!?DTD@jHXM=%duaY?QE#_BZnscZ5(V{acn*o>DvE#&%Elm+lq1 zMB7AjQ*DEMy$39~%h~(sbI9HDj%0Qw?uVWQ7J4s3VoG4!YPw|1!MVLF&~55sqm8xj zDdwcDzk9B4Qm99)R_aG?1F3-ak}2R%6xk(DDdG^wIQ=VXQwbN7RfE@ftq|RRo6rJNV^>-n5&VVs-&W+bcrMbj-XbIQc5kt z%}kwyC(k=A-9kC9|tfc1lo5NpsUgdK310)uugUVM>XGV{<`G(~i-Ng(II;lIs3(H! zsHV6M|2u0rwGSltdC9quVC(C9#%VF!%8R$%Xu%uxcF1LKMlsQ(q_Cb!K zee8Vl1i?mrOuxo15cGkJXFy?75fL9uVuzzr-BGkZvPyGM)lsnqd@;NEY_^EGin2bh zEPWwP4EOhmJ+r~(D~0dX4M-;sHnf4={V(HmQ)f#@`+a*uFiIxF>tl_RhjML66q3mrRrwss4m~@@8#*er;W`?m7Ba{Zutw-dxf~XaPPNO0Pj?=Pd{3S4rf!pX4Js zyV!1<`@`g<8uq2!r*Bc-&A`D2naGw>+aS+zKRM!!tw}w~jU!*AsUhL;Tu=kNt_M|J z)YXvH9pYK7iexx;=dI_W+v<1vl;5s@h^UIRT9cl@Jz^S?rx@O&A z4%fSPRsTh~nRJN#|s zIuW^Yf?z*;uPJ~`me^+9%=b~ak zW6lJ|TMpC4E+Z0$T&D+nRQT`)@E~CL+TV zJF<^SEvV}mTJ8?PL2(9lM|ahOHQkX6avkjtGa3dm6g=uwd1IMS1fLo6B9%uznrW4s z9a$Ujc*X8I_Lo3Sse<3YBrx~ukCEWaI}e|3Sz{gNoaXTb{t6?BWhn|_0+q&)b6xyJ z5|Xl^`WAGwrt3(sh4w&RRiY_T{Zby5Z4j>&tl+BIV`-hq&$A0sXQCg%sIQ^xn4M>x zW`1j|YoHi*>aXdy8hpTiY6ax%xz6YAF@esJlku17!+A%6XEKYui1%5H%c{VPbSF{` zmFPCZbmjwk3%LiB!XNV5;{C$vyz{IDw3|T8>7Qy4I~{uHd*e>qZ&~)kg#W3bi=lyD z0IA!$hTixulM(F7QV%b9FI~qm1?3hq}RC?$3^IJ?%|!vYBQ#XWG#=zH?MZDZOan?aa%7}xDD*K!q85U! zY#F1JbTo%2zsB~2F8LUq`pyAXxup)?$G8qs*2fGa*x(D{)JubI$S2oL|ASDaXq{vN z96_h)0`>~tZlPHARl(Ar=pb-vFV@C&Q_&c*N+nZevbkqxpMOBfHxe-dt_*T$NK zHw6|$R^yQMwJCr%f|JQ-tSZ(JzF!kf^UND9GRF}28UL=()M)S2qU>Ulm>Oq};N28X zl0H{_Q)xA`QL}cO&Zr}T8DTQgNOe!~MH&;H;cGYyx|mW1PMU}DN?@PT`s%spkTc%F|$1HX9E>Tm6vZru&nxSLpB9x#Y}jYtk_4P1X#K6n0=>@>JH)bVg{f zEqtM?2aMPOkfIo*>>>M4be*@9Yh{ce-+_K?+r;;9x&N|<|0a1RRiNVtl3Kvq4B_63i`B5iXm0~*(B zHO~}xWJ*aBftWjo`HuRCFeh6lNsDX=?($rAQfxT%R!16t!}iOFaj^l0?GvZ|74f=b+W zObqsH$!siH97_a)-mWgQZLC>mA{#4W@AdoiwPD}g(RdwCnx{ERT^#SA;L^zUMCD8s z!efe^{tmJM6U1)-26|qTkCvc8m}=bCErABg1!%d%_mdB{m1nSoig8tUGqkwAZ{H`1RjBmjcJ5#)L52oN$!fjxmRQi+4)+ zLwZ%QK*b0Drb# z>M8+y_%X6lb5%J{QBhVRlJIM>jr6mm`MK7qL9tNqmhZf~#CFTN+0+RS8K+|#F*7`c zIqW8U=C!Py9YXh5|9^oGF-_)a-g%OVUW5HF*d9~TI;z#`CGeZr8-5Wh!@S`H(hBjY ze#=M7hKme51-mz$N100yrx(ThgnIekzy#>NrGdE_J_}}9tM!G@km6=j|2#D>`st8jE5}}g1$Vf8rK7;T-+wn)5|yW@ z*$B}^(J^mu_wk3p2KN&DnlwNL=$lCv-jfEVVw{n6!bm0Zfd` z1xF>rW>vgnH0rP8JLxpr zYS~InEwLEZ8QdiP@_ewi|G-CDIJT;;khfLvcVt2GPBu$gM!n9|abNR<;?c5Sim|GP z2tzvsW=wm)!uSiVhWt`dGt(g1II=F#*n8eN%pL;r-ZtZGtP(ar z{}SxrLTrtxtGV2oc1#AhPCQa8c{(j3yD1leI@3>hLA+O1WpgL zVJq27kq|!-i~(jq4~mj_H*+;LBpME`@(gg*v7N9?z}w=xja$Ipa|TmG-{A)Sj~Rii zM%44$*C+fWmdG-QcJgFKMcxs?4AC1oQ~6vy4Y-k&wZL=Knvv?7oa&77wn7d*0i1h= z-H0ZJWbfLKr?+^61%v_)IMZj}R8vsNfUb4tNgoR>5gnPFNcr4^Afd1z`{ykeN* zYweEMnAT5VnG3<~xuSjm7SuO3hKx0=BHJWa#?1`;3OQn3Q^#|C$WGdQwwM1DOckw^ zBh^Qc>qu4I3++MOCG8mWoTegdL)t+5&&j<26g&&joqG+*-dUl6ewlZ#b0{Q~UmKrb zEa<4u(|ZO&66~fykB#W`WP^DQyg?N6wv^ z5@m)<{L?&39FJ@(A&*qw=!SEW7h7srXZ*hbwxZQ+D{{^9?hSm04b$QD9x!NrqRCjr zynDholHKyZmA};=G+A&nJcrzq4_T`gsyoS>NDqs)2z;E;EE{blnUa&HU&Y%+uK6E% ztGmzHUABm2p}8^M18-?mn}(ZGrp1=c)~8_M+3CISKNL9=*QNi?bs(*yE@yP*v=W>X zZjg?XT~;RGG(&*7ok&yqf1jdCEf2v&>Jz_+D`fSfT_kIX?##htt7wPd?LfJEh^v~T zmQ81ggR%UGX@%(=?lv1OQ-JN##9iv`4ffP7v118$hDYp7sYLI?yv1b!U%je~Ehnq^ zVEq{h-Q8}gW6Jly%e*dWA#NZX4H7x0x<*=>5ZgC!TFYzA_){in%*7SwkN8&WvNyZ@VQhq1VCCOQNnf!Ne0$>m&jbqJj^tCJ(5-@#8;*W1i}%KpgO%&a%@OgJ8f z_d_3(4bpWt93`%!z6Jp#d@njFxi8y~(3NbU)nZ-d9ubWauY_iaRy|*HOmhG^g^W>C zk&5cO%JcF7eDA9Z7PB5O{-RDHbj=~D8nNrJcPjPVva{^}SuisdcN&Ah_NExu8;|1! z7SuY;@xuAt+cjv9%uTk=^e0fMyJ(l#jd;t&yQL-ao@!Ln6n0MCbzzuC=jql%nxvEJ zmAtovC49`q=w%c#@p{giqyjVSnddU_8TMJe8aLu=fr37ytW8a3Zb!l7!WV_XqJ9PQ@*nE{LGNm)%J1+V zYR^}(rc);o7iNs{uHlG(B{1)Po8KF6>BZ%}OKbjW@T=ta&|j-cC1sVtn|;Mx%Rbj# z>OU9R4`e+dH`@NNOf;>>$AHtJ16FG6X5`_B z<+C+vzwFWb0R0zDByVP8L?vx8)5m$i|1CTyNy((jXDXp;fX1vYQICcV-Z@2oX&td$ zu$tS7b$~vY+<@>`?pkt1taf-(K;diY{^D9>KLHG#-&UqoW*uR#ZC_-!xo)_}___z` zg>T2yz%buMctDcT9x_TJDr!S zOl(bgK+`iQ>?54s`~|`aqMIUMuuJ+$=SX>y8h&F%5I8f;ybF zkJE>@P1s-DU(Qu@P`y`XmGzWnWn1MLp#2Y$oP?BeNA4k}hI*gWHjkEG6Qe{21Q&P@ zxG&fhR+f1xG&qLgdSfrsf3PPWY5i$$?YQG@7uXzr04dChc@=>2CueJU{X_*YgHOT+ zX*GIHdsPSLEo};YiHg)F!S2PaE^aTgC<&S!T5rCfXkvw1757%? zR^de9sQkC6P<=?=R|2YW<|WD^!rn|Iwi6O&n;d)#1#hPRSlavdf}ge@Prr}+@#^P| z-;c^lFgtYTuDg2#zJzBd|IRy0-oy~`OGJ|tO7%nS9|eC`Bve*czFK)^m1mWQSDs$< zt?;~7tgbA}iPrFTGvs7WwhRo0CU@4h*v!Rhl`sAM`}?+UwZH!Rb>_Fr-<$j#^OIAy z+Q77Ia@O~8L#9~6Tp5YS9Lbf77c1(b`utW!H!6LuJhz&$+L@~LtFNilz0#}-s>1aM zRWV*t#NWaEKw6i*9B&_5=^5^LXL1@A{hsh+&bO;y4}R(QW#5+*U+v!_KkkX4cl z+bs9$(3aThjD*~sk>M3cswp&Ts&<=hNFlRuZqbXv_k|Y=w(E|eKQvLWb}L1LxkTm* z%JaO7=~Hoa=(Ts3>oV|WKO09Fuj^|V%F0Cg1OyXVaMPJ)&2x+SshBTgNCxt&a;LC(FzJ1g`!CZX(JNXK zZ0MJJM6Ujh`fwA;0y}%IWxwTxMQ$5z|Htv(P4oT}JPtnXSp0Ija^4uy1ZpAuGP?o4 ztKhR}y+keFB!3E>%xa4E%K3_pigH=8` zSD913)U?pt)677ZYE~(ysH!RsO3#Xq3of&pGZ@rH#6_9j308CmOo7h1bhf${qp2n~ z&oEejrF>xdQ~f_c2svW9X0J=ah7Ttz<}D&qfw?%GKS&&tS(R6jsP=5Wt)NHI z{31)?rGnP^I`~w)iY?-O{0p2q^#4c?fe@k(s{C+8EN;EnV=t^RM^6HvRhe zyQuW5o`WUuGq#tmQ@(+rq9mTHMqWgJz;z1izzzB#qR<^H_*BTM*b}}_ttvh&YEod; z($zWn-?Dpxb*#7aa>8GkYKi0F`o4}XqV>0_0w&TUWgmZ6`t|JBnO_B^_4WT6z8Ke8 zYC1c?XHp^hHd&n44z`|yxot%oC99NX^)+Y*5DNPibSs=%aI3(p{Q>*iI?CzNdqNU_ zJ@XdOVdv+LL8BrQaC<9(u~KFoXKH9H#HJc>eSeGyXTTZYqj>;q*tmB>s7JIkxjDU$ zIDz7#kB80bT|q)zD(5S1Di{3Ue52W}=BSd&LvjJk#NP?~^E+_^j02Q%5{Ym&?M*a~ zRt@(GlzYdxY>t2I6>K(ZYs)dqO6wC#ANv~nJ7+a_6)@ob5qcK+k$92nm9qf5tOfmF z=1J~ipyb~Y)s>!*0ZCA~Mma`NtXL_R%QgawtBq&^KfrM^U(sfePZBC;ic%|Mh45Cq z@7?5z+eg@5T8k~KP0LIh%t_NC^8m|pYh~vg*9q@`{?-vRaWS39Ba+FqeD)@wEL0I+ zf;&|W^%+f(b{X6gcA!#p2GUm3SW!vZNqn8Zn@eW!$o$;mv>LWYbA4yPFNm7m#+`=U zq(5VjKLAedYcIF1s4Q-FqHe80_cuJ2zOX!n01nwv}_s@X}jlOUuU? zZW-Lhik3!>D(*qPb#VIsoPI>OPyWQ{%aI5liBHLDD}QM=Av@3suw_Gav(UH(gGuiO znE&(<_<`y8hN>Zr&+P)P_`a|x(A(>BEqDB%L6T?onL>CM+z0-wHRd(eEnwC;=&2Gw zLyFkoMY|N2yD;Qz=m1QvX(i5kZ|&R#UElXTMky7e3;z=1`eq zDEA4kvW3aPkbbY|AL4oKklHW7r?4ElM;i^5jAt+fUWTtTr)_R0(R-- z3Qgr7&F@?=s<2hzw8C53A=--SUy8ZXn!?N66|A$A0eQdECGlS&m;btJq+_skxQS#e zf|SOB@}7pEekFDTyKC}-ef)uYfWJ~`G0aUqW$Tdx)Ccre+?9fD5{c}UqPuFc`mClM zB(v6Nsvsv+dlUls9&tkWmcN5zXB?m&Aq~t;PPL93BNgG^_m_tP`|hz;y5+ce2;RW- z6K9*Mnpavx4uN}?JLWqS%0xRQ8)Zl3A>{A0Bdqb<>w>ltlkBwuQ99IB)kZ{sR?>{t z3{e#-N6531AA*;>MeK3(ukeKY$^_#JBWL^;kH?|6%`zXtXJEGtpUT_mJC?W6%dir> zn&k*g{<`@-1!~5crM~Azl3UT|vnvWliQCA_l#|dyx;6Q}0!~qvq9p~J^EYZAXf~-r z(v_lC{H@I9w1!=cS1DC8S?K1DU{9tis0)Z7sZ4&1H4PU9 ztN66;c}|Jrt$DaPjwAR{+<;dGu2?_oOvt`>@x1lj3w4SvNsP(9AZRGl8EVc{aMV(y zM-=;DdZI)H+BVv&S|Zp5n;|OIAo+0dB|!miJM#jy12HetHnK7BpZl@BhV`tu9`@WI z)?d|+0atq%yxp52UG~vY)h&VZb+foHwJukYG=M&ZRmy!QTq}MeaVRM2jzG%#qPc*K zM_Oslt8S|H%9cXk6X73clUYh?ZPMD@o7AUxEWFpx_icb(#d=GLS!dpE9F2?c3D`?~ zn0b!nv2B%OjAuWX|7J(TiT3H;gsqgt^tv1eUm>m{^8zhGfDA$#LFRUjZl9X*vQZX-zWDz$9KyT<13h06qj!=Ygx9aRIL{p-eU7j_pB|! zTX{V^GJY!co{*&onTxn_fkYBjtW=v2xwct;qkIgW@`m{t^czA@y;n>SKLY#aY{oOn zTw*qDjBg8J{-|e?W0!5bIciG598M1Yg(lcKBhyr3`C)x!uiy^(8ir0rOA~i9c&bCUei*<|$ z1CJq>waPZzJPPk&9Ew#m^nz|_HKW6L0Y3rGjmGZZ-oByb@#f%*A(QJdWSsc|pJ=I^ z2luIF+V{HU`PB>lE3m>{_+M>IvsbZ7$`^Iu?O?5=Itjnh-4atmg+6$z+Li!;trqr2 z`Rwv3r6bG2E!O z+bsX!uMM~Ljmoc;9mE5rA`?B!EPER8QYpN zW|jSsQ{y4{JBO)>b*WtL8u=RoXYS!w5}ks%*CC}>)e^S$laTG`4Yaamoyr7Hob4-?N9dqwa0~49E{F(1GewC0(%=Hn@$sQP>w=&2yxU zu|S9my=#SIwYALj(a6Nc=_?vk`dj+@hHCh7(>gGYrQF>EOM{i;{W7ET?vU(MF>40z zhv2yQC~Ofhb&;kC+67&wt%?pswyK*eS1VgdCyGAvUU9}TdQ!g-DrH6{Dba$!0pDEr zF~=P1eRI(G9r~CEVZwf3=Xbsh8W4;ICiC0FJUQh#ce*^0MVa8C3!KMj zgf~M{n)Z;Q7$Q}Q)dHMzfMEhN!r9E#WS7`~!OK3X+wP#-&YNZeY1*nkjg7}V@Nay> zdt22u%z=0+2Q0ys@fYbUxk7T1I+*>6_Y-zU^AvKh;4VZ;(fiuoIu5uP4{Eom8!6XH zcZpVU@3A}6Oe8cbO4%drLox4AcXOEBdhx@CgNDue^78-mf5SJd5x&9n+G?~9_iXjs zA}bTFOoUKKp)!APNP?!~fb4_vs(KCb4r!__2bu~IZH>A$jgmAVa3!-?2RbPAH(@he?w|S7@a;GdmY;E zuk2apcxIsj=WQqaRt5BZ^-uNHu|~!up0X^ocXM6#al*6Xy_4s%f0O3XPXn2>MLDSh*;B+NG&`#^|4*@9@~`TO>Val~_JK|ZuE$5(>DtDc zhU(YyXOb?Wa_%Gc8u~*LJMTj3Xo3+r6WHZ>>1<~=T9_sSjvISmy^Mbtsn8RMn}%E0 z+c!G5!YrV5#1ikD;S%0ag7mrU0sJ%Kn^J~iyn2jgExKO2Ra=IR)h$5AK+K=%%DjGsYXa- z?jMZ)SR0d`?&zsO&xIcyAkK>TGU>9mNXu zxL$2YLGS3L`J8#H{h70qZ$t2Mbb6{RZw%!#?JR2)zp+>?`>dR(IjZfU8=c=(_g42t z8$fQTFQ`NEQ_^1oEpIgIDD5X9o;?M7&zpg?*Xgv{RMsjciRlTZ!WLnxaXWSqA7`py zkpQLeg{O8f7`_|FQV2mrPSMD$n!IO%w5W>wB~1R#swbm8(P`SFNGY_(g9@gyf!r&i z3fi%|FeX476F3>kb>Z^BZO?7TDx2Ok#dsWOp`-P3{TV&qpfScx5%WcR8&|?B3oVcS zPJhZyCoiR6V%_GCm!6QGQEpMKg9HVpy`pQQW9zD+k2QVO)8wtBHsN`AKE~3jk}BnG zOHYh3g8%s{xu-ZAK*qDaiD>F*+>I5%*}W!CGGnG?;L9t88v;GtD%v1r$~+|Of+o#f z&Un5Un($i`e9a=@47Gqyyozol@Gj=6b&5)ofr7sL8_fIEWh82@MQVGD9-8d`?rG>0 z*|Me%rV7TXSZ|<9L6!~tv^ULPY(pI5Tt;{b@u(sGIrE9IfpQ7V9`E=$QITwqf~Xk- zU88_@hi*BX-~T|{A*0oKkmoJ}|7H&siFP$_bQX_)3;z+A?)EySSOfS=;{ZcQpDZ7s z&*`^dG2<5eU+WutOAi_t7sBKE`kOy7>>KU%_M1yySuv; zx8m;ZZe?+Y#oZTYaks_Y3Z+RV?(Wj$JKx0*;A)%9yze>BbKfv?xF+=}ma3|v5p+IU z9d0>w!Suj~-p0Su=b}MeJa-WTN69Dd&XuOCC+wjPfxF-z&$sn4mzr7tm)onKukUEE z7(N=inLpXqI$wA;`j1A|#s4ZFgR4k>#^7;2@NbHXW!sdWQ3rYq(g#EG#z32m^8e?% z@|*N8(Eu<(&7j{W?ZYiE?+3GhhM^+=NH;LwZO2X3%@s{dc(eZjdQLr<0@brUcT92- zeJ?{tBg}+9GYbEKl%=j1Nb+kwgYkTC0@}hi|Y$0?i4zQOo3uwP!+r2#Ph*yl3 z1Or~Ka}7LA{+MSQ7Z|EQ!tA+Dfo0(Dz5^)Zd{2>YbeI$Oq!;1(5W9hAZUZkTek-e? zs*bdUd46-PMN7@Qr&+141q{K}vK8XTf-USM4as4E+)FsYWI4In)ngJ^m}a6B6Sw=X%(c|1|e9wFk>*U(;wT&lG}G`WO3L*DcQw|FiJ$*pAfV z%q+rvG6Rfnz4&cJA0#SycV#JZ6wZq8G*%#ny3~ch=Uy&vEG`vH7;N47$hhs;I-=rmv-pz8047@eS0%Ik>#<9Fe1W!9%oChX6i$!Ozug4_MOA>;Yl z+S1q`2oAG#qu`C+T;ChoI%6&KZ3mrSyied{T?gKUCkU&l9~hrF^Pva7Se{foLOw#) z+MvDwHue9|*+4?9skkIVR(z2 z)>kmpG;)FT#_~&;xJ(ONl6;BIV-FP!1ZKc4Wr<1yJ%r<$(|JYOxOynu z75LC+BZ~L(v>ZQeHKj4(cR45ZHC8cn!2j9P-xaqFvK|HY%wpp)Y%BCiJDEF~r(0`6 zvx(+S`+G;V@dN1%xjw`mlmX1XylsMrc%E#SvbNd-DTx`{S9y9(b&XKH8mIw<(vxua zv@<>fd5@5_C!NvmA%nN0`-DAVoo!xc(itimw(5Ih9SlrkQ*&e6TlgtX`L6gIL{BB= z!LGU!=_>_+Wbb=^FVP*K{a;Z{LBBw^@U6NG{SB0!b1JGrBE2SRz~9E2OW#T^!cQpg zm3S96`uW~}oDplOX&n|Z=yZ5JPxrT;Y#3ymYZ(B~tg1eK01LlJ^eI;pW{{k;2J9kU z6_Hi)Rra@XHTn?=s>`8seG}b{bVKd{rErb-tgs7r0E`N<@Xo9m!6dOR?P*{ z&DR7u#%@W~7+EnmgH# zIUjmRfpqX}OqblAz$ZYlktUgKgtLn0lYdJ1F7!`A zxmn;*zs_9B%@eK_mrD1`iORcZ0xeeeP@hGcAzXBe^00imbfoCH0LS4mrcu`u3v+i; zE9054FVNSs);`p>%DfNK+IteJU^e>+#tjZ<3G*1GBH>tWQkoVY7dH7ec?8a; zHaRptR~YX@k633o4h)^K&GZlZQM3;%~ygU;dX=ZeJ=>1M?_ggz=}SD6^(1@5Ky%{j>uCxnhwB#9%rmajcQf=d z=z*Zz&HT5esg3B|>RT9i5S^B|l_|!}A+4ajWhJ>=LRmK~4?1jXFuj2F~SgrT|l>Amr>;Vu5o?v+lj?Wbjnv8C}cv}oc$A*o>OX)LqU zwNG>2b}tJ43Q^;{3>kl!G>C?0t>cPCdx4rXPSpp^S04vfOJ8W3y;Q$Y(N#J*CjKs{ z%M&wq(guL}7|RqTdWKI2<({vO2ewCMym^SJm!X@Xu>proF*1#aWsPmGbE>CpU_>|> zubG*at4-2Sud{Y@x(f~ijbfc*JTej(n;Pf?UDI^ZbVKVw@4AlUu`tN}%9hhxl2QEr z@*c38suWCk7C7JA_ggZiqu3H`1!N<8L2B`UX{H%xtL@D9whfRXJLAh>U;l%!l)9CE zfjdfYRdQEWq@0Qnz^-ypJ5Tclo+(D8fvURVl4Pn#$-`JP=#xk^rFEeD z_Zg|CIj^k`Y;GO2m3OP!D&|TriqgD}tY-Apq=$HXc{GuWt`79}ZgDXjLCXizK;vh_ zBttd*0{vU89T31bT18HQdzSxo=&z_f*(iG)Z=(>I44}R@5xb->6}OQTf~k7}mvXj- z12mOos>yPk)Fu4QAH{x2n?(7IKT}>cbq?$#0dHsE8#lICjVH0kSQo=#Ly;j5ep}tm z5lfzG}Y&GK6b3M4goghSggnZv?17jronf806Nhe*C?MeP!Uq; zN6J?dHj)oAX0hpfp4cxPso12N1caVBa7&N?1*$J(ZVTmKWlcqwc{?~4nBOVO2w!rO zQ?H^MLr?u*+)cr))5sEr?bjcDbD&f9G2Di~`cq3g`*)|wGcDL9(l6DfTtR$HE?|u3 zl<_}^X3Ad51(0`}sP>{X$n{214JuQiiXO7L;(PozTmq{KtqG}jZhxj;qIRTN&urN@+QRhy9p zn%(M{dbDPq+J(qe)c}Jk77rA3=Qe@#u!&fJyPj#EY!~SkWcZ%Ds@O+ZE}5zsTNvKz zL%PcP6<8mzkNsyQItO`5z>Cl}-YZiJe+PCh6WRNC??g7KOz}`T5B;ph0h`;UMo=OW zP%cxBl+}_H3g2=ZtZ!5mnLrqxH6$KKa)84J&7O`fTkGUe~%#CC(9Qy$XIoC|`R;@`5P%4Vog z-5fdRisxjQ{0&qK zko)qxl8T~2o`-dt_J~vmKe~KN@=)YVsDfYNu{-M6u3Bmt*O+iH4QPq2#A3$7rX3cI zeUkH&HyCIa`9IxeEv|%!qfcWu;~xMbyIY|}mZ%2;C*lMot!HSR=o^(su|k>=ujdy* zdgeI!8h&J!k<>=F2kZI2yZ1Y1*p67Ln5AY9_QpUn;-Dw_2Drd3+jZwkZ!Yj9d?kJ+ zJpnhB^o4egHH$YzR8=NaqR{5&XqM+m^Sf(bX?kkDLLTp;Y__<%0RCo-*3@$RU%3J4 zUD4qokuT!j(Fj~IPnk%6Umr6FO(V@)ZATmm zAluFwr>Bh8mP6sJ^2(2mdvnWG`8!{`EZyYjibp==!R>sxc% z(C<)`giQI$RO48c5C`ssdiyl%X81pL8EQaUV?A`V9>cS@7>vOSpsh0%SXt~$bKEpy zW$IU^jH?HNpkG=A=6+UaRh$KCl2zRdGMMvJt6;)kQA`oEW*5-$l&b`4`HXbUc;C=g z-z?W0+kVSH%WTZ6{{g0oe|0sn55~FXTh>F4hMu4PU*SFR;`FQ>m-v!4kXgpr5B{D{ z&}UPqS|Q8P9qKWf?Wj?`3K@-vmDRx~Fp9sAYiBU1cEadvz2uBKotTNLR zYz=HGp6OJE^H@J)4RhG~-Z9wy**_~pi8oDG%#I=yP^vIqa(?i#qUJEQMpa3qFKSo+ zgrDO*oFJ~NCMx>Nk3)+w$5pYeQ0Ed3;WnpkMGuAM`6jtX*xp*Mg8@aZKdOJKZ)v!P zO*Cycb+fH>Jc6D2{@~Wwe@R#QAH0J!i2jUS#zlcGzf{&$$w5SDZ}k#wckOVXh4x1e zDL=>yq`w6!9*$L$+J)2~IL(phq)=@i+2yx)vK}@ygJu?rjW;wg62N^NfJXFk$8^^> zU)9ju$iC!}Ob&O7bc$M$$>NO>?h;evPn6455740cop!CJ6e!2zkcX;y3Zb;Mu#ih; z^`X`$p2}`cjt5g$x$lLG;;3Og1j&GL*nYzY{Yl^w&`mAPuVA-2-aX4VH|UPA6Yar8 zO(l1sS(q<4y9Dbb#j=%(n&>WctLCD%K-*S3MlDw7A&2FKl0(8n+$~HOO-1@An@x!l ztwWT+C!n_uvQnWP`x2`M_o>T<&c@y*nx(aEi+z%-v2UyYW>}dxmOcs8fUnd7=0whB z!D{g|X-Cxon8~@c?7WLwBQSyGsx69x;MR!>Yx2f2%V_zO49=FRpSl;x56$yl0ej&+ z%Pn&pYhftRuh*CBd+V*nKG3#r4;-tjaLU5ReXwU+NBWO~vKsQL2on;KOsd+1bWryP z^UWxD_TEKnBTW@YWlAYiSj0ca)PWbFGX6n1Ewv_kJMiAq(zOaQa$QY9j0c?~A>2eF zh7IuP)mu+ES9#y~)<;gpzNAm&YLFID%IW`b_Xzfjze#H;)~R{|Wpg4hBiR}sIv2gB ze5jZsMa5+3nzdv2NWEcKQIzCGlL5SUg9EYA&6B|&ngN~>3#O!p4E4<;t>>)`U86j& z!G*ddz6TQQ2MI1p4F;a`nimwlmg?pC$Uoq_uBmMa2A`qOI{JYym5ZeBMQb3bT$S!6 z-@-pi%ab)C{{{-ZwOnWH*UYC(n~e|PleN__#lQqM_ZxF#dzl>tR@Q~!tk}ooknBdV zXnmyXSzq`{u|hUoISvvO-Qh-9UArc46x07~Icsa@_~_#L@`IlvdlOwUjqvwKZ|L3F`Ftjv zfF>)WN*;7*2Q@1 zZ1{A^S}=|w%p}!96yb^>Blk5T2yJmEoMh`N=#FEm~WD=UE>o z_#rX_?3+7s-$-)$MbhKpSup4Cg@}}RSv$z#_2HdkjH5}( zb@8(DIf?0!>HeRdGtSFEyqIEo2OFJ`jt8ILHpYg~FMMY|<@kk?!?JIR&#FskKwY99pdO^%te%9Rs<`}vq(I!6KZm`Awvx0Ik7Vx0A4aMK zyzYk%yseR0Y)l&_8lr|3hDxyi>SVfW{$Lvoeg0Daxo{w+ggI=A@P@pf@eO8KHAODz z0oWIILy2kx&ZHC|AWT-1RcjP7**Nh_?sfKk+7r?)96vKZelOB9Fx2yx^RZQ9>ukPa z6hWg+hAqIxU_;CnOV--b`NMU^e{6}ElKlmobt8_dNdmR+n084cXqK&Fz+y4HgbUMr!~wr zY%_K@{jl7y8-d3q3iXI~O0~_hi3_QD%<5sgC)=s+ zFTQT!U$H%@cUdN35&0zJ0((8bvv?cijQWDHyB1mz9SzybUFcPGA2cN|$##kt2>x&m zGfIK~B+c$jPKq@SP4YE{Z#vI%)zlj^0&lvb{x#UA{Kh)K%}zRU@PA~3Gh*9Q_Hr?y zBIP`-FKZ_^CMblH!x)tby$aL)AKFb?hK8j1uKEQ;_NzdwV?h4WN1loMT~1GyL?yvX zzMSiky`A+X%>7my2Vo73Z0rFx*tp!(AI?9+TshC?;Ph~v_}TPGe4KQizLs5wKUH`i zHn?q(Q)nR&VNT~|G-uUO*tA8Ivt@ari~J&X9fpT;n&8jYPOp!*iEId{y=iA#aP1B= z4>k@rwAU-al4v$`GZusSM(T{amj>2Hp2pv$rGz}V7rtjx1fxZJr56?=Y0p`(;%WLjB6v7g_LyAe265mFPJH*+%nEusk=_P%h2ZI?||j1Tn_p@Ey!L5mT( z-5A_LTDa&wVbBQa15MV9KSoy3sV?* zozQ?;lG71SkT)`~aQ5&KaS-@^qYx)z((Kl>2Zr)*m|;30Tjm0fD2cCSRi#}Zd2`jl zIEF-|{>z@8z-jJb-DyTlW~>-%YWN$@Kd-^{IMlJnc^53v-$Dg3WlEQ=NbE=b#i$C- z?xf_8;<)kvvQjO}tD&8y?X5AZcfcfzD(@_b3#V{%%p;T{@~+&$OdQ;4(cm`U6W2U@ zA25R7HGYCK?|Rs(pTa1iD|B+z8@x$_C~!etY2(Nqxl^&4!snTCv&hX=4H0C z_K16-uYd4rv~wzynT2~q+6MFksc?fRD^Vy}XdL~jS&-+}&ID^g4h^Vc^6L_X_#Yk< z(yCJ^5&}OvI!%jBgRI75&o5gSYrygW8;@PnPtbpZeQ#b(%N8dEp;OGc7VS)epqBn)X=!wU2VO@J$brVl$GZnG-k$*-tBB)#MF= zG}9#cEF}?gM!hsowN12xz+^~9d#U;>o&nQw8wX`>r1U1n%l*)ASsq#ySm5d8D6;pn zaLt?Gw`4Ljg(=f8=)LJIpKNwV(mmThBis=_y$f-dNmpqGW{Ouwv>e{I0o7`CF;Gqp z0`0$0eHM8SJNs_3(V|*{B5pO-D=M3`9*3qY0KK)JU+Y=nTyCpm9ScmDgnp}Tu>OsH z3(RIVSO(jgJI6s2tt7lTF+4-U6Ubzm9E=-hgapYr*>~j&)hNiMcZP;938qYM!AU${ zwg5cQvv^b4YiV549^9)`ICeF>E)a4#9F=Sg^A=MC8w9D7!GeGf1N>_$a>Jc)A$ur8#)5Va}9RGS8-1V~+QgLjr)1qy$Vb)M#@><7Za;^fwtIq=n6 z0a*X{EnzHSJZvx-`s!Dg%`|v1ie-v*gL9$#t$$f)DLfVJxhljT)MLyNZc{!<@>2e< zJgVG=d{b{%w}kJ=UUfyJu4;f{r+k;FJ}<$Z%W#s4@N3HZCwc)NMCa}6Dg=Xbo~bf+ z%J2h@OTBBeB0TP^6khJ(`Rpj5ByQ@jVv_GRoZd=ofO+JbxGHY!J-pp&#Y^%Ah!F@V^Dhwot% z!7=U*rjXi;aJBq)@>f(J+yeK)XEug)kx6WsbF#AZjP2l712ofccjQo*<%2vhA0uk>^EyY;Uiqg-n1?R@4502f%BSd=|YI6>CY z|7D-!jTc3vYvomyLZk)y0GtTj)Wg)<&_ZOa@(?7ArVB@M>$9Fy!$e*7S8`+gMkvq! zmy6@bSw~sw8k=Cx^=%C^;AWV_IA)%0k|XP?=DiodMMw!xx)QDn$x8W3KhJ&1FP113 zXTX&=P2@i-bz4T>enm4g4ql(0wo~ zYXOwzzUU9-8(B=+P4JGlj;*BY$@TCLGoO>aA}{;|&qP-kTF!Ie7P15GY$5$}a4;+} zeFP7Y%rz8z*DE3)5>wLFtbrJzykJ~nqrx#_vHY9-D{>nBqoL;Q(0pA7rG@t z-dh_xmCEIg5UsQbb2zU(qz~T7OOzSa8?*y391f`4sb{MfAXSy0Wg>}5Se4(DJ%RQf z-cvQRTa#O&twR?fwYbhU)ASsA@XZZ9bSYgs{X|GGF0#C{>Fr0ohXSj^>cp1xXf56^GA5W@}x29!@4-rG4 z#5cgLw;i+V;57XPEVwLeC1hKUnc?6Q|SoV zdF5ENrDk2;b+o-&qIr)thgMrN`8w$jp^$%)-I(!^Jb^eN>qv3p`QgpJ_Tc?nWjg~; ztati~1{_S_-@w_yU`$#XJ1)BR`k#j4u`Zc*Sq#69yqms*eU?8>=#l)8KUCOMdbAeo zDSm2bKzyU2SApViNqj)Klk&e6%O!02LB$3j2(p2Bu|;!A>sSAcY*ZeVvmwpIhWpeo z+9kr3TrzbcJ}TTKfOsa^JJ`rphq;+?3zi3twx!@){bj6d725}bQK_qM59AL{WZDBm zc_O_Cw!}6eUMf(?;be`6&8h&58}l@3bqC~|@{TMa=_r`Zf5jX~+f3et>yw!qpA|mo zqj+XH+uO!lE19F%e8X?B(v%x+V;8}O(G84}*F5`z#gP>WM|upH?blQ8G7oa8BAvL8 z?72dSR0U$4QCmxU4wBGdYEzX%$K`;qDR&v`8cj{gWf!F5aI#()nCrdawA*%Cl;%s2 z0BU2H0<-sov4?5DrJe19W4rsT?@MS&Y-qX}5bJu=#<9GR#2X=5CabG#0~yb{n#$_w z@D_=qboCc_08EsW!qnQvUP{|YmH@L?mIy~Wz}@qsGic>lmznOsNv<<&)cL?Q@*3w` z*!DTDs$R2yX?SM5cIs-jI$73EWY8PJ0insxCl!$j3<{ zLOoB;ZbfTD>JGoFy~#n5ULmE=?iy*|W<|^|jMK4SF!vj72w_!>3DaUrci<-YeRo6O zVhxk+vh@gJ>RILlZkjhtyhN5zOh#Ix1YnHc&~yhEt^paTs;|5+ohEL;U&wyXXigbR zIGuT#Xb?Fcr1;{_+x9{;YUUd|!p!8Sz9r@}Tr=fa9$8b4ZLU23lwjRx&y+p$4PSxc zr*CC_Hjj=9g8o#47|k7^Nye6OU1s1=XMxx)~V2M{Xf8YOSV)`v)e zLvFTnkM)hI)VLe09^dtw^)hUc@rk)D+!5wM#{`&8SJ=^BPM32CMVz%*)zo>w-O{f3D{k}F}c=(~ss+|2aP#NCJ~_`x&4 zdDL#VbTl)JNA#!kU-S{(9c-^@p=H1Ap<{%H6>Jc`nRuPqkV_I@Q`)i`abE~)O1QG> zFi$>;UWGGh9qm{kwph`i>YU=4^pm(1zY}X3tq#$P)1_fw7$F48Jv7%1$3GT2Z0)}Q zv92Cw!8V%krh1lQOHIgl7WuD-lrasQvZfPIYGd{r9v9e@yXBpfBT+Nh!0eh`YCHJG z1gfSgru?kzgt#GWqOFXb)CPoM*=#}*eG@A53SDN~d&^woWVo$K3=IqlOpf(2ZMHtL zc5#I~YyGs4E807`KiiJD6nyX%*mwCAp~wG3?o{dEJ1Eiq(tgu6*L2lTRYmfXlGj3v z*PNB46Ug20tFtdt7o($qCqi(qbqumGEF6LZSEPx$qIw`q#;a+bp>!m!z{_Id%7Ps093uo|rYo5P zu(h8WwEOP3>N)h5r;vR21DolAp%xa!2AejUEVh33{q8HCxq-8h-HA|nMSK_XXL@h& zx_U)}r6Oe)bRuMo#>3CD66j)Iks{SYc~Dv+S|gam-N$%C$tSJCani41PeZ}LahL#I zw|p@$?%k!bJs)PA^nZ^TF?UU*& z$Q0!d`BiCK(N*qP_P^8!;V7;+eIZsMaMEw}RCg+EF-sHET%#E~0=#LJu`|rx|Fzt; z6}r}XCi@#j;_*)9r*a{p31}#5c@IQ2;Ax@;PV-%0EiTgB(B4E56jMEy&zAE=Ck0i{SGc+&%O$o9cm+0#7mAS6#rO0~+?CBCJ^!8-q3 za7J=Xo&!3~31~2mheXIAtzG>b`K}bnZ%M8SqTI&p5}J>c0-q9+TpXPdsO#V1++w?B zmBKf@F%YJD=!uXmM2)-5=dGoVeeQn#n&I1t+o|q3K5;6I&icW@3+{@SNLi4|x{DrG zFV*m1Dz`>juIRL6F0%lqpiH5=*j@SE#bH@bWd~$EdIGYSAJhXh<22h)yXupouWW+I%WuZ+ z&iI>pkT4`SG(9=KINU6-!u`!Aw~jP9!4X{*HimBvMyO1zJ(K#VIZ` z$dF*Wp+5%i^_norx@Ej$A=_s;54w88)@@&3TzA)B*v$Mxr@a5bSmR1*COmXCi1l<|e^IsB877t&q| zyNawvwQIE~P#xE3ZlN00Q5i|b5$)r>U>%@VB9rmc$}`DRu?pcazQ5d8>{o3|&5Mnl zFb&*9s_Q?4@w%aTj8z0D>)U=wI6wX;buB9(_NOu!`yl&nhPzIIqLr#SI7(M)ZURO5 zyvC<)hP+d>lKlXSD3Ox|#^!mPq@0{O9o-Sy>C5wcvhT2w%>Nm0!*`I5$qlQpS;i`+ zCYGG7lk1pw0ZdL#BnzOe!=ltA7c%@vG>>C{zp5Yto-r}fhJz#DRod*_n1`N2*u))||bHF^ve%e{jlZ0=` z_$0G@IsQNLY{n8!8~!KJQSl?i4pjv(76{=DqStg(%QgQ1dGD$8DCFzsaevcyP#M7b zPbGH8NWq4Fmivd@ZxvdorXj|v*mdYa=O91x-8|1S(UI?J?=c2CN5%kUd=qX1c`KtX z`w-tPnh(FLNyy*G0_cuchwu4#%@_0m;)V_GU?7=e94<3U-9Y-B{hsO^!-IdkqMPX4 zXuW3n2HV0>kbFO&XBxj@x6CH%dZ*C6+ItpGq^a22^d)#t-KXWT2)ud1?=Xk`q!OV@ z`1F3ztkB+3Z$?+EYzm{aD&#NaJUMF~Z7A_KbmpEUz!M!vdfqxrwuay@EQGiEWnBPR zx0|sGrr%&)9pq}`Z4d~C-^DwpcjlS^d!{dI0B;Fj175Sy%GZ$IZw2|ERWN5NRNqAg zLX&2j_^TkvKElw@S`Z!CgXw6zBs?%U+q>4)+1|=xH(46)?ox}ElFXn`^ zt!HCkPqaPs$9cFTFn#whx^dqNYKmve*DJ=MJHbjkR&z`9L%Rd+I(a}#_lfbsTkuVP zPIVIY<`0eQ5@jJ`6#A}3BdtQLuu2jFFwAb&+KZ?E@zYP7V{`TM3oj>FyKYtI^m0 z|GK>X-I3B10e6=4fKANx`zwH9sF$fPg~Yh(NJ7A<@fO4;$Q7b_$6~odi~m8D$+&uea&lZH{GB7 z?ZRD>>&w66htR694)A6`BL2Rr2>S8nd|8E|6;4!?RIXBCc>$8QT+;>-DDFt=3m$Xc z&_9q1~VmRY}X7~?|e$?Qz)MDh~}xu=<~sd8ZNjs#-KXx}f-B$yBT z9YSZ+9(B}m?snaD?sWg{I}x}M{287YyOHcyF2}vXpC)#sW@wdIJ=kk_%>@-iOT|1f zPS!wrS$b94LsBN*Ej%nh_*2<4nReQ4YCf4k?2uiU;R5k~TI5*hhku#BwztH^aJ_Yc z1~df9H1G}!{0vWz?vJHXD>C@p5@LpQhT4P4VvpeVdCHQ=B#~n`2i1&#!3JwLQLOahy=U~?;XAMUc z2i4Ks(btK%?|R<*cK9oVyGDP-N)v_U#kos_Yn0uzO-wmw9senRifE|hi{x+Fb=h6n zayeCgO;T4fR=iBO63F43fl2?GVj`$34XJtP>S#;(=DQ>{4-r+tU*lvXIKgLBllJRb*{LL-RP> z1NX?_nAn+2UqXtyoz+F?mNrGMYOfV^tMs+Xx@wQA^{7U!Uajh+$`vbI%UhwYt{4f9 z=ogF*l&$z|dQKGcC)|FUz)UrqE!*?!@h{oWEB$y_zlB$Lf*jd6h)@PTEg=S1^wgWad-b5|(7IrLQIEk&Pjf zm+e{TRN3^FH9%)+Z2oE5VLoE*Yn4N@Wr>#-*c;js#U*EEtKeG@CsDrBm$7?ruk#-Y zdy93Fth9%gLH`WkGPwtoxsl<%z4DzNdH2uMCyV+Ro*P!EUAM};mRQ0U)%Su zXQHQ_=b*cao8&s+a=Kf4`GF$=RfrXt7p13urdnk_;nv|%@K6V+br@w#J-Y*UDQ_u% zlc1x($;XQ#yo3A@&%wRQ-pJm^G|?u}?vr!Ge{g4ViOjk5>STq)_}I!QCtMVq<{urH z<>LgF`9Ap&|7L$_;6bo$Xi0cvtRz;L2&Uwj8T>I(Hba zKCcnKj5nR{^Izb@c6W31ekN!*EqHL7Qr=9EAbYI zPJCMuk{lGj6O9pd6wKgm<*sIBX>uw`+6<@09m!?!(_oxy=g)XHI0pfff2ciXZD8wZ zy=9}?(~j>>g6A1<*c8!^i4iF*JAwF&a)>^ib%`71&y`Gs=EG)H6m6-#js{U7a!YkV z-a__O{8(t_ePSBum&iYH^~!4`r$-J2hxleYyW6^&+nQTp9}G41L|t0<0l1=-O?1mR z*cQ+9o(y)6wN9IJwMe^YpO|y_4I~X@-Bmo;M?NeVTH$1c$pt0(^9rbWEx{-8SYAsa z6#QcI=)FkSvmcVfBF6#(_Y(U>GuODJ%vf6E_wbVN&rQFMmt=pvFTJmCVrppByJq{4 z@S4Q6>_^glx{iHWuwIr_CeUnN&x#`|=T)g)O;T-h)%#WURt{F!ug#zj**N+@(mJ?% z9*QmweuND45Zg}3EQ<6~%J%*__yVYaVDn;MN2_gf}NAXP*HPuawn{ zcTyyft7dBc-v#FjyamyM%6T?z7nqWY{Aj!H}O{K8o2~KiDk+fs)w*I zo}{cQCqPT!m!L8?kEMgO-xK1>+>La8(i5E&CfSSfQQ_%vO|pLZbbOZ7j=GlBgv%FP7lp+`W!L3jlrLdRH5=)Nh*c{T2H7#` zOQ7QR;#6Qxrtct!bE|+jWQ^PiD!iLqeH;U9Bh7bVXV?aES!)dEuurD-<|?)xj;zP- zTN?JojHx}jL(n$c$D9Xrrel&8vbeG~Y!R4wo;+FJXzc`zM$;AA#BBKiG2oQg7ilXf zo$>24?GoR>OMC-ZZ^z89OiK)(^q$hmWwXjglr7R72WE>B>^e`~c>kI3+N3?R65oov zi-~cz3C~K80qJe1W<%cng4q@B7Z57UFQ}6DMAHS~LN_nYKLwQWWn?Q3$$U(74L|f5 z-3RT*%)i0A@V9P5Y3|RX(w%?G%eujBq`rBTo#eXbQ-vSKccr)DW#n@De9lk7D`{1j z?)!naOV9r=zjA)3g3r(j`mAn=jFndbzr!qUHAb2|2fW9kWC!>?9rrO@CvAtUf0=4x zW1xB4MLz?m?@zHx<|elKj*0I6epM(Et&tK!&S)mZKyS}o!5=DuuA)o?42L3UNJ`ZE z(G6%sHAT@9K3DC9TOlw0Fa0`Y387-PdAc9m5H19I`|{m!yVAbUdeL;owB9t&G{wB$ z+yOcpvs`byoBW}`%jkoIEQ8ApC)}dkr8$|~xn~7RF;4nj7F6s~K2o+*j#E7Wp0rSY z5jv$c1oe2gSO@53l-IB&u9!(CW=3_PQh%wtnX|;c*4D(@(bC?WG_5f2H8->1?Nc0; z+>gD7gVVwWunR_D2Bal@rgdj-;H($)7RO;ib5L~*8HCP8|DWbx2zT|>vYccKe6sq3 z+x{rUK&XXVncf^<7}^a4s0uEe;gSAy8Lq75pO$4kU`~446f{?{o1FCm??YJp4KR~> zk}uK50r~Q{NF>_!?8>%4IEp@GY68;9cly;gCVWWaB zA{j7r#wpe)cY%p-2s%$ys4P}ImkpLGC2N4)yN*R?q$sNiU30v&E%qclD%j6Wao@Ff zw=Xi+HZ?b%$EZez3Hm3dn7Pna(M9uC3zoq5@HNb>86+N+2%O_>qBk(@&8g^Ue`t@l z&fll427aBRXd~3A2um-B?r^6AFO)~vo4t_y5m_2K=_zs&U~@DD>#Ogm8~G$w|?F1Ft=Fm)|nW%s1UO^n@<-4c%5f2U~6YY&vQEV1Mkk z`kFy&<9d2@?kB#8GJ&y`bC5SkR3fPfr~gwb0XiPI_4AQ)s_UwQikkAFlC1D9kIn7} zeC@h~1-V?ha-v0Sd8n~3?z!yL+sf?MVT)VeT*o}$e9eN`?%8fSx_aJuyTKiLQQVV! zTHXRDAs>Yq|9AE@K1rM}nIOBOPy)d!iA0g_KzN*`6evc?>PcS-E_1`ITJ(HMRl=F_ z-l>Yw-k~~vmS>~=xkX_{jH59!w0uKAi=6><=$00fP3%f}Dg@uej;HdnVqzCsH71!` zK}3?3D+0)J&6vEac}MgA&Yz#3${VIls;8>@!=^2t-;RBo9)r`?id66D$biWkbObC? zn89AtU-|R4bWv&NKe4ihx<1$fbKKh1xybiV@M3gCYI<%Z=>xTh9pGIT-;@5ODnpk5 zQKMFVt^8JbeW6P{U7b~3m9wSoAr10{aezu9wkyw1j*WXlW&WJInS*YdXr`I^K(gVK zfr`B~`i*1E!)DuX=$LtEM97 zl`O@3*%9eXab3Y}UN!b0cxJT%uEz7UC4M|g4vh#r_55=Fa*VOgvWP8#E7^cb}?KRxB zeC46WaZx6on?v4DLtxfxlx&jasaWc1n#y_c{F8Zaw2vUgZ$`css-e3$*2g@APjkX*$1&xxRKkHeTY7jT!PP)FG({J zpTlf_C+|krbJ&L*G?Pszyk!;eo{3Od9%O))sdMVV zd5g4lHUFu3z`38I%t;D?;!w*}iE*lTlIx|x3(`xs#! z2aUXO=0&zTj{9($uN~z6-w~85EPsJxQ99Bavu|_y3EqibNPjD&syMO-lIaTcB>GM@ zK=qemleCd|itrw1GOGja4oQi>o#_{sMMeeJdn-DF_5$ly$l^`Y%k?{T6(JeB-&k&} zXRYP%!tHo)I2RiW%wyM^kxv}Y{=`Yhx<5}|q%K@7Rx|mV#QlR!;ioHy&&V3|w zpe$n?V}Ijy6b+C{6;Me}@EO+c{-5#GU)I5=wUYmPLUQd6+e!@q^QpG6M zH{gBY^AVWwe9R-|@7Ih$w!wt|y~M(A4rGG6v5{>VRKKIEUF;U zYckw3$g$Pt%a-}}$FFA(A3d2olWCnRC3zqb+gxx!GE**AjYRH)L94&Ex^{wgv8Eb&2?#pi z>ku~OX;@q6Dsn|UE?p-vD`E~T_1t#8v0>&i<6`W%;j_M`;RiV3+W`saU)wjwcX!Aq z2-#!5Aainrc!&CwIgY!5?-G~FCMhRDa&f6Tt)^)DsSWBPRHXVPPe}#{8N6kz6s-?= z5VT6GCWb_Z1@pXbU6mXctsKb1I80-;j_!GA;Q9dIDC8 zm41_5!0!MKxLT?OswL{7>Y0!YsG;qo>8tLjI<9yw<%|0AH?ZyCnQKhYWLG37#8w8! zdAmEC+N)b5(7+uIiK&xiM-6ig6cg3_-5PeJTyeiU{3~isUCOi|T%kT@uHv*2=%;NvWImp0MO9;EmkAR)yT?h#nTv9vEYJdd)RLCvv(+x5_&{sG9 zGRCck?fspN{r}_WEc~N5yEeS;?lv>KNeJ#l_o?E*9mthWr-80(My zf$l>xnhL5a^3GD0;3WGV^E~BbZf*Kpyn00L9|Gn-yQ7EIZnon6Om9p>AYD%}Tg~Te zcN{}J9ek5QWswQV7nz#mr!)zq%S@sU5CWW~`V;!G!?8KQE(?IwjITe8+|v9E4DhzV zjqJm##PU&fu(j`=R74gAe|XwC7lLQ5KOw|RP1j71!Fn?Zn7Rin!yTVohrHW^{i4ki zM1~-tbP20O5ESi~T~jpIG}FCAcvus?y2zq$WsqR|k*S(Gs^8@QNQ#ABxJ=do>P&LA zOgb?<+$eb4JHXYvcxCuKM&hR|T3cVoI+xe`bMQg9G}$)OuVA9KXEo>c z6^@nYl_S*swNG`A(T|u8@}0Y(5%d)4ul=Z&D_=t=x&j|zucM758?q}>3!{GqrM|(g zv5pArh(ALXcDixb|8f*~6faon*`m&byMN%P=$?4@%w&?9R)wYEnuRwcqm++SC0ZFW z7p<%B53{DGkWoH?%!dS6WkI_l~q%=QP0YzEx|Xd# z`9NREXNYo=-<3Di81f4JjQyoQU-Yynq0j5b!?*CL<^?o@PKxgEnz1$lAC{Dzl6)Si z5K4IaxobNAvTZc4Hs2wJ<0|4TWU@M2K3P(>FRnbK>r2BixEW5#%7I3QW1O%2^oSPZ)ZGa5rvT8sK8MO`UNv;jVmo%Exm59tPp!QuV^i|2ReD@bZ& zfta++xUcMKIRkFfhX|Ino1@5m$Y%)8i;Ybm$SbL(j4Hf#!eVI>e0iTWL!kS29XqKX zSky(|6l;WvfU8nPe%=_1Mh7bVq}>xXneYiA58-+=Pe-RzS?OGG<1~hc$pP~PTwtz43=NCc>8~LTG-1U7*(K3O?g~~Z^;O|q>TDc~ zR1Z}5)N+inDXsO*4%5#jrm+d+_iy5Ki^MwH+1dS{Zx&=cDt<+3VQ55%O?L>nFk0IInfbuH;EnSq@9_|&G=RM{e zZ+`&U04+YqbPt$y(}3P#hBMGy#|C#Z-}~U<*t*oy{B=qT*r+WQl4X}vrNBJx4e5rt zhD}9jLmT}g=pFq4Gv+jfP&Q7`neSjeq5e`hm&wPjgu4eqUcyn+G1_*_Oo4adNunWP zH1D_gEFbNY9TC?)--_VP2$9&EPUkO@+A+#m!}t@#K8aWHSUprjLbswGJ>9TRUk3|g zL0w&)ULBYJBIzdV$34S5Pn}!RR-xHq{|&Spqhr zmt*-6@b1W)vKf zm%Grr<~sM<+~$Gsn^c8QghkNtnP#o!Ak5*LdwTlog?dFV0-gJ5;TioS+@_|A?no7i zdFp_+G2#ZATtodC;0FARn$Y>$rz(zOfFv)R%)85^Lr1G;CK|sLt_i*CRgm$VZr({W zhkI>1z#} z3Ok{X=!${NT~jqjA(ZwOmUAjG-PC@C9huF^1JM@28o>AK?l^6GVCiVt1D{9}Q`|Hh zQqZlfIve70d+vdCUY>MkLitMYo+{^j77UVZQ!+KbY1=@i@Qprf*kv&35$rf}9|&oS zp^MN&1lcX%e``s!%xdUK&IlBH-L8uEo0e6Uhs0x|GNdoRnEC>t`>gdBhtXBrHxM!> z6_Rnd>(rs%VZ_;6g*-_Eg+$HQ)I)zmI|0+^Eu_ENVGodzK&;!VGFV@^ zhlIza3T1b7XE-a4M?XPRK&hXJ9YVk9d_bYyAU`J^E41;3v!BzS7oOyrBn#2qA;Le) zV{rOxSxcUHi4QY11;SJ_VyOAOS!VY+TDrISehtluT}++Nf23q+`?<#icFB7AG*vTg z3v?kC(LXnEi%uD``jx005oxNamPmKQ?~!KR0isbNTPwLO`ZTcB+txM45wof-&4C4^ zB;FgR;A5bzJju4v;c!a5B_Sm|dFQ5#c{{l|qW~2CW)iV%h|;3ojch{%z|78J)AWsi zr1MfI)$Ui_mY#+z9`pb2Q!5JR(+%R4LVEuR&rHWFYh5#+pqPwCh3T1bjcGD*)~dI< z9X40a-#46%waHx1EhATFH0A1rUdd=#EmaKmRIRc0*kpsiFiig%?Sl-_9aCRZ)|E-b zZvGU`bJ`GcwZgUx9={*H>~HH?4w>=V)-mR(#3R!RW1aE`CMgjDvg$!6?q1?=8mSv! zn;B5BQl-oyp!=Cbd1(sL2UoN+kYQLHU5E~bu1*f|>jrABC|Am=NZJeTaOtcnw0ERk zkfUG&-KL_ipX-LbniVr&Grfm4<|QNB_{7wmU|AN}N4hS1e-E?(GQqa&2J&J$mD^ab zKzvi4S7kK25k7X-uvLH1uoIqGE79&K1%AdH`6KZGzKy+#@h{1kUy+&`-yG=_=;EE= zHae!-o?6P`onF_}gSdz$~S^@JD1w;&XaKK~7~cD|5NRpQY0k1vM41 zphoO$QPZMdi+(e_MSn)SX{~S%NlSJLQQj;Dg?b1wx9Rx!NL7E*ecUOr&$E07S7m+t z6~4$+j4!pwEbZ(|U0ppPA2W0qd;;cl>%tvsedb@>Klm2$6nR}`5A6=!VstasR{vdJ zOFs{b0$F3VX1TH%7-~_zm;HnGnY1~}NU9=d13f*(u8FoWKx!F+?C@>vz={^nMKTjr-=Z1z7LHIf?-aS2V zrc3tAg_@n(qo@_g++B+}MdYIK`h%DNk!qGH4@rj$YVv)oUO<*_kUf()8Ce|6dbhfd zIQaH1=4QkdXr8<_sm;3yzxf`t*#G=Vc1E^5MJUG=tId*^0c%&CJojHg7UA9dzKbN4o(e9Q|I#e zxXUCn-?O}M^mE?vHUUOYoy57!=RAd)p?Boe;GYnUlzvhCu3Dwur#pcldN=w3{em_^ zCh5wxqm&ZaLST1zxpi4C%2HA^lS-gbBXCaUyRwi_-Ur6x+s69f)V^5mg`dK;KC(6N z{Ovy#Y5-5H#f3}cRg9i67r!iCs4%JKL)!0mv^r))n_v`d7BJKAXzQw_%I5O^q6UIz zY#MU~rBA+d=0l=a~{!-o}6MzNX!{0{Y5BY`+4fr!3eyOi2mB z)xLx&<+c%=6rYfNRcuzP;O_Yun+JE>0K97t>bmI$XcsB}lIEljgl6tV)(z@S();Z3 z2CG_-fZyz z`BN1Q+>@ixf%^CQ#?SymozU@8~Q@J zkO{u)M~Zr~cF@56l{t;NB45bNi?bv3gZq5tuECDa)<)(^W)9I9X5$u^D+bM%tqmN# zT_)%WObHhy?xarTi^-Q5d6t*A26Btl6(o%f>4km7S{r&7Ez|cdnu~ovCu>KmzRQkE z=JS2*fwXm`%Gqe*32>UPd)V$5_5_erCgOeY-|@yK1OAHmX8y&>c2tBr8xlMknUUaS zDiqd}tI=z+d+>_ILuCIdeo~ie=WAD@)Aff@p`i=L!Zsm6%@0)z1y}M+u#|%^t5KZ! zbIE4Wbs>@uab9$`ZyFraR`A)=G{U9z$S8cw2l)`g=Z4*+8$xn7_o zw9wA^#z+9K<N&E z6Sx2?8?=VtYz%_aQ= z&dMv1+du&S!@bmw+7iGen1TNb+@z6UrTI+Muzs|UbB8=HgG8hx^(H;G(1kvMb%$3Z z8Y>;IET}8%_9MTe=k&AmH-Q^j5v`3>&}~)!A@3kwXqzRs^EuE}C*2fUtd=C8Kd zP7Zi%W8qxvTKd0S2P&U2g|kK=lZ=oLQCZbIbQRVHOnEK9w($?@M`mgpsv9bY$=Zt# zLR+UXBTk;3W2fiGnc;^(ikRdi*^im`5-0IZroqMmcx98$e8Y0sqH#X)6!~w2tg$tz zHaPfdq7yeM~@; zlu4@rcjk`Hj(tTZ>UZiXhN*fD#zIZdXPYUPNiPT%a$eD|kPqh-nH}-6$V2}$&wS@h zdu!`>GZ}2xlTAg?o4ZS-iA~mHjw3E^AQ)su=Ous5T?V4jG4^@>DKPSFP>zIry$bsd zG~Etx0#ajrFpsXbMyx&w7RF2bi=36<)IOH$m~EPv9mxkCdF!|;+5Z3v?I*km9x|fv z-fe*IvOKmPwXgJ)dGCgL#C(Z(<}RrnO$mLrv7(s#qQb3yp*@B+$2?f8qNawQf%UdW z*Hkw{-9o-l!V~?=%`v#tmZT4vpAtVp=YuZKLf0%i$(Au&h%%Gac*Vqr{#2A`XY<>A zu7N&M&>y8It7lrk@9`Jw1^2P&y`-k{uxd1r_uxsTuWHD{En0%zgeg-+wN>sGYlH{5 z8D@Q$oNP!xj(-n74lec{b157zEO!VVu@PSih7uY~1g4oe)_3+!?gQS%fya@hiFMgE zq<^Sa8P~Wp(L70e_Lo-{i+BQf@^&S;GK~`D zkrDoy9Eum1__u6v<5q!7t9A`Slx^FLY>ayq>y0XBjV%X`R0b670T z&8^KB@j<}WID@+hula;^uDyo9$!O$o(B~DnJ2|S_9$8AvqfH)|C|AXs z5#7ygtru+FV0R=Aj1JF@O-U=WXUR$WcP5=*Nzy@HUwI46Au80Ze`{!3RMRj5evhuY z@0xC^it^E7Gj9UxIW0npWqwViqM=YbuzLJ}28z^1h zi6pcu+Bj7!cb(LLF_5Jc+QbQ|Q`HdsZ#}Wq7`v!oI8~H^*~w?vR4fJ~{AJNXzKlJN zewflX*C?5c^@VBKF;7d!82b;)JTO!Uh^u&2;+e^gPcr{$?dtd&@{v0NjU#Up*E6-q zX=(-LUH&oAX!$B70}-Gc=mTvk3cx+&wBCX`was7~y;NRbbb-%e*P>sdaB}X{^w^Y0 z&p^=g&b7|5+tSqB92l{G;)ie-UejFH@~`!^ZK-R7R{_1e>xmiJ8>H2=W-JmvEAA$% zuBxTI4k?OydX=H9h;Hzs7qKI{#p=$g)p9B14|=kf)Bhze$}=Tk6~VE{(5!0Eu2mXtG+8lUj@2kB>-FvgxXmnwr3H@M4=G zPhA1pv0CsJ6f_x_S$7p*6r?$SGfSxT3ac`E5}zV*V5yvQ5e~KOZ}U!krm5U?!#E5+ zcO%gZ+97?xK4tN1qf3$pGJlY`bU*72Pa_TjVPUVPyDo$L2fWZb*g*Y2@Y!wEom5wV zne`kgU4Ze%vJO%kl8Ef91TWSteB8(OraDzvOQeAx$YTl>6vU!n|yq z{w=lySp)O3_Nu+|C*mL6Qcf*;e@L9PPWO$G!YloiJp-VvtheljjZPO}acS|%_$T6L z>ls^H=(AaUpF(eAw^Fn7SIKqh4>-H{VrfI!7vPHh1FYM9`dNl=`m|nb*oJa}f5}r# zlaGf8ffWGERm&j~2{O!|eN=#oqJ5Rxp#>oNYrsK+Uq= z@?Ho(z{#2pT!JLB2N)-J40WNWoTcNZeqVYsnJOUKOTh&L*vqKK^1a>ZUnbTQ`{3<0-fo zPBX@hkMLiJYS5l~e}_4};`o3CtV57>&RJ8cw_d1Lqz4 zZr2{qH*hg}6H*}WeWO)ooaNpZGNfM>LDe^HOR)Fc!v53OGi=irVJ}g>?ufd+GA)&h zd+?hx?^4^4#$_KRhJrcP?tA6D>p*SyEgc91e+ij!2GG&^nA=$YgI%7_^Jk!9_-MQ| zGq+HcHifZ}(-+uf|H)O#$=c%xOntBcSR7kvxQNY0FX;|yHY*3n9*RElU92dzHu-Yq zZ7Lcu13GgC*``Og|PvljK70t zfkRQyc2vH?ozq{~L{dSnR!xI^ zSrz0W5ZGE`G&nPIF$U69Q%5-(OuHKdCeA^|cd|3LD?I>6=1+Z5=NU&Q8`bhN{*Upa z@pbtR(;XnIF13`~J~%br=Yck1TkI^H8_tl0^syX_%NGBT4N$BA+E8|2TZpFWBB$!}v_11?-1IVBF|rzGhi& zyYCq2`RF?s3`H#oT6QbROP#@%@|TGCijS&~n*aIVHtR?0Z$Xo|kzo+}2C=JmD=x@t zi&=u%tZQ@*WkEiinh!g$VS&jWr%ULtT34B$5k2uN>_TLCS7INe7s(E*v#D=apg#C} z4(A?`lyn=bA8(Ktk*x&}(HLzC{R2Is9|)AfF6c9~w{DqcyK+AyTkZ*Ob4RmQP=77l z%p6J7kM0bf^uBa@?P}{+0>@_pm*8D_H^`VNiC?VU?UmdCFF9n7-blU6z6YoMWcCXF zc+oKFe~PAX*I^*zkfHij`gsNd-GH_R(%V(_WqDr87w_aJSb3VWa5ghA>5sVY2a~I!{X=X0eLX?P2VmVgh!=PZ=yiVp;?P~YL zIls8?`-EX4_AdRpFpc^Z+-b9fc}WXJSB*fYfywA3y+&`)FTk?MFUS_%bMUmPyz?AVDza0?L{W%weX{%c`NeA)h&tE(>-co^xCoSE5I zs6)HTy3PGAGDx>8ZfeBHeC$3}3aMd+p{AaxuZ!d~Z&lqD*Cic=LS9YQ1)79(F*gnv zQ(^yC=)oPcqt+RaX8H^N#drr2vAggQ#6atO`w3UX*AZrNQxl;~FVX^wgdL?a z#Us^OO)sP$TE%coPlp^(42|g)=^Uzz;*qqoXc2EYYY)9PS&|)`oFAPK9PQofx@do9 znPjE|ZRl6iV0eeXo7cR@a@;Z1ImI{HKP^g5#Gob6hQ?M_xSg+>=Y%tF0R}%Y3wWVyQ+;E9QxP#5(vh89 zQ#|fKhe$FuH`Ttdjk1$Dm^)fdAPy0t3Xz$pDUNjW8&=s zCZ~)(n+&VT)UH@EL;zX7xnm~yf+xet8ik$bN}$i&AUu{5a4Uaz%mQUXucV;XNkY%?9>JcRFasAepbtO(tZZj2fnj$pN{iKmF-|j2w9Ro$b3gO`8EPGGo%)i0Na{jA%|6JFh||)w@?M%_U}F5A0e6~# z0n@C>K>Zr2Nhtfu`vd=S1y{=wQsMECNylGAss}#+gJgzdgk?TZljfRg0%0m>OhKzc zVLR(IxZC=t205{tDRyo?`7pg2r;O(i)|9#wN{voC4dr7CfjCnaIy*bD`?_(Ouh8jS zA~g#q@~$zfP|p`WrY0vAhJOT1ZVk9f&6XfBh*$?t6drVyCleFR?=6cRKe;Y~Rl8BN zb)staWT74X81r}TKH(LaNSRbu)eS?BVxJ8!z?t_mHXUn(Jkr=zf6E6;UI=lnjd_?- zM4pnRC&F+q9OZ8TIl1SS69htJ%NrUS8ry&|Zv=6{vfW#CTv_jKyq;qKHuER;;{ef@_0W6hKBpab(z}v)s!Gz#(OSoC+PqUu!JVB ztF2$7FJS%ktM#Rr9T}oMuWql{BgKV2-WC=azUl02A-O45J3QX!byv2(f&O??d>DQY z-cvV>)nMat()=6rrv`cM_$^^oVs5%?;RvOa`Ix%}I_jO}W|dg?k5-3W#HIrm<{y}i z4?{NSeyE2jhe~&dbo}2qO&D~_v)qAXE;=q~@!fK5w4b-0v5bP5Mo+lo&NYoPH8rO! zR7bhvcX+2ah!C+KsR6lNlokvfFi5PT=knL8XKE*~%ktQF{XICH)B;}5uaGHRr}`$9 zh#T?yv)j;{lW%9gr|QL8g020gceE>DTWwXCI}st^QM5KTA$s643k5QTqugtJ7lX@S z^Qq4Dq-2;;cA22Dc)A?0+Zv8`4=M)A$s=F`2e2Y^7W`#3P$}f?#0KbnN|~D}YA{26 z0e9Lp|3wev=)ue-!bjjsjB9~)yB{c()8T!qc7{Da0>aSKSew-G+^>-Q>cpPI>nqYq zFDm+~Uu(vqmGn=*IzLs<)1N{wLf5{ky0W}jd{E%wh?plrr@MQUqZd z1AYFD*89#1p5^|g!H%(~31Myk`A@o&HJH~6`ppj%)6_pS1cJdfR;J3(M(=r z_6ho8a=UEHE<%=FHjHa``xrB17&^I$b zu`E(MMD~Aky|6#C4u;I_aQrfOwU3$@xSnuWmf7Yz7I_x?9pNRhFPZ&?-PEJZyWAe4 zsq%Y@gldfTB}|l016^tou;p6cJ4r|7=xKEh{GUw;$!Y-iC$ zy6&2k@|&Wuc&|{#{mL*<_T`VKjj=nSpZwe1E9@Ct9dmu?=5fHZvKJ_x3(XeGQhU~M z#$6*YHgpH2Nh45mMj*o;Vxs|CQpOd$lCa~ z&ytw2@xoLiW2#dNBN3$l9i1wV>oktRPhJ9f| z1J5gztGDXE6-B|KRTrs)JXhsZcV#q*k-vyrhe@JI3V&wgz#6C>oagP}+F>7S{f9UO z*#MnMV*FG-8Q*N)Ze8xg+&6shfC*zt)yNshJmySxZ*Ugqr2`e8l()67wLj1V*rA^4 zmqL>!gY4E-R8LTDm2yS@@Qavl$$n@U-i~jLvc}; zvz@kAa$WOI57dlM606cXlbghXZvY zy2P-|S<-h(SLSXGL%3GbUw&S_OZyxZU~=H}bOEaM|CrYAbzbN~&yao*R_DKB@25T{ zNpquU&bRPQxSkjHRWzhUT$jn)hGYtU7?wrYbaC8;Xv%l{1fsdl7F+2g66(J#TD ze0|(u#~bTWi^%*I=6+9%Z}A=Y&*tWqVfH$%zrFi|!cg1TymXa(bt=Ma$=xP!Np>oN z%2B#~2m-{fC)f(ZMQFzI(aE}XDljhtS-!PE!*0afPwAOuXGX^H&{MC^-NkX%I@~+} z-;N)F^WqPfIF#W+@Lg-1|9Wc$kVwUNK2=(HLt#K}F~B=1RLD*$x2aD@LS_$yb3WB zk}azpK2K-=?oiiwZ!ju#p}b-2XOH4Hkv5jCQSMil=td*0;r}TIbJ#~f(6J#$wU6NL z`9$)KKZvu6IgFyoO-{Fom4v4UR=bBdi|yNilwF;eXsiS8kmkez!cUB_DIM*gN%MDT zU~E|GSf&e^Ok2Q~@o&R7{i#Z-S*U9c=h3d%Z9`ow58J7yx*OWDsyUGC?IHMy_Xq1C zbzOdI`g}YSzT)fP9qf`g8d&baB+g-+45t$YWb(S0cU$i|9=Ln?u7)bcwj}j=0l68i z0c$Mpk*KO{tKy92p{_ri-e+PpBA%A&0^MG83wt_X5e-)aN4#gx* z0L-pkfTHV!xnB@_ih6a$x|Zreknt=LQ@Fn|+tKQfu*{~!t;mhwzwS4#I`+Gk$;2C? z1I~u|&lE^so->zP=Q&5a9(y_lJ4MGOW@lHCPSGy0sC*PGE6o+pR68|Ov4@!6P`{`# zHV~M)%XRm)cj0||Sz;ATgM>pvxEG$!h7xrkN1^r41JiC0?mE}t%$qRvf^5KE{320m z?PjOBxxNme_0i6WU^<$+1kd+j-1ox4(#`Vzs>aYQyoBzBw@5+11bc}+M#~YCdI`AG zibaokUD)3!(+kw>p+v>#wBUV@*we@8*XPSPVy2&T zIdeUEDpE1r-8aM41omwIz{#o%h`n~xVff1$V*X&w*-VbFK);ZN>p{iZaz&O@FWjpTc55;UA)JjCM!1Yx-(ZilOpvqIH7CoM!aNTC>&-0+R} zGE%Q$Y#?;Bgv5cD14Xnh&1fmWI%hw_}INB>YAX{G80UfPl zyqO|Y)>hF$b5T1FsiQ9e>iZ)73d2ocLI17wDL=~9(kenO?{`Kont;?ITQNb3?F$zB z@^0MO*!C~65~sp8FKeXZG<>AlV|j0z3dA~L&>M-TeA#NGTeOL+1MuV>CRrui(bU(=e=Kq>aVpcT@SNI^b%Hlf)Jb|@epUTJOM#^I1JtWeVr>05 zbS5%cD^_!rrSbz}HUAz=17=g6W=d1tfRDDyyWI8G9l>RxLN!}YG3{hWdWlYNJv>pP$7l)Z8xBd>#-a9)`ru1seUC81P7{W%Rfkc z!hQT+>}!nU6k%axx^i3x#5%V7kn;*8l&j!>7<-u>LEEeqE+l-`lXiydnnXawu?9ua)nV zO2;OKHu@X82RQQ9GIJxyW!*C_!C@{(IPjk!<2k{}_BQoX!(}mg`erUgDq`$qujW^f z5Hcf>4;sNt4qP!sy`Y0~2y2R#Y1LY*A|P8S{!j21Wbt;8r{yH+rtuNcc7cZ8oz7?W z_LeEcJySj4I9QB60wbuF*|sCjtL|?8^PzdM+bL!~PFlv;%<0X0E?OyDqgbR7gQsF5 z_F9h_*63yEdLZ^z(;iUXldX^p6Ext|WsIZRa+fnIU-hI$0Z+R^kXM^*Tsv0ikDHofV<8^^tt{6cwJvYLU{=~ zRkuqOk`I@57HsA|Vx)mhwKIh#{NX;q`|iz-+Hi~BVCiqt!KS;!SP^nqvIzyhj26h)|tNjgZzBQzegp;^c z886AR3Povqyia6LV6P|ZxN6&CjT5biiKZ6N16yn|;rGm4EH~`6-H$zkf-R#TlYeEt z79P{yFvsx@i{jEl%9rXB+Hxd=w9@};Sf&3Rqk!$`H|;J>3k64ZS6ChPY-7OM)CqQZ z?IU*rgS_9J6JdUN1$-MvA^%eaJf(w7znc-5y?1rRyf**yNb96GEzggpu4R9PK7Rx0 zHP}gh(SAbuVK&&OH`T|1tK`x*Y zY&H0Mn9wlXgjCeEQ7@8@mNgbfc`@c5dX_Xke=-SP1aPj-gj4TX>v5tV;V`WOF6Aau zA3|bQTI<>M&Y!&-1J>}@cqBDBKZ;^xd|@Ld&+lc3$)z z@m~w?jAc{v^4qCRn3Fl(_`gf0%9!BRIjVD^v$2YXX24{(>mMOLokG(`wO`snA`_Tc zAL-x8Xugno8T%!C+RuVi)=ujta~GmHJ{33Me?vdy2ROA=Hn`flH^V0SC1h1)c_x{~ ze8njftP(i6ogM53A| z>CI0w3#4>97P}Xm?;dBXi6_gnUzdG8{GsOiqi;LECEjB1cYUb(WyIH9Sv^8%PkUU! ze0)mg5w#jq!k;HyuPE0&(~mEiUFlnuZ`FF#xKe#YjePZ{RXcFNmuX( zun6kBd^{P9Lh}-K_}eXY@oQ!DALw_+ms(%Cd>-|6+SeyPXr^@p$J){%@mfN@c<;2W zu!64Sd=$Kw%ug?a(tLXjc8shBfEOjdF z&0RH}sAsFEudhj}IL{3!k`9V~aq$0|B2XmX7r zFMBPqO6~~>evDg{Q;~I+_K3vK|DO9ZeG*O-*TPu1QlOc?hX1Dbq?ZP%*t09#2 zu-JgpL>Dm068@-yIZ*#+LT$;GWI{9RJF#8Z5%_^Q4lc3O8+ zxn9~*bddL%(T-A;G%l5kZ3)izws$qP$B16|{c;oVd1n9UQnspWTG>70YvP1Rn-v%nDzUkO(5K5=nuamyb#ZfsOO`$yHXO=SnlG&sXN*}B}$cYgv)^zYF+nc0Ob z{MckmuHdKlT=W%X}KT-6vss`7hWVb|u=STR>iFA0x_M#=k52CT*i$6}9EG`onk+H!oUXA+$Ov@ZVE_+J6f~IFz z%Nc7E+Z#s%*A}nW-z-ugJ|;CH7bW><8`;Cbkr)PRB~3Y0-3^>$-H?BD2DG*AxVE5~ ztj@`2%ASj@{1{sYj`RMcrrBKbMl1*4tyZ27E{kJA)DuPVnoB8cGJpaYYw(b67ux97hL*LK?dFk|%~s5I*m2#x%RANIJhCNL zCsj53qp+RQnxWqDcT6~ zu^gHzizh>`fB{?C6LZ|RHMEYll$)oTo0#W;8GHnsddu7ce62$J!j`x{^)ic6P`ZM% zfV)|=U&5C!P*u<#LVndPKqrFr`U6rC8Kl*#Hz+ni(x|TB8@n6p4S8(gUiwLb6*(0U z_~h=UjzPAzKpJXmX5)3f4=OuVe#i8OWs&2cXJuf0>>hL~&eJ}C^>2%4IB=l#=movY zaI<7gg^8uBDx51BUEINN8B6HK0!ihF=m3w&dQHXQGoKyfgdY0-gGT8=3wUCT|CMbl zt5!a?tdDU8Y(qBN%ItgHb^O6li} z+lM7}ENyG$T6uTLA7T`y;*bEQRL?WBmlIc`M}l^**t-&ZF>`E}Z5eCYT-92^ddRMF z41hP1-rp@SDBL2}DETRKCjT3y7JVxP`UH;cKr)`$${p^cn#BZV_#D{Q(MAn?raU&_c&L39D%iw z$;mz0(Ui5c>FhE5<>HEpaq8u|&e(jz*rMabGfN&74=Ujl^)oP0s*bI?EER|zbB{2# zP-^FQBz@uCft#+GHnrugX$=sJPkyiZZQZwhUyuBlRyN6mn8|jdv)orN+%jG5?AC7QI?L=o*(X{z zTkG5SwhQ(b4!?7XN8?ihVRd?Red2wlOa3Hj6|EohBD*2KwWzJMf;=Fv435D+)lD_S zG*z{Px>WT}5s{}Qe$iIGiWgx`1kcI`$SD7p{21#R=^9w+d*=S#+0}m47Ki-e5o=pp zW$SQTM`v?qB`?MIQ|LHkty!5OIJteMwc^--0{)j2ru^#Dz)t#(TCko#ZP8=r5Un<( zo&`SNYU0BJ9k&}}J^2J|sCLD2!FK*(uJ87j*1-gBdIZ$ljpgF<4#r|!g5#E2ww(}yhJ#oI*OB>*`&WwJp` z5q|Awd0DPSj{Y`>xrUi-xl9Zu>YB^V9e|NG*s1i@4jd2v5s#$pxki*O%xB!GLYDNs ze3rVc<|T3#t7_P5=mX8txv)uK0b65%YM!jFD9)?KIRz)f`B`@SYv?I#iJ#b&76G9) zUM_o4wykWy_Y-C3%6>Mcpn238cIxy%Z ziISxyhT?^KGj>DUTYV9FlH2&7nO$jb^6d0aack%=-vltgX)SAk#J=2E1XEavF$Mg! zzlqV-c8;CyHU3B#-kGVRxl`n}j4Iq-g1S-~q%WsywAzFYL5;{&pra*`F1kwEFRCu` z_tL52!MvsHR?O>^75P0GSE6(DXt-wZG3B2Ba;bzjv&1tMK8 z>Ioa%Mf4?<)A@&~Lvc#@kATB-)z!d0&^pcxqzfQ^y#YJIc9X_@*Gjg3be;4J4DO4b zO+L&WrgWvJSz&%a@)~SMG?03A?bl$bQXW#Vw$PzGknbB}vaR z@8dT@>wRNf+iYC(T@zA1vMl#~+>cY=FMa<}Mi{;3!M2~Ahdi}{ccZIQc1VohXPS9! z#Q#UpIfluRc44?}+f_ZWosDf98*HqNHnwdW6Kw2clMOevjhU{hwrzgr`?vq*%650v z`=0YW_uXIqKs7?U0JxM}i@Fz`DQmsYmn4RU z{edhzb-&tPTF#h<0c~hCb{3NLjm(Jom`&t(>(cpGgeFDFkoziAxJrG^7{i+-s4cz# z->dJ+n2M_Vr2VLCte>Upq`j?ap?<4$$_Us*3%1AB3*e`HX0l?<@i=fbezW>) zuVAX74r~Z5kM~IJ&iALRr_biV-dD$$rTwn%C4VeEC8TkCGEY-G6wK+X@o4zDZ-(bL=WJV3>n%JA zPxqJbMA1R(;UocXE&EE>CjZyquIRf|CMzZ_rC$UlUQ6*Q*%C+wj03~xc@zVa-9sY@ zy<=#j|DYKNNsV%n9(*@v4&6`bneUw%98*Sa1r~a)yQucGc|EZi58@Rt6}|#8&`m9S z-~`X}9Pu>|eT>;s9kYF*YwuvL;0uMvCA}2SmBXNI-vhdmR3jHS&_SdRoJfa)bG5p} zBl?|p2hziHN!K#{q1!DEjRoVzI45RHm}kRW@iz9!G#4KN&DDm`K%u#pdL{&n;U|er znbU3`~mZ=Evs4w&f0v8}+8ac%e-0N%ISxDO|=B&MH9*@hxeQdX@TL z?NEImgkf|d3gca515AKM0Zq;-ogg;zZ$YEK1EqidZt_G-7VhgG=UL{gXJf-OdEu?DEKClFB zK`7`seJ8a@Sy_HrbXSmOFJ@GwjL(IV4WnCv8@#(+Gi)C7RidqFZ0Y3EC8qk|)z%OW zb1&Om*K$u$P#lpZJ7#sH8?^Q;34frdi>!yDNZn3*NB0X%N+ClQNGA$NsJ~F3Ro7F* zrR9ZdA!)se)|0$7S37Nq^$5>}Y41GONBawF-u%;i2yzGRe}(e$chXUEN0s zila@F;mmeYZ(5ou;YNg;q)Ayr%?{lQeG={?CyYCdA*2QT)=}+j^%liiiCg63Qd!ff zoeJ%;{@BrQRsRjQ%2CUzCTe1%OiO<~_;nE2O!slRd9WqmxZn=@7?Hj4a4M1igOY?Z z=?#%vvOqCbb4PnX{|)&A&A`T`3pljy>*>0YnnB>8SRfq7Ys>CUpG{r`eTO!2B0LwI z+O1qC?VGJ^E6LoDm`YqB+7LS|6Rnf%TY%)L3#fukW0X|SO!LACs)ccm(^;@j+Fzbm z#(|(S+OP#(gtjy4(4R2(Rp@P+v&u@c-^IQ8>)AJGPl0Q#PY#Ug13$g3oFA+=h<#xF z!%BLVRx5c~x&~WLY&E~L%UqLun}YA6*3`XR9m;ZW62Ifm6rF{>!(2#4c0qM0&sfH| z*tj0p-|cmXwyzSEEfh86$vAwvo)XQ<(`?|JR1ENa2A9Ke%NnrUH@Aaq!%d(oOfYY= ze6e4F_EdX+FjytJKiMq(qR^0%VqE835*!lAWEMqLH3!(kPYq?!Vze9D44DSq?hTqv zs;XkwxHfxXl*+0)&7GpLRJksOikTo_EQ z2dS)Ouw4yFt|{}Xi&`DD)K^3Ls~nm#EYw?c<<(78dzZQg*zQ1bMhtEKq1YyDJKmRY zn$Os}!!KmL?`o)Q>{@bQ?kQQo7|OBo2Z_haJ}N`%1&}$JhCGB;UNf{8Ivg4(9!)=R zm41up&JHeZHkyVoBq zL?zF=#DsaTp-g(r18YosT!E@aWI&C=g`4^dQTH8BV?iT*ep{voZsd~9hzOMEXJm0rVYm2UcJMA0QNUD{^;)9~<@J=t=b;MC*y@QXzmzyqOKd`+fJ>J_4 zQ%yV9Im|OCK#7h_{K)V~D=FugTJAjI6EKt*)j7>1eSO4;EHv&#EQk)-YS8M&YnCf6 zNeco8ZywtYH^Zmk7Mvb61=o7tx|%vRTey}p_*!VQtuWoh8sRH|$Nn8o4ikZOtBf3s zAIuES_oBRFKH)SLjFJ%Y8mjB+snBwXA_Jk>-2`Qzv!J=LKwVdP4J^@3`F&Yox{`c2 z_cFOARyBxtW$vGjb=J0)Vw^#g!75=C{1djve9SV+_R#f*Hxc*|&cxTICl>Zl#?lXR z>Iu}6UGi$GN6=hdU}yrLcNEP5VL_%}tg~r;Q--9I#PtO2*{$d|$kyD6^o&@ANEu&c z&kcv)rnMmW1vvk7Go6IH&KEdiU9}Y)F;A`F%kY_arPPqzI7rEL=WZ2r7GISQ1T(@{ z-Fw3zgk=l?kMuHhV|(e9nia~N?5?O6pUmA46o(}_T3Q!Zg(AMj?oq(DxoG)C)W>&# zA<=Jog&iP%gZ_9E=u~Wjr-?Dv42X3*DIIFxl|jUr>q*^BqhXlcKo(YZ$w(AxKg7LVM9yE9Q~;s1Dy(;;<}`l zurcpHW=r5r56vA(NMmJ!?|corLGrc}o?W4Y~+rd_M#9NcTi@$ooB~He}uB zOcVSmX{H#bZmQj)F%x|1J?&PkU^8C58{cyI2Xcja91C@C%tPdJ8Agne;v6NWNL>QT%4;m2ZLjmNRdiWnM*` zf$!9h(wn8Hut%5`Owk2MOf?Ve4j0FdWrpQvfG_U>zovMCyrF8Wy1Q-~Fkvo%Be65O z3EhMA(rI;7RcZMd@dzP_bAU00Iy=89(<(6`+9@=`UlyJw?`$(HJRtQb;SB!+vTP;r zN#T=6TtS^C>e{?4Yu_99Vy!t%Lbw?)&_Hx{KA@<8sH5fmG#y3)@AUv2~wlY zl6A8KfDl{EI>pWLhf8`xqyL+FpSFqK2xQ~7aAL&t?R8x3I5i5^dAV35*uZJdG*N05 zu4YQ&;qVK8ZSQ~1Jb$#!GGo$x|!wt%}wnexxZfP$$y7R*aC<7PsRUv%Y|ZXjpDWs&-5pV*C4h z^3FB(+mOYZ3%RVp1Rbav4&u1=fbF4^?yl;e7ShCyCO>3~$qDLVXjL$U?WOk>5%oK* zL%$!g?`4dujhoRlQf%0++oRzsOC%+tX1w{#P1LdZ3F+qX6XAb>pR?31vXsuz+`aAb~uJ{|k@57d!MEZ{+WEePe`Al&e*;M5Uby(Y3KgIAtzsjIQ zKIrQJ(Q$?Ltn!Y$xujHdo=dQbY2V56?DV7@5;~iGgIpBnb?e{ez4%4bFq6rYDA{GI zPkb_;u+?_9^!(-T5S^6Vmu*fOPVd6*!+#}SB=4#GN4w0>3?_fAjlUbqK+^Mvp{D*G zbP+ns2Z`tNPI7q622@_5SGs$mag-4#_BM3SaZIuGfmxgz??tHb7x3o&MjW=RwB2&< z^G*&P2p1*g>A|EoR0E?buevBJc@F=t{JJs-$G8JsP}HKR3heR5=-cVHtG_9VB+vQl zxJMa$ioWnNeInj7EDh*9`<$O_dn}bK^@&U19>0fG!h4!mSf)ZMUFAOI<%fjPsnEN& z6-H95^pV^Yk0f!(Jjy=WLAr$gA@UItt5=Ng(F%sMT8Xxqs<}KU#&|DS*J%>+wal?( zadc@g>V4sSZ>?mmLF_kmGW9g!rsdcTth)K4tu<_(Nq#{n82ORBk|j~h)Gn-=yriI! zbg1lxqPjMtHS3BEWgv%F)=)`L=yvEPsl`f-Y`3T}e=cV`@QpLM_UUVJO6ZEOi)Vvl zk##t@L&jsDOD~qz#VDp>cz<)=y3BdX^TpRAl8;x(j3zy!jbNAZo`_ycXDj)dIr@i& zV#5ib-BvR0M81G$Wt(P^YJ}pHbdIo?cZ{`?7A7-tUD6ff>%s^93%vat&7f5gG`|H- z&ls!|{vF?IE(hnw)j)-5;cXeJ6C0K|nln%aFzP@L?69~yq`Cjroi=m>Hd+niw4%?( zUT7`oJ5<+{QLdNq#1gP8$7o+j%QCA{m1DfnQ{P~BPscgiZ2~bLfHzfp+yE?+?iPx* znr*(bzSrWXgyu)5rX;zGBpz)odmQ()u&?xnBCGamYa_K06^a47qrdSbG9HL6ebrYL zQOP~Hdsbq!q234Q#)#O_;7~v6Zs*u$oedrJ?bv1$YC3??@OQ*_H zCrMh$CMbT>+|V!5pGBU--S9uOn|`igJ4|}dD&NT(i|Yt1oVyH+`lN6v`ylZH+96GR zYk@6a&w9;ro2Uu2p;Ise5)gZcd6wCB%tiKmgr4t(#Lvvs!eN?-HJdkEbVznl^+Z$9 zRW~+34;q(4hW{y0lfLPrTChvVS4mv_B2G6(h}=2fE=`UP3ETWbyM*#wc#j80N5;k*q_-Ey)SryioHBwMk{|Nku$g+PYl+y=$Hpe` zY-|tSjmo-bs)>rV;-P{NXB{I-`7d8JlL978Ht@j9bG5eDwH~uY;h0?P<7!D2-!`IC9ER9r(tzv`3UK*$_!B!CFo^ z#z0C@R*~{XGl2`9k50li-1?EIh%2yVrFTqKAg4Tluv@Cy8@l4abnF(Zm>QHVQ)ogR z!z_lmxL5>xN$_2owXJkz!C25ASq{yI*}A8?i|RItGIFb=fgr`1!;n%B=Rc(nLbBwQ zZ;Q)fZ)kNAck%9~o2G`Pt4ao$EO>(0V%_HG=(!b$N1nuQr@N9G(G08}9G`H71SC6Z zL<7uZ{r}HcBmU2m)6dYybqiEE`9K*VHVOu^7ts+)=lsFUq1dJ}Gf%_+ z!CRX+*tk-kX%q&ASIaoZYuE4oUmX>}J%)R*1$eZ9aFXqxYI$DM1r^F=e0B~r_;jQo? zX59MA4s&4d-9VKnGdU?+g;axK{ zb(chd-g=WBgOnTzoK63RF+bmza_zRCwwAR_GJnGKSQtp=)d{&Z4IHa&u7an0Xi9V% z+;Dr6>e8~zZ@kK2wr{Wcq#0)Dg#L*xEb3eoFIsL?AT40Re_ZubUPb&Te=~={JV}0< zE1!NEyA(Pe7~xU7=76{Rsd*N@)Lg*cGF+Z?4tdAT&U0Gi`xG)w?Ce!~E8qiMBUqN5F8EiwIflVo` z69Pr<0+ND^=N7~bx6c>qe-*D}{oy?YwiMcz!tCtX>?9i4at@Pwv-e}@Vzfz;lAT9dM}5IGa_|BsiwuFDSv6#W zVYJSusjogKtttK}IK*AT5K%D5c(#d-3dVd^7umViQs3MPpKC&~mGI3~0Nrn(Wvl&$ z>%BJ~SQJI#WixLJY3gT24{m$7vk4Ve$i8QFbqzZW9gK(2xk$p$7l~==!AY)It^tD1 zC{7K=nL=@HL+Vp31ZR_W?jH_?wTz`7&VWg8ThmZ1g;zCGEo<#bC&yRp9~5nvNT;9X zKU2l5o;*AMg{Z!~tn#e7x^A0c9b!NY=mVrGOdLeIl-i~|CmkVS38r&CFy2!fxoPQt zWA8#2d{WP1$3*LU@T{aTqSR#S0Gu~6vB*-#Hr#3R;65^JC7(hz-~fffbaLtn8i-rS zN|g=Nqjd}PdE_<1N6&)iaXM^6zN_mfYbq8=`twh-Z^2aKWPW94M*LtH_aAoAU3+ZT z%`MpEGzUW=%E9btBJYJmqZWDp3UCg8 zRKJEh+d+v@v=~lVbego#I8!OUH}W-5(Radi3!21(iPzXp6K1N9oiVi_ZV~q^_wB#A zr}zekO2M*{%6BApW(e5B`Om~F9CfM&-6Vn1516zC8($@ao`4HUTW5N8_F#Cm6 z2grK{n8=k%Rw<1@x;?DBifD~oNDmJ+)JMK(pK2zk>~fkUD)^gslDUzVDzt>t$)QL| zFz2n|{?n1M4zy4RGZ^hKAcZc3#L-kMwEy7bkO@?eE>E`0t}H}o_kp22Tl7?BR=8Cs zwOK=bAb2)JJEJ3zEs&lWsJ*KGB0D3UEd0gY#JoZ^liFw7r&dKPg--cY?tAtlwjPj6 zuY~sk@_PcqO=cozo^7oJ`GAz)9a)>$kh0}((uTA8aO1*-Ql+A^y5w+K511R6d*b!L=JKa$Dls0| zWi@PDpa=Hcr;b#PkIRfLbfVm34&sGiQ!zqOTcyzbt9KzyjW{~OxD@VgG~}UnjJ$w5{b8(FQ14Z%j||+t^cLplyV0oNIw+XrN5E z3m6{qIUaEM@31QgK1f=~>nau6H`+RI`Wc9p7}Idhx@uUhE2tlOJBv?_}Gmm|x+W;Wv^onX$g`e4k@!W%oMgc`o|5g~joi$)~w#~H*xNG;1N)9On4rbs*VBKjKr0{5wNhE}=;nyYZK{sNqnD0>>+L293Sm^vJ593JEs zxKBZs_?l%kVIxlBuOS0n6AKZ|t%L2|9ah(Le@XC7Oqz;kW8{hq7u&&mBR(M8s=B0k zr=uC(AyPDtreLFY%uu2qqHdzTDmx-xEO^Fw!3 zz6~1--6J!;hj?VkTJJlaxr=>WL*Yni;(hic=^$+xs|A0%sGR(p@;6OXSAaLwc%!OF z1ilR$GQw~{>r?HL4G?z_)Zt8FRHQ7(HA$=DeZx0`+q^B^|3VYw4|5(P;U(C1ER1a? z_7OL&k8N9A)qS-?{MbDp=qw`#sDoIucq2q<**L{DjaBy@X788L(Z=eKyo~5;!x^iM zIxN2+Ss~oVb}>3q=>>XrVZs?+?LX=DIx9JC!U$sHo-mn*`VSH_DWYnWWk-B=dR;m6WYa&@CRP)L) zKT;bM%o#@FV&q5gwRf|7yyLrVhM8lYk9EhsU=B!|w6x5yNo_Bj$AI3tG+Z{>Fk6mv zjk<&N54Wr+C8?^!Ro!%ZAkp$C%7vBy8Lf)c)c4k2Rvnj5l~xz}xfPksXl+Spc$(~v z5W%0mpRN&(GPd!SY4{}kcg$_dVeO&2+5x6a|M&Qw^UI^G#PD>ze03U~b(b3u?T|K5 zaG(b-G8{$5pM0I< z2`8eu6qavH&NKeyxCOT)OBG+#RkeF{-OviKiGE?ci+%>L9T4*$a`6Pv<_M zHzv=`ds4?^O(OjR7d?7c&Q`%{B3?k#?11UDX;f(kf^S)Ft?qp6e(JjuIuP5RhAj|z z0>i-l!T%}#A-fN`!l$~=z|c{k(_lLO)-YDLP`5&TLdjE1m+A$5xV>1bsrw7*^nbB! z;nsnwUZ<;(ZImTO49BXO?4>i{34a=PR1a+99VE|Q-^cKY=!o>@97>TfTC-aSrinDN z&x*F{k6Nz28|;tv!OpWGN=Dqe$=c28Uy3kTJvwpEvszHwfeizKvXOcLiJR%P+gDm- z(CF`n*-QVzM&e8HURDF}S_-bU{=Ok;{P)zE97ftg^D)KHB`zba3~rsXnvw7}B#@!# zJmXMwKG28T=q9Q*DHPHN!us4Cvl8uE;Rtli^5OQu4&L$3jn==ceDfxJG~8{MVKa!o zh_~jQ)(?(Ko;$t`fy>czz`t}uM{5#uGNU(x{wkv=`T)$KU%JcM zfNH0*n@lEr%B{nmMVphaovD@R8`&AC>&-Y5_Hq`LC5~r-cCjA(Ry=$#P&EXOkgK0} za-e5qb6k}fledw@j91)6!p>5cygba_>%%!QiAs&9jnbm;hEhl_UIUk1Z^>2xnfrfReA`_b$9k*MGLFdMld*N!0_fm=h6K=Rdksg#z0%K(G>$J$f_(-{^nR_n{4(#%Xa{D8%nVG(8C>Nxn;ZOXyAG7?-m}B_&2>F|BTv-Y2cW^i)m19 zRYkP8t}^l#=m(FHvB*vR8T~blTzy|YRMtv#S&(P1qT4BJ^Yvh=@icVW_ryKPf!gN6 zw9G*4G(9Y>VY+B)f(zjJ?sk0fSp9E8?c%@EXYy1UgH^=!3NDFm%L$cJZPiME1k~2> zFESZeh(ipQbXw>{&y(Yl;ez(uW{fG6Kk|P;BM1$P{A4f5A+ydkuf$c@BU2^QduS|s z2%6=my}tXBr%T{r_$~OGDTNl4O3b;OkKB&p)sjZaYwGpd1BSAO8sM3$56`U%hQ_)B zTCZ}XJSUzky37@`e3aF>3F(LNp>PkOySh7?TFaX^0zvRC7A&m4u?jTCApgEE^==Drm%= z%bG-akgt+aC6eKe{-Eca>n~deD~mAWFCp_~HSNQT@wet1){Bk~uGPLCp;T0s^yRLQ zUeHId2MRg?A0#1PquH*Vq91I?0b~3*x)a%?{}WC?ZNZ`?mhJ{~NN?6P>RysCb1h*H zbNqSFf37li%+lCA9{X;ZZ@ORl0lS6QHjlTt9e07p^)?)i?MwcaD^Gb3)Ay$Q^CGbf zQBG9-sjaI2X^E2>wz|JLMfL&K zv*xStKHr8_!!F?@Fga^rLfYEJ@HGi;jP?Xd&$>bn+FYiAJ6^a|x<`SkE9*k~cZkmT z$cP*J8Rw#N^}Y3V)js(>$yVVz?tJD+YUjepbgSe)k(t4DoKX5yo;cp+FLq8-TG{LkD&_U^8iundlhUfi2SwRFjnd0P{=4yUYGT zzegIG@1NQl^#`Z>j=9If)?R6SimkvF1C470wv>2{_p_X|JDpX%gM)vBwJ^4i zGmO<-yFe-#EU&1%t!b${V$cF1tv!$_`=AvKE#cfSS5;1y6aOwyaq{$TWKUL;`WDRv zOT87{%k4!#O=_UE<1~Vx7@I09CXhH-|5hm=wB%`$EIAPuV*h8l*07=ylT5d3A7=hB#{& zPbkw0`s{=_7Je15drMqx9WQL%ER7&<9S7dxcx)-`^4(7ekxs~!qp<3z+gAjf*VK>X$6gbxqdR7vU)2vNU961ToiIGzrkqbw`A>T&tQGu zLFXu2v3UZq2*@CxO-9o}Y#x5XqO;X<7Jx@uHmHbiNlLRnNK+tby@4}MI8XXRK2cp? zyFkAf=m#Aj?^nm@Gb~1;x(RB9s;8`u_!74VYc=I%L7YAke;1Yo6y96TkbQ&YrTIAQ zi|P?qO~0@W1jYKwI@7^)r#+tnnDW9RgpHdFgABLH7Di?9`x7taA8aQ-295j<0GND+QQTh zdqAuLE3w1L@jMT#j~tE%GR;Y88p7(wkBZ(&*UN3H5gNUII?&4;20C~VcI$uBpVyAp zE>V7v-h+%op1pw4f}+YlN>z{V3cm93JO;bN93h0n9MkdAxal<9r@ zhj3$KO=C<`;MdMJudpiYy}@-f1Kzj$pxgaDbCUdt{+M-=I*zO9UF^__Gbz)n(C!WW$6sDT?P%>`5E;;ll@0&P8IT{-(e%X_nt=tLa+Kb?sv z#y?mZSV@k9uCKoGfsc`Q30I~O=>TNLAMjp^=F1X_R=St^?{H@5VVrJc8ZV;Fkv_Vb znp>)V@@3*)!hM{Ltj|Y7)9qvA>F0Bjoe3UbPGtS4;? z!J`NzOec-=-zmTK*(aC0SMQvjw$7^uzUXm|Cwiv@?(mtqtEbHPmyIgzTnp zB7Zz{28~YI2zkFZ;TM6LzC*4H_6Amgr4KOx`w7pI6S$Z-Z>HPyj^A9pz4e3tMbT9M zjGOceW~84ujYN|rPZX2YlQe$)Jh<2HMyW-6;rYHne@Ua%3|2;@8c~XuVRoS>Ns`PT z$?=gL!Q@pko9qSDBcXGdMtK^mFouJA$)}sNV z_5;fjAWL<|ltAg3LsT=DwSKn+ofEvv0{x;D64NuOLQkrXnPFcPaKr&QPc=#NQ$GXd zGeB`LzCk*}M*5^?oBEk5Bb7^hyuGXfZ5fG{-;+2W4F^8?Wu7|VQNL^+33in|*mNv{ zsfmeZ)H1=Ib|T*Qfm`9V@%J$I`$oCQ$g#Hy7-CdWQ?*ZfS=S0~pB2FkegL?RcMbP- zKh=LL$4hM@66|%j^c?w3wl1{hK80ude|Qc$yV&*66?lkcOMjHkfZShs^JjD3w!*o^ z6ZMHh8{!*NSMql#)fs=nbf%m5Jea|IYA5Kf>+eB^^ce7rrlJBvd3{!0UwvA!1=t)?7(cqR$wNzhW)S|>uTO_{tBn8*`8ZKSn$NIq?+Wu zkuT6&aus}wXrHXPs-xzyt~L^cvxyG9jxI!gAfxnb%_vntT3OOcDChpgI6|i7!|C_2 zx{*r$5ae@)Ic8YTnAhS6cBQmBCV(D1&oa$Qb5?iX^;tqqVl$H6avRBRdL8y#epI|h zHcD9y>?FSodZa>81g&KZ1AWG;qiO1@f63=a$APt}GV=$esKCjtPF#+h3Y>61aaFV1 zEr-q1@q?HOZV8oe2@!+Dc)@<(T{}=E{61P82n**)*C-2F5iVQQQ*vA(R(IA;)~!H# zz}DW1zCp$zi}kIwa&;%g0?94mWH4Mkq>d)dOm9z&jSL8o!4oZW+^`%mJBfjKe^VIi zf=|bT=8UxmY@#W^n;sdNo2;DWki@h->}Oo1=rK@%PpW(AUKzfiOJG~U24_snum)1l z8DLDgCA~#$c=womTDq`4b0PT$7=wrTG(g^~Y8_?Xiqr89KwF%MNr*XcZphd=x+?ih z!3{tgx&^(`7qq8L1#g2;1=OTV%67V(j%lcZCX9oP7r?6B%P?2hRfQ_LOM8m@1M_PY zZ4$|ny_u{XYY`gine8^&{EwaucDE_#e1lqr#q?{rsyagAX4zJ!>RWu=~%X9;&fCP zJm^z+wmav+M7b_xH89A24Z^%&B_>%>o6_0Ld)&VzGB;5_^C9=0%4Sk|?}d{kKKP|C z(yr50M1DuY`kSy0TZ~LGjL~}3>y*D_BC(I>;#8-jl*zeY$qmuVLCkx{y}^D2HWmNj zXJPi<8T$=;jJ+hRmJ5yrPOk48q?sb|Sn6qR4|y@;HoKuam<`qu_6g2q?%BRm zp|jDm$%eT}WF7qodlZi%?kBIKTCS<1AA|f2q^twTQj`Nt+&a39ri0QaD;EC{%;HXG zHld6tY{;yEtm;14t~Pd+1((Z6^F-i^xnYZ71sg^O%So_3wsh}@U-}lvs(HJ0mObq9d09au#z`K_m<};p=s#fF0{yrPS`$d z7q-Zh#1LWv7~zYYja{#Nn?mmBw3Hyf4Ls@{S!~`);DfAH>{m?HEz@m;oB9Q0r?D~Q z_;(w+>Mm%Tf^$_UI>UXz+)N#qznmG9*bS4cN1nQ_MfQ7EhIt+C!B+vVcQ1AqZ)g5) zZDpsyJEVJ{9}w&AX71!$(2lcq@Y;&VGQM)6+NoWnZ;O;cRp>Z)Hqs0&b)}kpszZv& z(t6^J{6=8L>`0DeDXBzsQ}CsCgX>TG2wRCchgSnD!bt2qULe}SMESP873?JULrRXD z`jUQC_&^=SSO+;HspPI~y{fL}u|98Di|&MMz-F{6bUo+m532ism2au2KTpbRL_0-l zm-#1|jA%k%eEZ+Q^WmilLePseAbgZXYWHLE#y zsPK(sonnSEr0J^v|4wp{5kop6Wrx`wV}hsb!3< zhQsd8d7pPwoa%JRmaDn%ts}|TWdYYGDhj0>fSGtv5~RyhuN2Yn)I zHn)msxrD9Q0KfF|dI~ZbS%&sUtHAtnp?-j_lZvaTC9{dL+<%y@sN)M8(>3GlusiS% zB;UK)3zi9HsreX?RWAVdbPTZ>C=qGf5Z7Dx0sr~1DA6_ZDSwRChE3unL~3~%WwH8z zHm^s~w`d)-6S4|+-fMt35?0<<<|VB}YxsAVO6qt@`|Qx<$Y|SOe_(*n9PO-Mi2}YG zl77!kgJFW%o8a54JC?XM`8tO>M%l?+hDoYIo6Ts>dm$Jj9R)4;d)lb}mf z8%Kh(phVY5b5FTTsu3>bwqf0-zAF5a6DKdkeg*6Jqb?&%12D^Rq6m^8ZqrdyFYrld z&1Re2HQ&2Bup{y{@jbgDFQQqQ3wTe23nW|Rn^hIH_jQAS*xMbQYLpxONJH34epLGu zIcXztcm5~fH18l^$<|M*qMZY;yszEY9C0fS_k#-fL;M;x6!PNLEPJd4>ptfKuQ<># z?2E00{Zv0nGiC>#OE6B{8BW$Cv>qTjwlmf??nFNV33?9rY3HklDcj2i!Jcgxy8%ob z{>nc{SB|d;ulFlF|2kS(JDYXHG1DnGxWp{NXVKYDTd5+{~`rMv53X zRx9{oaWi=jWnRtF@eMqr9AvUAuq~t;HtIg8?>2mQbbXT`| znmV^z*I164C3r=64=#f2yV0B?_S+gbY2Gvbd{`Rqovf4JMqWUl%zn=60aSt!N}+D0 zZZDjus{+wz3Xsg7>09fbsvjr@Knl7@5NDTVuqmwkf2nh^8j&`EB5wmH%a(-3)Cc_k zH^XUgEpcPnXH`4(UR^c)L1de8GWs5z z0(FtYU^M)poFFeFxhv?x`9xPyUgfT)bFt>(9l**u<=kic2;bee#1y!L;3f@D;FZjk ztWE5v;RM78`C^vjj_f!v+bcNJ`7_16r2Olyn-ps4 zE#YSF3g!&zvwX$$KZ(C0{|0i9a45DXfOCt$&gC$^9+;s7(av%l_Jzw_FJanS6dj&y zkv&YBPAlec`S(Q$XFQXAX0R+@hI*x{~Qprb)V!W-)3$%Wub=gXBZ{$|+l5d(@;b6fh(iqxn-)$J_f$?*Z-z70TYVE~g<3RFjlTsiXB6jfp zU{|5Pp`6QqO|s%oLR$jo+%EePgxM$}h6NMPB}4FxzLy?p)V& z&-mofZvS)W2~@L=gnnU5Y%Mk!yKLGIK8zQZskT>c)9S!z+rdL z@y0gMf)aJ0ud^SI;tjwNG{BO!9Ra4}WiJ|@9&4EVnyo?JOJBwA%G)45CRM6#s%JsV zH-@Y+E=0e7YW*j%EPrJ=RNE^-g{&IoOc($oIjbJ8Q)8`fvu9#LhWzK_v1)^|0mKqebsqYHqr z`oyqbk85rzJISX=!A`=JGu~5&lJ;fCB^E~(fbDS__yjQXdtxzeG3_wTE*0Sw&5w!s zR;!)jF7Z7M{vOpP>gC*|W|WJp`Me53IS?uMswSG=`jN;xV}qhS#^cBUXNjN4gQ_yxwJ?2u4}YVqQEU7UJphdSrrI#@FV_pByj?6MeNy2^)|}V^G?jk7 zwr(Cc;F?&p<_5%Vycwp!*I`296Qr4F(8lZ$_$%^XA^~hlHgyWK8gHxUzT^e$Juhk~ zx)>O>1;$3G2f1%ZgMqxWMyJ{+`%hfNH?a=T7LfX9J&DIrVW^I8pu3f0x_y{A2~?w3 zrt3f?&0(j_JS)S#(Rt9*FW?RJi?2=}$!94wn3cKL1REu8d23AtZIQvEx5F)=AKVH_ zz*`)oou!!tUe`n7d;B*XDr7uI=jJCT#6+R1zWeT1ju!APEMQkKANV%RF!xhh%$5N* ziR-ZYwf}Hv2+(clg~}9yo?&0Gw*`U3oJhyb^nfH-VGMariq$=5?0pj;+pf-ZFvP;Xh)n zQa5r`GC{x3YRqdSz9~Dbs;t)Q#v?aiI!d4&U`s4S^7@*Zt;$Mrrt~6zKlcD*JTy0M zWQN37g>U&+dZn(sjbzzMjKB_Ib4@9r(4Hi+=7-j+j-H-xf%@U5u~R8L*NPmY?_$s3 z{Sxk!vQ-s6WVslDsqZMD&%ncF^YhGHlk=Q|*);5oLH|nWw1bNwqWmlKgN@e-)3;Im9{zrsnTWHL({ZnUcPxA4>nk zJ`$ZQh~sZp8~=uoI3|Rr!CO*w__w~|)e=90DbWD+L){0%QrG}=D=I1)X>0?n(3kpz zrWkBRtt3zRW^PM{kKBp$ITMJ>BaZ_KXcJ7eRkJOzJOnD^YYy^H$BhOzp38jtF+e44D5 z=$qgK2W2#+?JoSCrKWC0lHmq{^WK8%jx%fTV?As+V6I_qWVs6aIgfRyQ{>&_T@$<$ z`8$Rs|IFkH^QmM=CH>8>2nm&)vaw2<`lH6F-J)x%tEvlXWt#0OuS%&5OG)Al{7syW zEG~U8X$4Hzt|fj(`v(8^-ShtIDgfQ(Da>2!<}((Hb&RcnUE{b3yg7@1Sny4Bc!HK$ znCnb((jGHza|m8W^bdR+m#e0!A8NL%k7_SzgIX21-I?l9%2(10&~?=jW%s1J$#n}dn0WV#nEgzD zE%zzge5>B_6K_Jyz-QohvFG?bVinL#S+1p?lYzG3!?FFz8u>VR6nzrAHqRz}A^8J5 z7rV443?bN^T|pf{%KePoFpSqP)l63HlW8Pu=n4N|tOkO~xzy@d_0WDuj;*p2u!9(c z-!*kN9WC{h94XmhnuA4%Hb6ilTSw+uWWw+8?u*$FH=9a z`CR2o^{-98cl&Anbq*_7Q0E)(d7$ex&u*ohV>RNP7H8yZwL1}dSzh^TF;SXVC`+3K zz1Y{{-(~%kI_(E=drm@GWg^DmWeyb4(P#Rg&ZId78@9U8CmqN3QmF-MW^tkx{Cb~w zbFQcM>t+>k1~TGPDJ_+SNLrZk)cAb{*Jms;iDGn6jgyr+gLX5VI-ub^aI_yI02tM;->YK*L4gp6nQ9 z-))}-{l6{t=Z;pc&&~zzH@;&*e|Td2Y0{LrkY7b+($}$GaQgG_3OWMuf+9Z#Jw}#- zq2epYD4dES*sbjp_Z4p8KY}gZ6IzIJo7697ORJNUqRS)YLv@0ueV0A2Jgq!D&r^42 zcWqCRHx2yq>VY;9EMkoR3*GTOS(LnyBBc+cui>=e4iTIbo)cadSCMF>Po(2zwPn8~ zeE9D_#IFT4gu8jYI6+`H9-t@4-SfS&?^BlKfLN9A`cN6jp8V@0ykFe+J>xygJl(v% z`!4$(f#TrRaI@&`7(I1Avp6Rx1gQJz16VsaY+h|aT8M~`O5aJR%RkCc#dP^fd9lp> z|4h2rELhJKaF#Pr`1Xw|EX@r`O^@G=3=c;F`+T#!ZLLnqxe)>YAU&e7F%-=p?+ z@P7`jifoU*O^I@x{4>fcS{LR{j#4mAR7UE9bYU@c^e}Zt%^K|k^&3@tHBIqFRuCT$ z9OqqQ9bmMlRL^hDJW33Xehv)+19CZ6OUGR61M_fVAovS{=6@`WZ4DjkT=)rHlk}0M% z$&bqffqU`MH`HCt{-31^kv5ex6@IlZ*;#U{(x2F7%a(G#((P3z(`>0$fO$%Cc=F-(9U1n6=5bohy z=6q>;17rt)!dhzqOPuD+B{qpxW=l3`A0Qh(nug>%c!~Rs>Fui3r`j2LTfow zrJt+5ulPLwQ<;yCKA!w2{PN!y*SCtL@9?eG^X@Ia(UCi;&ZH^y9h|!2Es8S8Fhx~$ zIc*7arzYrk>dzSl>8E3}QK{}e-84IcN_b)UCSwv91g zBGwrrMxRjxu9ZK`Wo%Qdqg=RmZ{S6AeY{J0eLh2N&fEm-VLKQl1In(*R$U|579xfl zdOu8PN}<`*U)@@nr|MqF!OC95Ee_Qxq*{ut?#XEQlqQ1F1Oy6(1MtUa) zM#H{3h2{p?s;^>8?;<55G%D&LM9u3*|XE6J@gMCMr=nzD$KB1t?qL7XJ&Z@%b zPL|~Rrz*z%;e@XnY!PnSZ<(8#D-tEfUXY~F5uI@^>~H^ao&v%`B=jtHDb)?w9UbYb z*%|%@*dkm4+v7~2``thWsaIbrBMrIGxHJ+!%YHi z&r9bj`&{#RFyHjSs{k`}q$y7Hv3|3OoD6pl|L#!zSgqvlY%3B<-^*IbyCrNPeGeIj zx7tymRKJN$I-QkTQt*m8(C zZ7Kn$$2+6lv=VP)Nn2Mq=D0fh=D~exX9CNjq<+*(Yzn`D@R2m9_+5Qem(nfLe}Fe~ zQvV7JD38zyTC$p>=qr6GY{#9)a#F74SEe_{|BV#;Q|=O14PdKwG@mrNOs7l#FkUfj z!pEBxR+{6IYYn8!21L)NR%QLrQK9G;jwPmV-U*nZ7+1*NxFK z)c+_j=>_3jZhMxQ%*j_t*N;Ds^bM%J?_Fy9bjxIXHxSEO;XG4qd_0kbr1fcgAGg{! zFgPSy7YLgdNzZAG*e|&T(HgLUT~OcF+K`WEZ(!$OaJJa3$cry*+$fbyzQ}H zsb7j;KTB<;HSr~|wRgB)!h82VBnmI&t5Kp%H)nz%FJUSw1Gl3a;>K>nck!>@2>p<$ zkVz-0Co5{pFtLY+vRg2ymQ1Si;uNIh*7*!2n3E=6@{ zHvJT2I0@zr+OxvN+`FVVhK0LZ$UzqKEvs?B&!Bq=)HjVqtih z{}!0RFWFqc7?J|9V@GMY^tq`c@e1fU{otMc$X6xIjlO~Z=X1gJ_#DhSAB6$n&bU;~ zG)6>>j>JCd#-Vd`m0>>GRr5f3L-s)87g%`rS$5heayI)orAk;LErVI_drx`CHv1yG z(wYNaZ`e}XI?6iCo^jlFH}|Rn{LrCTo5Y%QlR^acItw^wcxGX5X^E_Y^0elNR)ZkW zbO`IdAqS9e+N$c9qO7c^*vWs!t-~BdZC{v{xtoBuNZ^(4tgF7AVzrt3;p0qaO4Go4 zQ{ZE8l2zdF0jc?9Kp(r6AhNf~cKSv3TH(Lq2a4+IB4i}G$8fDoyRwC{5T+*qmb^JBkEB~kK7==ATAM1;*5nEX(x(5t4V)M ztdDLF9Q5V9@0~Wt#E!Hshxzzd%NLlNT(RD=Z+1#OU3`CsC{b~8V&-RIH1#Kg0MlGK z@fX=>#SKj_L{h!CNZpCOZSxxfT^+ zH0?01HLfUK1iTBX`7CU8GOn$@sv%13zhv{=3i3IyU4P*n5loT(C8MgxX=ZD;0O>8I zn}D{0chod(BlSo~Ukb#dgkqkY^^U%tRK8$IS4v!n6ou+}2fGPpd3(ZIYN==*5AVd& zuwVDvdzZckzL+HAG`pfuEuJK6p{}70AYXy(=+u`fs%(%Lg6Jlg zlFn8Z!0U0Aujjm>ts}EChZDoVv$ED*ADC;|?nBF^ zeNYn{o!XW2QzkQuxyyvNflIIxTGv4=0cP43MXWL+g9APxsVk$YpyErriOcfFvpUj> z3%Aq7iD!{Gyg|OZ#LkYkU6u?1jw5^pei2_x47bwlgCPyF(myJok5H49)35TC;cQ}O zcjXTdE|Vl>OO;C@VZQ{ajxx}rI-c%2FrhE2yQ*S9LVOCDlUwXR=|Zxm&^L87#)?c2 z{N`=!{Ndv!cU5nKJ3mLs#;)YNg_tWE}rF`yc98=(E+1e}D{7b#TY_u?mPe#&D_X zSJ_fQ={n`bXhuCQC&4i+guZX$<8&HB$Y>BB0Z3Yn&+yH zitggD;6F}H);8)l(%npPVkYFvMthykmX12+l|+40DenB0F>W&6GIb`*mdCc|PM)V_ zU_fM3GM8-$zh4D+im;>PwIZyZse6kKEpikMEYr1|t7s88YKNeov?Eosv8OF(wa9Cw&30obOZ&RpQY%i1i>b_<4mXBB8hUFQ|03K z!oU2}y?fk4ot^BLEe=aX%UjqQO|*Qre72snuLEAoTE8v0J{C_TGjsAdbp=z-MTOlY z3*<4S4rnR{^rOC&{yb2oF2n3&u&$N{SALWA5P7(FfPSDP-^z-TPoq@>X=v*Vx3Vo{ zXy8u&HM~@2{LOd?oMW3T(;Y&0*rx#|`-QZaRG-#>ndY7qx+E)=msIDpNi7*&uip;$ zr?Kcaw7u@Q`kwNc0(!=RhujGB5e>MtIcmBj-X|mv^>nm#v?*CFK2nv#`vs@i(xu=h)bGt}E-h=o=DJ$Lb}EGN%g| zWhpcz2l0N1UrWy`n`&BVCm|cq4Pc`luU`mFl>10s%?71HaZ$QSaE!B&$)~i;{YX*b zm4KS`+(ogwEPIJFcxU6T(tAHA0UK|RX#&w2rmV$o)c+#% zrRHWt5#+f)00-!eIb@+b209%sp8tMmO3a^NWz&VWlrRv$^Sp|p-qK6*Z>mF@PRLz! zwmyz-!TRVb>H^4H^)_Is43e}LF5|9e+@t8=2JHfd;M%}3kJQ1k8)0kD!$YP1((7hG{)Fo?uyseOOd^(q3BZ4o1%ARj71)OH^@=E z)*J@TiCzz%^6&t9jdSp7&>8fNwu^3Cjj%hp#6pnLk=vxLN@t_I{*W%9(jg z-ay~VW(%H6|B*j{Ox8?nFmzTmWqOx6R&-3?NB;mlr1_|-B`+4W;V)uWrg2DRGvegv zur;s&Zfx&tYpfXLVQ(9!o9Y>(##h8ib8G7$AdqN))BJC=Rib;k8gwe;%&lAp@VE|3 zuPUCa1mO5gAnoCobxU^(*@$e^T2=j(DQIKb1kbten9HbT$;zxP{wNv^;@$t)=6?;z$`mfNa254&3irbb#MrWCHyp3!mccVRba7M>+jwTpBz)QmE) zZ_q8>iq1u%YJ*y-#HGK4OZoq>-_fT~{>uLW{_%Oya{-E<0{nvy*6Wt#=G*u-qKGi! z7)*vgTkbk0dmea}28V`AVuRDk90eF8WKIo1Z)rw;P5lK)>l#6$Vx^%~Sy7n`csPF` zOEnzTSD911oLhz^qHZp@;ErGl_3`g>JMH~!E1?_v(nJQnabHM(35nm$`>iKk4DT!d z?JyC4oD%1cQr^+Vvj;;1*DATB@TsDjjyfjLxF%q|bOltY3u>k2GD>HZezlb1>Ex>i4`ejU>*7Cj^(fnJ%}jv!xla z(Ae47&Gfu^B6PxaaBRX)Q_R(>=hWehl2;qdi|8V{OxbTOa$s<=k9k9!eay z{A-IiJg)V=eSx!~F0tn6a)ocCJpC8zH|Y5`l8%yZP_5G*fUV?Tknr3IdF$HPTxfkZ zQQwn0rGrJgI4mZ#Lkc}JNSqU{8Mx^>3mMPV_*2ts$UqM-E&jzY7N9LDuo__pR>?ms ztWB&;>kGH3m01CV{)?Qr~d7u;MuLCvd3b;2LqX)GVty*YUpkjoVK(m4TAJm)7m7Ej&&f;qFoGPrk ztl6h~iPpmC*kp9O?kn7_sZ z=JmuAqXgfDS0R=XM=W~#Mu*ew@Q(?PP3Y36b7!dcm>TK$1&>DN#Sf#*kw~qD?Vcsq-p`)R-mSqyY4f?TPjC+h<%wLF3wo?0Ux6+G( zY03x&!>RdqK=)H{CBnyIj{Lc5v}QNDA8ieDli|>me23D2YFz>DRCL)E;U-{ruxYI+ zy>k~~Cvzx(_}#96{k`>!c?mucT6yJ7LydnyH>kC(v#qalp|@{972A+loJkkj(5^5a zL7(k}l&M&vl54B#W}vT8wc)3}DeR)>qIqpYO;jP2eGr}EO=TUS+en7&$5d%-aVX{M z^{+crul3(xSQ&f$$ z-E|MKDbVKcr2oy(7G@*pW_(rhFz&$dZjjP(e$_s3mB?LVyTEVF^B z(H7EDf8xO7B92@~eipvviKitNDzGbi=VF`k%1l zsiAL-wbixN3|D=SwUL+vL%0=~<;Wj%z0+r7dqYqC0rz3&Z`OJ*`wJR|tze_R8w~=3WUl6o za;z*QZX#r|hcG@<2j>bMS4JaP_rLwM`iVM^#SY%q-Rc{)!~;_Uugi3XcvBnGn{^% z@+SKfPC!i}9sQrZC!J008hG~h1G3*;_-)n1`{69h7PzbbaM$qF44#ekNp6O$>LJ<; zR-Ri)G*|i!jFM}#VPprk3G##va4eU_*6XC&sp{S^BW)t&@Vc_J^j4(ZnOw{st`TVB zedlZsDd>-o9liq2zro<5<^!AilVy}BTF zW|Hl?eV4nx?{J_rB7wxzo1B_@iT*cxCO-id+~&#`nqdggj9~VzD(VYP_$2lk_)pK2 zYh=yE!+3+)T-pIrjqLs8m+&=zMNiz3v@fw#fC*_Eyua~=u{yrRh*@gdzB!J%L%xck zNkDYmm#I`3LfgueaTUVxVu9>$*h!_e@1Xs+46T9v-xjUV9R*9`GUZp!SB7WZ!Y1x4xr1r0?ha|EV}e@lf4H z*9+~X-v*ZGrA4>&YcT`52nnf=10ST7a4c^>wApHti?ev@zu2JAGT$Q4R@YF6$o3U_ zz9Y;!_zkxp+L~)v@7u0AE$)ln7U52@PDxkBUwB4MvtB~aS1KK>=4kfnwqtGevy1*M zs$KMtfn=D9PC=6D0}7+~E}y{}&gejHkvp6092*k6<MUWHWm3*wq}yW^ev zns0dIW9(*n7|hG$Oh5Yv{|;=5?TQha0otCrD)0%dFehd zD%J&Zb<)^e%T&9lA+*z9?D9Dp+m4za6Cykg)|={(f?iJyG5>9of}5mfKoMyUcb$%f z7qlm=`h3{a%5Et8X@NzF3BhU4)K3BK`!wkDH&Aa?-H|nx+Ia})Hp4_YP^gx%C7J;r zZHafKdlEPcdO!~1B=o>G-~zk`G2HwFoZ1RkMNh!LF48XMPT$D=3r3nanQ5YQ zPUhAV9F&YzoKWr46tqpyrtl=0hRxOYMQ6f$YNPs%f{;igUHCIO4VmvKqx0&FCb2iX zJ}B@O10lAbRcyWh{q%*Va>g}a+Z{%Hv^KK8boKMD4xWgJGr0@F_fbo9lN&?yEmitl6u44OHM4yd|85^Z}GyzD1@^ToG**=;Iyb_S(N$ z`dCDGCDQ=>jcLD$AeIvcZCe~O+<$uaK`uR%Xq}alcF{hvCIBt{hpdh2xZ0>Yi57%jj3rM%C!2Nd;KZf6d z4D=O?)b_+)?5^sQgxW-pB<5wJ1rBXEb0W_ukVvN}DrxeXU%D3hwZH_vq5q~=LL;ag z@>4ZaA&?h@=h-^ecFLO^JJTTcEp*0T>RIhN3cc$^<~DeJJPkg08JvHzmW++;oa8C* z?;Z9=W+t0uG^G91q0Athtj|FY?669seXjd~HrHPOI`;`^6a!ZdRU?;_!(@9z&G@xh z>u8q>4YJ$fd%~>(^*t9ICu}0~eAwu$fUP78tie|NtT|vE;?%fx{wv^K=#jjZOTaB! z#yZToDd;6_1-)wyQV#NIJ<;#_7gz$jg^_ioFmc$Us3+ep8pz+q&d|l=>N#0*ZS+(y z;?=_@x|wAau?H9@{Yn>;yUzS*P6zJ4vprnrJ$|2j^e<6Y}f)z105rwa{l@O~?kEu%c!u zQQ7p)SlQSB%*4m>WtN-`8uH${!9sX&qI{+Ssfa$D)s`m~j+A~;-h{rxJw$+Mzz-Av zI;9)DAx&WuysFx)fGz(I^fqG1DP1@1Cm_o^ zq@P7_vgX`ntftUNjLhYDOQ7^D_jGZ#ur~u@T^^rS`o%cg_`^5}=E*M0LdOVCH<&0J z;?L8!3hO91<0pHQut?HYF-^5xOVbsj86Y2AgRS~NILD>5QPniXF!_6M1R>l3jCB+f zFg6<|PDQkVy^}do$bc-S@;if9W9?I8b5kiihK93) ze_yg&F%mrLcXjI_p?nWg4i~YNFny>8|5npg52On5G5%Z53;GP`k5|l8ORkG3LNk2b zT!ZY5tqtL>)7UiKxEki-27D-FTPE4{F1A-0+8MzUMfnM2Ej`IDFX$%OE$^i2ulWFt zPqMy;AqJg_Y1n*ZK5_#XJ-BRuXu04|u7fdPc8LU@Y};*;vX`@3m2*Dfa35{yhpx9*-h&Ju2_5hA$f2S zp*P@Uy;^laK3F`MUypl)xqvbb+Odxk*~rqs0$(=OLGcgU@w3{G5{ttXY}jQ65v?5fV}scxQAdV z$H5p1{laS*f1-C}MzE`|uX~xJjqNu}UE&d*G955w!Col0EVR^uzH$+??XQLxC8TLf z{tfjuL(Bh7bW~cR5JBIe2G+;GF)TAkiXLM#z$egGyH1sseH9-Nj^~_b%%XKDbjd29 zReCRI2=sCHbe^+Mv2`)GBc|fhO?UDA#8h+4(!xH%DfaC1Hx2Jkh%+N{dGcX~8k(yr z*+Yd#-5EKBUc;6GOIHD@+n3k}^iSlR>OVy}$vZf`TbRqi>2WJ#PmYPs4t($}_BtFx z?Sy%s`2uktrpn)--?R@*6+-(u*EUZDA0BKDsjRKpXJje852wHIo8**Ysrsyz1-ZsI z`r&ZqJq7fch1e9`KFv;;01XrsIMrBd=`BeIvquwKfpa4DHSwsOURwsT0dC?Ge%15> zUjq#-9QxyxoF_dk{r5r@W6hKK?CU~R#wpG}{0^cv3S9Y1dlPvJ_1-Og8ky z`XDPb*HjdlK>Q4z?=0HiBzCr9G7+sFGWjmRL@sFCWnD(pHFNNecw3<9(tu0Q%${Y=KNXRn`FRo~Z6$Y_WcTK?+^T5x}+PB9+vAl}lx2;c7uo z&IHCIO1(lX%}(Bfz0O~re_eGQ#n7Hwk1sRHOlOVtfv(!s{K|UMZg;iybqKYHu1kH$ zohDslkhxZV59v2}x|gWm>-GYXV71-_t&L@95UGfmHRV-=Y#unr(%kw?gf@}%Pv%y< z5?JTk_%1p%_Mz6w!~w`@C`|84CBUnzPgH_kTfnu$(=XUNz9ZE#H-%!OUt%{EJQOvP zsZ~1lSmZyn3)V*e6E$GJA)4+=TawN^GTxLWRHhC^nPhd@d|7hPY|OH z!B%6Dq2h_pjBN<+DeQaP5_5JQL*>UT5b94MfX&u!a$iX<+62yE?k3?-DM?{dUC;p$~`TCUS7%4prpOS>$^*37$u=#ch42kTCk4vA(+sU;U-Pu0AKwMMGS2fZ+K*l1y z^_X4<9ILU0nOHO3LG3EwSX~mkh40w^GB%L4xpk?T(Z!*xm+EfmY+&tVd4=QnViV2u z5KeM~&1bCJ>=j(+Ja+??Loeg4G9B_~$?fT7A>Bz69hY8Kwor=^GCEX$TkkR0Fsb1M zHeMIg%G4owd+|KsOm02KL-K&!r*w~4aqyIHo4bsopS8O6AW@DWOlH`K{6RDWJNpXz zIoA}=7TDWgikp(Xaw|zY=*w9S&TCOE*?#4FwOd;WorwLeFIVJ*e)k8|t*x)cRNLgs zBw~S>bA(YKU(01vI54fV{`=km?oGgJS!a1bT*PmgcHp&$;gFM?WxZxQ=6vS02W!R> z$rV{HsVS{Is{#KnQC{{^IaN~=>^oqr19n$e5pD=+MH1$hCLx)3m|33IiF74%JT(iLj+=Z} zTOYIO+h{gTLe*TW#FPW>+;#hTgno0ybnAR z8yPwClr^gIc zu%&1vxU;=gE|#K_G*~{X)1Q+0z{*-5tq_>$JqGV|#Cnf_M1ZN-_zCt1cZtuIg|fz|cP}G3vi*}-)E5x@_PYi;rdun3lkY$LC|;M~5FUIZ*MuC~(Vezu* z=J_GyJ@j$xrGgq_zHAN50-OjPd!T=+?_BiLumZA7VeMkgR@GLSRa7Eq!)iexBIr@95_{E|9u}LXjt`emiJ(EOupDxWJ3@CI`qGp+-fX?przVrZmV;18eB#d8=fGP8vE z0Tce$MjbSL^SID@-Tv6!-Nz5DjlE0$$km}dV4UDE1pCD2-y!WwSBsAer~J=7-JDy&K9#~5xEH$P6HHHGx6|2j$lA)$*sb(e3yq9@ zNUY9&C+VrDSbScwz#`cxZ>|2S8LoSemDTTqPV{ErTI;b=#I5Ej-bo$_UvamwE&(CG zYbF?HMH&Z#o=Z*_B+CNCWTFG)7F**z@Y+OWv)J0wQP;KIYYbeE`V*w=%))!>W~P_3 zQka%(RE$vz5f1uD{{X9DSOcf)q436?rEQ_oDk=i$b|kkIi$VX5WKG{nj)nfX(!bfg z!f^)fQ_Ics;rt^o4Z`2zPl#9GUU=>(@q~SIp$p;9RxMniE@ZyomI?>R&VyNbEpioo z22ZVe`b&_6PQf(b5AADpZIxDbN-&hapS_$$CV8?)QlePdP>FAz`=q_4jbq*j2~SJu z>(ULzb*AQo+1$wS8K`(W1Bqy@#0zMy)}k$89pO9@_7UGwj8=YtjQbUI6&NJk*uUsq z$mG36-e^pUud>ymtvnTHI=zIvJ~ukKH99*)^WSw=w*O_BZc&?d5+CqpMz*o^{|*%E zbQ}0ZJ$r(N$cy-*bld!4N>4_CJwa#}d1URB98Ct{>E~dT3_rlBR9Uaa_9J7}qkv7h z6xy*o_9psj@`v1^Z$8jhD@;v z>37-fn`&Pe5vWGshMfC=`%6RY_!r`uUxIbSwM*wCs$`f6eIm0 ztD0b@__o}sY6u+9kGf0PG{bCteGG-f_-JH`_L`EfI40JCvtT^49yOBxEt7~>h)xT5 zJe6F_Y-KEU&5!X~CbIFV@vX54KW8z6Mg1t`vUWv=$NHxaEdipR zskdp8se@@UKFF+xzhjpJ^_=qAg2$tj)RpX+LS(?0i82;3Ehi%0X-7Rf9 zRX4B;YT*uDhdGe8fV2g=-R~pAf+KtmS9gcOb{x23_l!!Q`)$A*;ag!^_OG+PJL}bk z`bDcGJ7!iE&QbX=)nJOYNe%MR>VcXyh!%Rpx}vXe|J;e~MW@58H>#)xC(=7SBhyKF zU3i))O^_lsKkBRPS^^2>zLu4cjBE?s(@oG1+H9U~-DMl?9P23)m=-<}uaRODGE^sn z%6Th%Ch4efs%9b^bU1bjl1yC<%k+)lv^YlFUG+$@PI6RGizj2hplv19%_S1&qPs$W z1Q_mB&T6*p=C8O9rawPT_kbHPi9jt}>ka2uHy-#eJT!4Cy(;&U+L2Y3-$AI7zLO79 z{sW2eo6sMx4@}^h`dO$3m1(t_6-tS0op=*3!^zMMKmebdlEaMjv6t;`4ar`oc`UJ{ z^t?%9x?p@^s&1ZT8SCf_e6$;ZCgI|EFa_6g@>Ry)9Ijv|n2)9Fa0PblKY(A9$OzS6YS@y>>LW&_bd2q6VEgarW*C}>4eDA+uFm?%#-&K zVNq;T>Ozi1-9w+lt|mMpz5oWpVwDKC-5K-_Iu-U`M<7F7ONVH4>R0lbl7XTKy8^R_ z_AXaQHBa1wJ@iCq`Tl8#JG1$WF#w#Ni?G*;<53H4d*+<&k^85F8bk%DP^Jv!3-uej zCHJSWkIX5rp~+}BqO+hIGQrRh{8RU_pspo&v#erA zIrl?fr{K;=I6gEpps=43VXWkQ<=+8yUH@B!0$ zEO#-p2YnMso`uvrIN&<@p1Kb>w^_a5g4%+Yfo{lf@W%836XOM-Y`*fm2s8}~lOHpi zfeJjC#phlSZj&C7WmNaoACWC!rL6;$@jv1F=zvbs^?-c{Uyh2uL2L6QeI==EwkTB$ zeun@wiR;@3+W64f^cn?_D_o8*GOr-Y*{a*ixkh{L`D;aL#H*${EN^#f#$PGe|nsBaMKuj?!7 zc&Hmlw@u~q#9x8_RE0i>tjXiaZ6{GRDv157j6lwVCKMt^ub@+w`!sMnxuv3 zGOs36O{r6;08O(7;p6_NuIbK0Fw+>l0%e>G98VN15{)foVgI!k&zh=0H{qkToL%nv$6FLKMfS(bq=%CJrVU{gz~(zx zHWBeX5{6=?nhzXR9DGW* z^#3PQHr8v=b~**jfGPhE!@n}nR9N2_RG~CrASU2>g?zv`} z>Kiy|+6f!-HnW4&e&jK^>8V+<*5TVeu4gYK?5|iF!8DF-^!?gfx(_!KjVwFuZCulR zpMr;@R}=NYAz`F6hfQ>;aD_xF@2LK&{s-xW&c)_~h4HbW7x1Qg=q76Wt9-J_Fd1LT zmeIc#c4u2BCr76RH9n?$mc6gFhItS%7y3ZYfLzuTjETc7JiFOR_B`=lhZemnIWO-Z zjiGnt>=G;%TNJI;UX2Hh0MlqYOnR^BrC4Y5zOI6%lj68^p2*KX&#J)uox;nTU`y-? zhJ1592b^T)>_UDSJHoGbuer6YqLb=L`g@1&#{Nuw%UvdyWi02c;CB*FmQ__Q)vnf^*4;;Q z`jyxg@B}eoy0{$}`62K`uj04lw5CTWM{{*j%*4o0!Kd-Oa~`)%f|0 zalnn-XQMdZxTpEch4;srB<^NMKp&_bYb0MSo-Svo&Z&#R)b#+J2Ain@wo0FcC+|wl zYh^Y0MM*QkY|b?1F{&`{POXk1;q(42o@vgIZL_6`r5oPfq&Lk6W_mkU&!6QLI5jCP7rte7Ts2`_Wl z%<0tmd0*O;$b}~d%+S6z*?+gLgZ!G=l!lXB1eh=r&6RAE9Q9m1eA5HHB8`$=vkytF zY1LTOcngGEB<+DQFhjQ$2+C@pqrKF>2b0TN;4~jr`Q)9X!@-MinDrI%m-Eww#PDc^ z;1_S)h1!SPLd0RbrKuE5L_NUc+{gOG>at&U1-!u^CpsZ{c6=`0*Ay_-0OxfF z%X-UsprzmP&JKJJ2NKJ(=L?Ogj~V@WW5A-tQ`}PRMp6g`>j=*IlZHpwPsqhufi`qo zk(8Vez32VSUI$Z+e!1dA+1Sm{ai11`y~}MmXqT-7!nn~?5Bh&DqKhSByW;2s>4V;( ziitkyWx1!6%FGSys=`5%k&1%KfYjC*(R2oWOTE$4! zc#RL?KwhdJ@V*?_ID-m}YsYFos8-84lCOdT-2cGTr7j3EGvn(+^#i><;~j(T%`NZ1 zfN~9QYImB69hh4F!%^A@XTxPeVY?`giN ztID591`6MBT;Nfkk>8Q7k+6k!2T;#c=QHarAaINY4s_h~*i-}ljzN}U%Uo;1b=)&Q zurpFEp@e3)k9LX~%KpG9@P-4_=-|ZejF`NQc9J!i|3ffS(puhA zRjgU7i(n7nEO!~ETor#lq3?!bSl zi1)U0z z`ygY-A4F9V{zr^-m1_!D<#k&T6_V-^zPRrU)AHHh|eao4=SI5+4!$ z2297!t~oZBxh>c*9vX9|JI29yOFT(Dwk~j7b&>u51#iU$CQoHslXugfGX1=Aq7AZ> z%9_xn!I1aZCop_o(4W#f(3QHnNIhWuycE0nuQ-dDt*O5QSv8XUJ<=^u*)zz+aDe^P zJQR`5|!y;Y*H+SxT7$#tlKDd1QjW7_4Ta?NaMDFv8D=8I#925N`!J zx%bdl9uNK4?m0=&Zt_NP?H_j(sQLtH5 zlzfy~Mczu;z0-`gF|4MXEyvth#ERc94RX?f8~o{&{S>q@SX+n!>_{ejMY zj!We%vimJZ@p^;=H&E(*Xdtj9Q_?I z_%LIewaO$t{xv4tm|LqDdSjb3jmpN60ra>E${G!K;sXY zpIPJ1PoB^I&EX0$MS4|s3}qza1E&?giMX2VuF|Bw4xNxC`WO1&z&X|o%o|k1q0uSt z%23Hg{sHzWMvgooKQT2TJ}`U%W{a<#E3IG*h93W7;||jXV-=ig)>?L2t2-aKCi+JK zd9Qp*le-7o)pP6{{54`kc1}53(@YCK0j!Gw*Jt3)vkEe|Lp48?J!PLH)rB)TADJ;q zG;d8`NK6aY2KI1~%WG?Et!5sNhfQZpL-4714DV;TWczAg345I?q2J=pq$b~xGL|-x zZRG6~iKPvk@&yDbZW%`L&t;Yqv*=&j8yGi{&jPu=~X(a(s@OKs0QE4-vNWnJN=L@T6xWl~K; zr|bUFAJtp+T0;fw0Jt$d>hVgg9FaT`?&aQN{7&1NcW1gM?2*Yp-mB>TZu6Oimh$*0 zd^2#G>zmk+TUFSmI-a;{_~r*0(NL;q_AgQdyf=F872!qcJ$Y-@GObNF9&KxQY1mqH z+^`UPgWN@o>dNwMlF$6DyyMJ2Xb%hG?3+ZzC>d<+U)?&V+Y&M_g2a^Ablm7Q3ZZ4V z%KXLp&^-)nzP+NOlD#rq@-XUp)^Hw6I9W1RK12ChGZ<1pPvI=Os7PbjuP=|TKpi6mxa`!)7Ey0-r?B!me#w~9dXY)J9f{Xf0 zq;le~%weFuL%Iy+us_6qC|;{JXd5HjfTr>Z>kExia8T*wx^n9M%5hSsa2@{$`!+3J zkmmUCKYd?t3*;{ijsdoHmQs8yB;+c9`R@xJBYft~wk-H!#`=-4C~i-kFZ?2pU^U<^ z63l}r^jx)H(+)Wf^UL4h1phCpM(Y9z@oz{5w3H=8zxZj^T>2|=D%T|SBlFF4_6sjAanrxQ4Pu9`LvO|J|Xar2(TWYGqWHFD0MT_*;jo$5N@G*}kMQknA1K|1N4Srz<1sMbNoUV7&|{^|SPA^!0#F*$DQYWfflW zNCBC{g>ARC@Gw0waXLIEIMGJ{ZSjO&*Yp8DpDbK;`FN*sTLeQ2|pV@&rrqC>1 z6h9vs9+(EayNR|rmgA6C?TK$NRy5(JTCiO`X{qTTTrGSng68PWfn7>2Or0;@t64ac@OwU`o;wI zh5X@DkvFk}iAd^bE?j6p{*N}6p=0gg7I;O1zT%IfDzb$1v2?GjuI#;R6Ii*Lh^h%H z!>(ur{9Xr92a|T@&!*2O5626UP9ayYt$(}stVidq?XK=V?>ghz<|*+#4~z)1LyFk- z*sRpe%+`XKGJ?)vEo1-3dnXtw>LTka3(FPCo{GN}ZxsJ24oMfu#!JGYE`lcf6Py%d zJ2gQno7$u~1|38k-flZFBYr{P~ZQE7VJ(<|n ziEZ1qlM~yvZQDMv?aWMfRogbd^?p}=K(3kTuG)L8=eciNLx<7P&UMf$4ZI5OhzyL^ zPBTcy$bTp_CYN1~w^uk-+(r6MZj}`&swfAmij;fcv)TeItN%gPi^6-wZph?PtfW+C zOR8^-2>W->Hpba0EO&9G1>&amDUs@=CarRKk9}9=>_&a-O zPKM)%rHZ+S@d`L-P7ynemyC3a&!TY_xHfzJ0eOU*C`oHbb@T7jBdnMF*1`?aMyfB6 z=EbmiU?J|Py@B3DS88~gCd!+#E|Nz4O`JkHPI;ZHoNkw>9NyqJdvJ%<^3BwkSb=|s zci#cM*zgRtou^DgECcN-*ECPB;F_2}>B;^jTj(p<7x@)LBc)>1IY?r?*3B*$U+Q>4 z_W~F6l>JC=^#f&AI!;`N_lG%~);VuQW@`L)_<+BS$7Qc?D`Scn%IcpN+lwz0l@x6% z8Lj_fK#W~1JiF0#*VitzAg;-F%d1SA$+GgdOBiyi(g@#)V(r{g&kI$hrTi zYmN=pyimwwba0zzftX0i_D>CuRt;|VWbCiZ{~81Oj>YeaTz{f}6n`CmKNp3IyBp}n zTIPw4m!8l5-jQvoo0$m|7qdBUnfRf+pE`nU)>SMBmwsBdUb&5BlV$pr$raw$J;x5H zH!3Si&hhKAVeOx{I+cvw3O@7*oV6`YjBWJgi=%&*{$BlS+Rqige*W6($mOn`Wwzz;XY|=l^7kQT~VrfnakzwS3oK@ukgD3?sAdR_EL4VG4&Hg z9q~{ei+P{2IA=;c319QQcRDO<2xH0Dzb}5Lf9C&ieZTPi!H>2-3x3ZmN)?NU8P;E} z{XTZIY3g(CJ*62dCFme=DViexXtx(`EVI7?xze#pbt-c!Dk@&A`lE`!GQ`iyaSH## zPO7!C$-<{c71*I_0H$wuS0(v`-2ow@St(B zE#=V!4Ka1D5{1ij@J>s$s?O*O-R;ur%1O$#tmvwAx>ECsnF_zk9xhEU*oJOYYNP`M z-B}{)%Iu0nx$rx0&QZ=f5#D{OqF=uZKR5i?|Kt0Qt-l)leOlB}ztc#9ywp{1 znamV&XNC^82Zb_3l?Ox+Q^A%pP0Efgce!kXvZOMh!n}glNG}atQ6Ra(eZlMp-K~EY`JC}ybLj z+VZVVi`ewU_yC@@i%kbDWZPbQWoOLu(6=-+HeQmPo?VwWf>N8#WbNa=Wp~eT2R-8hp97o1wPU3dwK6NSYw|YaPoN&BuVtR$yyBeTG5LFhcZ7)O zlK7nPAMt!q8-Z6~6GnaIXikND7pCDk!om(-6ug)*M@k^Y1+m%WJ7hsWgIFQ*pbo1c_w|PPAN?%#Nd75O0}>7BV${U=SpCT9(CpwJ|2fZLZ&Od$ z?QnN>89j2h$FtM-+gBzuJ>-jw0?+5*%s$dX@@YyJT3=RO&c9rj;Dpd8;z%z^z0!zu zx9pMhr}TyRqNu7!%R9+E$^HWt@)l%Q=2B{Ff(mT*_r4vzn5TuaqdjFkZ9Qx`YI$Ss zXsu*l?^x`7?|JT<7%UV09p9gdlTPNprWwHi_*y`gjF8(EyHsm51CUS1EuIczl$FkI7C}hV@qHA z8drJ$h0vN<)3lRxiu#ku=jVj0F$i+??BsZHXrMRc>}<^#7wLs1Z~iv@{ol_jzxcl+zjS}^7k9^(8~fY1Zl3>D zxFDs-8Ym=o3Ga}&onjO+Oh+$uqs*{!v&vtr(6D0t@{P;gD)YYZ6Yw=W>`9CkspFzdOq7^WW653=s*(%hf5Vc%I^PV}N&87#70W)@+Qv+$p-u4%S~P$!uJD-4v|L4Zn%<;|gi5<(|qVco!jCAz-4Al4qkkYlQ)a*t@HU^V+YJxJ-B z4JS56eg17;#HqHuHU7e<8#pDmpliRT=ydUZeZpWcZnjjhw{h?Cj}Kd6-~AAB6dzze zl@(7^e1#d4T6;h@wDi@&VBwZRPN^mZe5^SF?M9hQ6z0}s1}M_pjpX1s&tKnL$5F`= zFk*0z8c}Te%PR8!z5BO&@jd-cqLlfo?WxNM6aGlNd}cnmn0|{jNWhd>NAQW$$BBm+sSN4nMZ=$e>^YzpRb*}k3$6$QXSqA->-jJ zGEYC&(8f?==xk!xq7IR}lz&C2Q+!ggIM+Xa6OGULhu>1jgq^)hwM5eZYl@Yi6R?3m zNRw&GsRfF!(DC*1eC$n(C6tzV-P1o48zaeJfB!XiJ#cD&v7Rs=H4QMfFxreP^Lon- z%LiL^=WzE>|Af$zs5fyTy`D6L@{@6owVG=d+z{`RvE`o>HdO_+Q~gYHLj6MNR?5I2 zF-O7`<@kL#4e1sNl^o5!OCE~hp@;syzSk~^Lt=ND516c`bwH{fWG-zQ4(C*!U zZ%SZLcu8zc>J#LkuhECF=5YH7hl;yPH!6Rs1Dai$ap(YS9+K8{M6#;ViheSum`%ni!gux={{@MgAHsjz5;ItH+2o6Fvd)`&3zs7oE7{_L)GA$z9Ta= zuM?HedI{4Rp5(j?Ro&JM)JQNL*d2J6WON8cCjO& zB1i!Rp|z1Tz61+VYnb>A1V>Pc$eJctme_kamwFloUPf*JL7WZNri;v;oLz!vlB4qa z>XVuyFmc$aEzoX;eRL=Ami~eF`Y!2qQ9E9M-JZT7KblP^-o`2fRsKCLGW^|dnfb;_ z&`uW^e(5(s21shWWv1GxSu8VAC~R^+;tM`9RSS?sN8MT7!IT?q#AdwmewdR~86t9&=06N|*puG_d~n`7&Gr z2g(!6W$RDJK5zZt%t#`BD1DnWjrN7{i*rU`6L*o{QnuD~hbFNZ4QnewySpBG2&t&j zD4R=Pi7xW}>>kiBtdbj&9uQj{qWhY=_c?mmra=C(9)wW)+%iL9cAA`MO6HW(P(m7u19{BeuBk?y=PWB z1~SlZ!K2<796<}Q>tL$50W{2s(1iEGzOWak2g6UDly@do9Qz&`;Saho`vm)N6UDUI zkbqr?6+EIG==ieC<1HH;J>3I+8=)uJH1#8Uggk-%FMAZPjVK3%*vG2RnwN+Ry`kf4 zY1mhcftplPl;dQd#f^juId_;LN;I!=nwj_!S`w)4Q#q-2hGm?IW?VxE489TszX66I z)ZETG##Y)@#alVJJp3Y&pS?i7Lp#Rm%zG?6Cs`(6prRsXq!G3q`+|Ljsm2#%II>@L zR$f8E5Gi<@SZ8S)$a}Nvk`<$6f_z`p>97y9yff~`&9FDB0REo)VEELSj#%8bu%otT zML+`maaVd<-g4?BmKL@lZpjomM=e8!prgU=uvaTB7^1C!Rzq?skNgD?jmq#3GHG;s z{yZ=^o5F*FZM}P-Z7;FxHGRg9Lyvd~)qRB+UAgH~74pb|YTOj*&jB8_Fpw-Enm)aVe6{_oGCKk+DXA;|I*t}Tu?whVBR+=Pbc0)L5iMzZO;rMk6)6L-?R zu0WlLDBd+iAyv(912eg|ymtbwcp)^XCIO+cCpb}qXlJYrkcXoxA$-$6Np1_tynooo zXub1$llr8p#fpMDUuAcBMGq@D+gZe@}8T?QeagLE=8f=r>-?)bPZ-+UFJ{bo2 zEVVs*9e1}_B7dQ@!5nK^!MB26rQQ_$Q|b*g^hTo9z?0~eq=f>mhq0ORfs{*Cjp>39 zy*nXi{Q`VrrSW6>;$mHi4qUtY@u5Jd)Z3;x=DB|cW=H2GYiI7}g(#C4OSn5ke(@98 zGo=ysQ`OKhSRWuw4?&k|zNv31swtLB{DQjt6VSS*QWlY3q>n)ZrDkZ1uaB#%bDM3d zwY_OSym4y~jf|Czcg!`deXQGoFRt?b7kCD_bXSTXne+eBJ2G9oZeqR+X8fuuh!WoE z8T2raVKmrJ#)^Si>`5{C2|@kd6}ObKfyMlP2!6+~2KVDzOiq*2HX809 z4}Dw1)8o@qhU}62UNjY0D~||!N@^-l#cW{QwnLV~v(cfst+@$J`-Cl2j~aKz1xEM5mE9^ z<|+9Ptu*Tdue9unf~3hI-GE)Tr{D~{)@9n8D2}XFCE%T|6z+nwUy9l%kC8c@s2cs` zF9qz5&-O#M%0QlhJP08t9uiBz4j+J1R?soQ_11eLmsg8*y_ATZy-udAJtNYSgaQ~IOSPSXrJ>gW~U_DMXvbQx?ei}Kr(-(FVLjSgg`?t3+a5Q3$J5zf}-^elAN%nMJ7vX#HN@+-etGa0dVC{L22(j7lXox0$&x+n{lN^Y@7B%G;~1YH(m#Z!AaxDdJ423k9vQeh5W_%D+l`2--uA z^eOpFj-Td4J)yFay6uh2<_QEgMT+9r)4A+K z$~YRG{fKu**j4h6>@V2Ud`KT`0UAa|BdawbM6N!pOhfuWC~VC?&RR|{%HK|kq*lfL z3$5@++?|}|Y^}`0jU{@Qfu`?nxUc_UxDCF?8Cw7B%^*Cft zsuSDb`FqKlvvq+R`khd>*jQli_06wO*K-7db7Hc5m0G76i!Ib`)NLyDSGV;4`F`V& zzre^33ZDrsv!m4SdEK&)<4B}KptHN8W4ZN@=`?ZA(6eNLUZ@|de{Qhjt08GEch&_1 zT+Psk=+u-kx0~FMzJ@u9#}Pde+kg*SQ8QDs9BBdEJr%YF{h^Mj=BwJu)<_-*n)3Fs zboA|%H@Ok%V{uuuV_=83tZRpTw57U~- zGSnlm%G1p;%C^$n6moLEh>FB5yehB+Z<%^n&e*oX2KT(LN%&T*bZTTaNp3}>vHI|N zqVuv+(4UHH9zeqog|l@Wy6O~+Kz6F$DkRd3;23W$^B7f5nhih4>(D%ZM|YvKoCWBk z#D4wf5*ARVgutG05;aVZEvFnyJzM%qwCjux+=1XaYAAiFYzH^=o+zq) zi`~E^XgB1#+OHZZkINd0X#zL2BhjXH{DE5^Q1yvCZ(^ z&=y}r3^Wh6p0ZkfnV(vZ z+P8bg_%4N-$HlOnnw-ytjAvKwabbO_Q$7TIkF7NCkagHKtOm4PR%?c+tEigD%79xa z$@vT4!ZqYmxxuL>vCW}czUS`mz#y@K8#8LCXXvSKYxoY7{AaMkU1@y+=l4BTk#gETa3RYg-W3igYj08t6OKK6!O%6X9cyly#R9%*{!6 zieC+x{CU3fj+pg6RFp8BHEb9ShWe zVSJ|eh-{#;t-7VAGgc29tSzm5iypv8$RyQJ1i}x88o=sS<5w4r;m`4^*;(Wv)U(V?eGZn)(f7A z)=T14vkXxK;^_%zOHvJ5JeZ$0(o{+k2M%*=Z2KF%5EAR~qH;K1Q4ate9U+7)g zLj-!!0{L7eO+6hM2^r6)*zkhq=x%hAX1#i;(ka<5E-z4X6igD;OM0As8Gje~U_|{b)ln>Z_2^)o02iY3}*?w5%n2Klvxz76M5-h>v`okZL4hgV%!Iu zh}Oha_zU#FW@S|59klbzdz|xvFQSd|!^*wtyU2U2Iu^k? z=(5;%Xvg+f-&M4c=7|RLy0cHyKIIqW9wr_{+=12Ji1Vd2WS#~|>no5Z%quaK)FQqT zTZ~m~ZyhODKQQf>#AZh zT&#u$?j2@~8p%_uCQJ*V}9SrW{s$Tu}Z#g+XPkLP!07t%lHZ_DvB9irDmAAB9% zpKPbBT;p}foZKyGZCI;+Xy{=mFitQ(w_bPH-70^FaJ@v+%pmd?s)y;}2t?JTwG^+^ z9W_~`2_*eSXxBk=bus!^b5%7=VU-LQ-4@6px7eAY%Jxd3v8lo4fvfK3j%7BrCExT4 z`mv>89`Fg=;4KK6dA7BRV+0uURN$cMpSqem_dlW$y9WQ9geMiKUTYS@XO<6aklv8d znGRIE_UaNvFX=DQIsP8bBiiMBcUF_M#rg$Oz7_5v_I}m@ma0Y!{|}cMc=$ii)-f7e zn|s@WcA0k?Q1}PM8>Op}%IEK-*I@nTA@F=RDvqj1$VX@~*3o*k6~J2A6=nf%RPSWJ z!GHFN+mtz<`YhKd(>vBHEcaht~ zx$S&m-DEChazUDVCw@aetb_pKMQ8BA8yv5kYA{L?u?0zeE|@=wJ_np&gM<};(tJhT zU2_Ie>#FK@WAEX;UIBfno}&sYT1sCDYVw9Nr&F6#zGWXJB(asju=k`>=$K-uZkYlp z&t-?pK`O}kC2;q-$T`r{YD zN<7S5VySEUVE2sx=~&Ry^?UKQWIlzNm?nV1t+Y!@W;xt|a$>FU2J$}x(+uYJp)zJpL zV3c6r=#hB6%nj0C%11_&)re0Q2PFnYJ(!x5MO#C*EMK=q*Gfx9PpWS#Gtx$4wO}lJ zC_O@1l%1HW7`q?b;;ZIfXRl`2VtPqThhFSA{bT(&dYvit{zxLZp$p33lcs zX%%%Y<349Nf1AW5y$^ee>zctB6K$w11q71j=yf%rY_4oC%aa5JVKzaZNUcKZpWYv{ zg%|p+g7ff&^%k^awYUPu^-GKY8vM{*J!rzLzwLcoX5XQZD_$nuCbxk)lVRZO7Hko} zlKoc5kT#IMJfz(Z{_!jDe4maqR5w=pKrosnymNn|}dMS2&E&{om?)q2p9Q-taN@Xms&%#VA2%zY z2~CWZN`BAz$akq5*aWY;=#PZ0NT`M*cagKuAP;NXYK_=O#HOyOiYN&2QPB_{hxLQD zGw)9JZNe6L9K7Rw4^)kh7Kw2`J`F7D(Q3iUBGIi4G>&?MA1vWLn0P6 zuXpzZm*NOGzjuPOyWcRhp`G>k8FE2YFxh`T1?)80ecW~Nm_kpbXfT(NSf)65oLMFs* zlvxtiosOLQp6_9(2uRI+NDV0}#su~e{$%k~`7vd4L=5lrwgm$U?&-Sf=4snuLsYL6 zwPhbgmASoGYrqoSKl47}iR=$__Em8Yx7(~IO+Sr8h>>_(ydv=(uW5W?YGiFQKVb~H3TS8I6cONu+<9KS4k zJ$-AwE|*Rg#CC@Mc#2)KZC5O2<2PcB;jz9Ce$YTB7{=!Ce;l+qomS6W|3#RV4NGk% zQSzHHG^~rfNumd0nChzfYo;P~F%vWxH^9H!=y6SN%_(_D$tPhK-thmC2}mu|iuk0^ zZhv`qb%)jxG+lyZSrl$VhzE9yHoyBQbx$;&1SLa1IUrgl0=>8rGUo!#j(<6G1mgZ z=5T$YH{6JPfr=q2-AN(K7xkX^TQIN6BqEseY5T4|{?p$cEVJT}2K@anY{%i?J|FC2W zeu_9^*E|gE5w!=C>7}l+RX7)@YC>+JCffFg@IH9jF$muR1QT zCJl-|@Sm{X(bd$kc^5JQ;H7sDiG4@hwH<@3T(i`)3+Kblb0<)mPvDD#o9(#!9w2`*Kzv+%NI*UQ#+yvo>`CJv-OPVW{R7}+ABI%dNY1fI1-(ieoER( z{Y!tr?JuYywE|7IKB`4uVpPcWN_C^Pmw-X?MKws_lopB}^Tx6yj63AfS$g6kIAG1* zB3FO=Jm^e zTUDiyGw4IKigr9u{*&lj^pj>EG=j*|_h6H(%h^LKAs3KdrJ6=>gcfpNmUpHf z#417#r>u?!umw-~X1e>j)>yZhH^6goyTJ*42Ohr6 zP>j!mInzgbV~;MdC%i3DKOH4m^A9n(+^&Kyl0#Asu%K@tCfK>efHB@3GIM`4Z`56t z<7FE~rv)7LTl!$KAKrzP5|={9d|?;QRbU%tu4?q)1MtWCC593DnZ$eJZ=g769p9WJ ze-*eF)=B5(zEOO14rdi_t7wbtl!C1pirmMX+CI9KItQd~_38$iF-o>PEb1f3XAfpF zsU1jL(yikwBWeF$x79Jt_S_OCx)UMTd;0VpA#bfB_L=%xSKIfv`ukso{)sJ13?Ny^ zQ|M>dG5&W^Y3T+yWle$!P;1>P?N{KDENXujM zC!9}=!zbwv;f44_V@vZ%OVYj+TBY7#x9F6_uMC+yhh|~zZ#AG1}g4LxB@n}1FJT*6PcAM7biuPfk!~d-(fonq=@UpQE0Ta)9Zm? zzmbrdCs_=(Z!Qkxn$|_aiNTo{d8KJi=0sjlI8l61F&>zXwNW?rM|)daQFjun1Qdt5 zssi}{=`Z0;?qC*))|9Nv{!UsVreJ4peP83D=IS}5zq+lwhEyqh#oNy8 zNv)Hw%|sHtpR*jY*LRNaz7L=<%jyp&2O6~uV;ZLgzm_;6 zJ*fx*A2f!|)is6*ytv>wb`0b&o0M#YQ8<=glU<)qAveyoPf=rmU~O+-cW--ViyGeO zHH_Qv+4yegPAvz+=T!KcuW)ttGzQevi5ah8$an?8q?;&l_DzynFHYD`>tp& zYc8%Su(7+)7v&$y-b=Zn;qbry$DVQU4*6tG8rKpli7?&-rxSK?{&hC{EVJw)_idjw z7=};QgUns>SE?H*v@+3XDN~7R1|kY=XRWwks4l17gKb4!8jh;6e7smJ@UV~5#!(-U z$f-^-G_3Hy_q1`Ivww$9^eSU(93wVD2XF~~l;D{TTkbh@?rPBZ92jYybZ1_X@Xy?;Nj0_*sgn$(nu04tQei)$W9?PA_a8 zkcUG`rrasb31)L#tR>X5qyw2JiQ-tNP|CZ*v&g}*-iMjoS!hZsVcY#3HZBy?IrAZ_ z($U|$CNL-5G9F6T&AU%SSkHOuMIp&K1xfu&GaY?^&C{}V|A2F&JY?g3D__bq;xB@J zJO}FyP){FZDyJan8m{TLd2Tp7mLBHr#sIz%daK*@Wr4`m68~8!u0~W>x>BKqz5^3Ii-oYhy3^2a>WDT`KZ2iQr9>-S3G{jeqguX>^iO(d zY*+Y#zlNup^O|*vnQI!4`=K$nSHDE>1_lYmblvK9wDpkvSolNYY3fhjI_eRoj=Myd zlf081R$kVS&`($?pjfTcHbL8H&Z%cASIcipmIxp4C$qZIe^EY@(y4Lr`=KmQX!D$Q zi`V>;D26WEMnf2q-Gs5a>Ad;0^{0J|XP)05{x9|@-Gg+5QkJoT9pgDg`~H`{)fhGZ zpmm`W^jTX~w*u{&F5vXeC~AHd<{dzQ4+Xg2a;zqp0GCx_5v+*yz-c;1vKpkz~}0&b{fzM zH^Sy~nChE+utX$i$s5fuQD%}dsh9DF;m3ZL`=&E%D>0jizlN{)JzyI3(_8T+M9|2w zt#T0VHQsh%W~_1YChQCE(KoXqy#1mb(xr;Mnwf|W3t)2!o`PTSJ9ZBxYjmo7xlue? zm}0+Wyr9g5X~4yJ`|un8E6)>0CEH(<)mV|3XP5!Z-ut*1-X)j8THvZcK)=b@IE?UbA}f zS_%70pDBi_Mr#fML8mKxM}})3Vris`<`SGqZ;7`HFz$F}1KI+hQ81I9@RmR|Z`|?0 zy3o4MRE3xbH+8B$VDKAy5*ti8i`Q1e<#vmMZzFS(@@&IADGg&i;w}*4(&lobYP04j zP@u2DIj)y>z1FI+YksS=imlQp5bN$S=g=JFBbnyO%aPu}`QCijcl&a%B>rnWf+v8y zmo8ahXaknHbEfsyea_n6?ZF`tRq}6U4y4O^vrceV2uF%{%3iCekeHeXciWSgOsmzN zM#m!+)X!jFn1U?-Oz>%^$SZ-o*E+@u@ABPph3t>4lVR#N5vM@6>53tQSHwG;DCT9> z8_s_`U4yH`XJU)fhe;etJLY-L6(HSimz`H`gWmN}U_n#izIGP#VLK6~`mY?3{Spr0 zm$0_dtz9rpGgj1SDHmF<4#Ss$1M9#K1N zqSsR9GHP(Q@LP-LO67_d>LPSLX4mf4?a+3I*3NKrhkBiSl60SV8{fdj=!^5~k(Q^H z#yz3SKE3OuqmwmcT0#(b3XEez4To_CQ5xu%)$O-|`K9*_4{wN_O?S$*r@W&-V}F7z z@n7j^Wo6APc;B9cw;@w|4f00yH0?Bf;O==(RDtgVE8pAvSEPNZ6Y=k%c>%L)isOcL zmboTu5h_6v?@~zw2(e{h-!j%Fbnf<43kV|PW2aND>}QITHkvbpClyzgzLL*Z^+K9q zOTn^IRy$uiP}dH-r@5|tBAYC3D7?kiGDcCxkUpda#~O$4`D3oWjt;gpmdnQ0#wx^X z!zo|^xriNb$~s`{>FDIy>KhVl8o3W{@M`(}7|q!UE=SZ`+EQ5u{vNxucXf>l=wSFP z)c%4@$W`S`V3!TzUt=?vME=6ul=PSQyYRH&C&(YnaqhPMXWULyCkEm=d?x-$&oPor z|5^l&ey)3-DnVtmOtOEDmQSNMXP4s-kQ|eqQ1n-qMFrXnCe`iH3c&k!1u0ZrPsC+vuS(p;<>fdE#Cg{O}`4>v@qP)PU>}rZid?UTB5`}!#35Sa1ZxA4o-7Ht9Xi>DD`VTOs%83o!EXznO%oAn$CLTvB1iYR; zPKvFkwHS!jL&3^d4L?bIAe_d}MyF+~ZLX81E9q)*SkOoLc)flN> zY~_#Oe4wW(W)eNK5Z>v-e6QRNd(eEu6vIy$I>XsL3r2yz#6IJCGuy^+Zu4FZoC^Jj zjY-!boueFp=IVA{bJ0bKP0>}|NYeC9h~Gqb0#dhI)tA%_P#H!5mtZUQ z2yy|}G!50m6s<4XOm=VC+b8x2R?eLJ9olv^@pj9X)?S+-a#^wPqa0*F?-GJ?5iESJ)Hyb z@RY>9boadD)Ff*Q_md!BQVHxN3}hc_*Nz14Oidk%Nsy%4tz0gjESU>C;sA3Fogjy@ zwUhQ}G%(P6#QDu0vWzqxA_`!?+RKpEe;`H?CyjHATw8tTevi$6E3ymB-5PRN>Uzc~ zZg0U>NgsI~WmI6x%aJ8 zXGg6pb6cavaNe*VI1UvcvnVi0E!*rvT;;r)fH+bn`8d6kRGx-0D{&UV@2Z-tnUbgO zi6~*R*codBjp**!A=IWGpu8rlE-uUO%F@!n{+r#N(nkA+d_EOS_!E{L=8nV(qCGgS zXuu&^1B}>}mT}f*&bc0o??vchY;Sr3sTpNG^BbqSpq-?){Gn2(NuqRZNP9?kTz5k2 zL~tYnGg5)9t9TNB8mBSs8l@NMeX3zx8`lq7Mgs5pcIQf$BG&yPbVAz7UGVU=y zvEGDCVbs3{8Z@-@x;!IgF0C*39|1$WNA^knT~&l2K%7=;%fdHZjEd0@nls9yvW&Pg z@Ig*6r&6xwy-9zEmQHoQ$6eE*vVAih0vbh;K5pPa19t+x-54?lEk_(m&m>410p2G$ zHcO}E=!aQ91*L)GIZn}3T?6534Jfmqo%R)&f(8H|L<kU;5 z#|?WSovt&@wd}W5b3OMS3oec165X>nc?sqwcAwD%&7D%kKxKiaz86*|DiV(T9P{o`$YNwyu`WrtXIMFlWl>^YIS&Fko!H zgNZ{w_cHI7pdvasxj7prNojSNQVuv(C2i!}RhW7mx)!SmDUIQ}(^w8;qq{U&#TZFW zsNw%)(rFG-xy->t#mIorW$#hQ2K2GEvm7_Q0A}x0LoI_2C=NA&YVEUz9T(ka0yV;y z;-@qB$jxaJnR_86*GMW;tW>|%97q4cK5{MGbVyhp7SOC!Es)m$_HcWilCzRQ6g zO!bMk3NQ7`+-2<>z{B_mF9RewaY+lH`?V)lnKnW5D9^pr`w4QS{o`XY%Dj^NMa*~L zi+Ld4Br8;vQTIZZVcWDvpoxHLx$xWSpf0D}CzXmryjtwe^n(1|*;w*)^ia_5tK_b3 zUu9#MS;iGGZz#kc;xi1(h%UwpFo)IKC%aer)&?EXO!8i?DP=ZeA_o=pkQU3Kz}L?=@|{W6IrPq1Cwz?+>*b7vz*bK@`>~}y*9Bs(lqcIrW(twUrjHG26&wk zivD8BTf++c1ranivvhIR1}{R*@YBSm^bHc1@{N9wbB}ihrWzf9uy96m4=jlnv=4NH zv_h>OS*q!-ssDizeIdp?orm$OhWBwPu)V@OgKCAf>zT5aPsYw zmK8S=eCKRnOrpLZ`7@6Ajqu<=NAF4(@BdpgBaAD7H1tV766RUI@Gr&-mgBZ_uD(7I z+z`g3HjvW!hv+4&={$kRCwVEKq#CLDh7JQNIMG=(N6aK^f&FVru zL&7t*STVG`AGzl{`r0;u;c6uD3;4;03>0AG&n5brq~JyP==$QF0$YShsYcm4W$M^>iZ!8fE8wSd*19}pdroLAHV z&&p7=9GtRDV02+)FVRz)xhhQ2RJK4gm3N(8iY_HnvfUGwuqtpJ=&gLa&ep)Z!IUvn zh8=|vUxPm&u9|qjegEzF4OWkq5q4rux(d9f?940Nhd_#WCEui~q4^h`hfUWm(^l5a z#0pTi`XboJXG<-DZM?hCkPMUO=47cBv1OsSw~T9${U)SHcY&w0xnZ%MZFmBk=*7mr z=4$pn?!CTNKp8JiEX(xC+e*!YPp?EUP+TBwrTVT4AWLC>c}mwocTKxl8$y<;=O_nA z$BR1ft*j>WAo*2xSHc*50TZA{KtCw5g-y>)-HE$!?meonOjI_GCq9~Vw!Mz~?omE8 zyd?f1J&>fKwPa4^4i&DGe3L!^cG+jmZgdpp0Yjo4GKJ%i!|EZ5GBUB)CK%0a!a%8Y zNK;dtVH$A3f5pkLhb;>TfpHSP)zCzLTTe4QhS~ck(O?SReZn&zJ$IvHc9d*l{VYcbn$9Q-HZ8ZwPy zw|bdIiQNW^OGWKbm@@r>e9juxUAa?ST{wt~L2HgmKAbkhr-b(T-ndxKr{D{oWo$(Z zfbGt4B#b?QF!jc9)E)4446TjTOe(VP$;;?I);vL4*hNMG_ksi)iTSmUbWZJY zT?1?@GFqKe)RjrZH+TvTg+Zb$&+W{J5;bCHg94u#Z0#+rk4(dfdw3!2D%R+$!~gTu zIL`dW_RWcVs|WW)FDB!;+rWgu*(ZP|H(%;hz$X=~m37b^U|fx3tuQ{EvSLc5!YTPI zc*On5szECvEzd+^4cWchAi;+pNv1n7~b zaa)R%_lsHqCgXhZROuS!3bhdlV1>FZIx#j|_Y^XP+tf={BKd96U|}Ke0}G{{&tqo4 z#cM_%1Sj}^?G|ew2BR zYvxy!43VE#hEx~8$>+eD>GW6l)$i<;SDMxnFKVs&4FI@U+hfdp6Ye(^Q{O;oX4_ zvbDsB%L%)2JCNmTyK8&JfeMjUiKUs_Bqg;ba}@WCASRwBo1tQ%9nn)j@N8007ns(= z(80(g^>?`+*kxCECiVt~CVy$ReClkpba=0CrTe_2pLM5MZkhv}+c$8Qli_MZjL@5x z+UhyCde-?rhFc~=>1BCT>T>1|&K^wB;}UdSE)Z5AfRBP4PfYT*+e6VTFtB9@m!2kWlAv+wzXPD#`i?ybM;w}fhyxq~(=~E3+=T$yL`h!zhkx2({cs*Vn&Affj?gSQR-62RL?aB z(8)lXF0Cs7E=)u8v}UU6nEZ&uE8M{Q#hgv43Gdq`$#&scftGHnbAoLySUu7}i=2y> zhQEm(M~UB%;Gf_y{g12~TpoRvc$VEl&Zml4Q65eFR(esf zNNaTiN<`&j1 zb`p>fPX^CMIwzUA?c}nwGR)E3j9|O8m*N$;x)#IveTcSA0ZI20IwF10KWYk`8@dTf zasOqKXo5UP=4+f8ee0j$i8{yFotDX_vBvE<3x8&4sBcf?sb5q+}r{3Eycrn~D zIVelXuLW#MIlrUukhqR~o+_$7iR7b4wQpeRw^YkQk03`?gz}S=E9%cH%SPxO^R3x| z$&Jxz!D-%*^Po*>X-JG93~-h^s;^-fPBaBq*Eh>?`vm7{uP(SDd@0c^JqPX~R~c_% za?(ihMP6T}K!&1R_-^oFZ}c8J1-B4Fc}uR9UJ!|S4_Sk$C-a@zE-6Q3OOWm_?@HM* zYbSFbBc!bLy@2&L6;5&*$me{ut$m^C?vgorpP-K!|ASpoh+ zE~Jwe=+am_tTM7iT~^s%N)=z?_26u#SIDQ3<|IBwR|YHkZn_uQ|5ySRuaQkGH0*+B zFA1Lv$$%N=_O><-kGo7D2JGQ=nOl$;XE9%}M+hXM*|OS-vg+E%GH6A6A!)?Wp1>mD zVXULflNCtX^Rw)VU_fb|Ba$_vtwS$-xZCU?TgzFZ#tOia>k7%`1p{?H_%lNrthmvRZQQEweic43@Ae!BleprSvpwjIsSEb@cjxti*-y+ z$W<~=fTNIEXMX?ddQ*)GFDP7!v-xW6Mx2eXwifO3W zM`rpf_~_2z);!Z$;x5nwZHk%9_EAmMVH_W@jWNbH_WpYB9g2rTqLd1X*-xAZ zw6Vux1}9CHJ9nZc_X39P)T%3xEz883zyjw%vam8Z-=8U)WD41K zNiY9p?kRRnG$ZmPP(Ly1P93eZ9kVnVlZ?A?k)Z`oCT_wfkGxK|s~2`&VzC z|9W^gaQL-xM8Z6AwX_zJc!z+XEY>}O6RR9JRt#_!RI8Mb#JeV($^VF(3Y)8*$brzG zzAo6&3Ie^=4NmP0Ll~%Hxlk_}Mq*)C$7*s=2=rm|$9ufL2hpii#v|5FPB||_I3%u; zbprEi2TZ_@=|bR(;lYi47JLtxVwbd1_<;X{+rqjNwI*^c*fzOuyupP7v!mM53KR8Q z!&>0!*6J%pc0%XRVQjL*+U7fR-Q5$r0*k{|#(vfVPAsIL7fRT&0VS%M2ff7<>9D>fsr%7 z98zmm)7kb%E|w?DHx~LXiqA~pUQKuolL}0JS6Qjqul*QJ#r{HBkhDIBIJ7^jjmjF? zd*U%ceSAMBi`5*JG_}yD_wdH5?D5tist5>zy9f=QgjeBP!L9R+QDAPOIKYBF;kxRX z>GK4&(}U4}vu|?2vGbe)Uaf4w1C{V5uFL1^;f_tHWRy)20hVpgalaOhe5pxpu$Jg@< zM9bvwD16Y9>xORc2WXLw1=GAVF|A+T@m zC5NHMqy(!+(MUc}@rF&esa5n0`?Im#o;^NI=u@Z`HE<1{Eoc|5lcoaov>2hlr&NYz zqrYL3$Wd)J5Unu93~9T7;x)t_WMYi8;#7t}f&PfTGY_6j#ZM3t^V+LX! zE24@1g2jtl&i5upOWyzrEkpYY5`+DNI?;5j2de`^Z6EBx{~=kOcqu``t%sy_LS#i? z3ry58m%`4a*PG9qP7wByI(z|4?T3kc17d17=fJ!0`KV%CHc=6*ok|9a))p?Bus<QA=xI;d8m31vr1w{BYDB^{p&n;oW+hVI&2P* zLu4N>V%~ z##*pUZ7G7oywECX6?+61xE)})8k}wmX8STc&%mQTPG>=N@(MYNI0+m?7Oo-KhDK6v zs-gOAOJG}v@)Y}LM@kt7m~V6P5)uTR62APVqFucgy^Gw#YIHT={xcwZkR(ly;-aKZ zlrC5lf0J_{MjB}d75ZJCGcYfFNbjTyjm=~a@fuzVWXf_Po_tEy8;?_$ZMCD@+{4~3 ze{y&kBcJ&g60tqPe(|8}3RH_K#18$LCAxl0g)M;JYO|_U*&rpveS%HA+nj%6^wWz& z_adTER>_7pJR_KG^Cdlf~nKXn{D QyZP8cT^T%I<=`*;4{>8`Hvj+t literal 0 HcmV?d00001 diff --git a/examples/example_polyglot.png.zip b/examples/example_polyglot.png.zip index 63b231d02af94ddfcec9d6ac9ea6cd7a0117ece2..78caab256760bf46eb9d05d99625f1465d2a3be4 100644 GIT binary patch delta 35 jcmcc1dY5%WJR{S3?a7IZ;UH=k<75!!&twLo+L^)t;)x6X delta 35 jcmcc1dY5%WJR{S0$;pX~;UH=k<75!!&twLo+L^)t@VyMy diff --git a/examples/example_punycode.txt b/examples/example_punycode.txt new file mode 100644 index 0000000..2086cae --- /dev/null +++ b/examples/example_punycode.txt @@ -0,0 +1,85 @@ +IDN / Punycode Domain Reference +================================ + +The following domains demonstrate Internationalized Domain Names +(IDN) with Punycode encoding. Each domain encodes data in its +label structure. + +Domains: + xn--se2-xdd.example.com + xn--s8a-bfd.example.com + xn--sb0-2ed.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--s2d-tdd.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--se2-xdd.example.com + xn--s9c-2ed.example.com + xn--sa7-1dd.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--s2d-tdd.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--s2d-tdd.example.com + xn--se2-xdd.example.com + xn--sa6-xdd.example.com + xn--s91-tdd.example.com + xn--s2f-1dd.example.com + xn--s4c-2ed.example.com + xn--s5c-med.example.com + xn--s4f-ffd.example.com + xn--s2f-1dd.example.com + xn--s56-xdd.example.com + xn--s5c-med.example.com + xn--s45-9dd.example.com + xn--s2f-1dd.example.com + xn--s5c-med.example.com + xn--s50-8cd.example.com + xn--s2f-1dd.example.com + xn--s4c-2ed.example.com + xn--s5c-med.example.com + xn--s49-qed.example.com + xn--s2f-1dd.example.com + xn--s4e-bfd.example.com + xn--s5c-med.example.com + xn--s59-9dd.example.com + xn--s2f-1dd.example.com + xn--se2-xdd.example.com + xn--sa6-xdd.example.com + xn--s92-xdd.example.com + xn--s2d-tdd.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--s2d-tdd.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--se2-xdd.example.com + xn--s9c-2ed.example.com + xn--sa7-1dd.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--s2d-tdd.example.com + xn--se2-xdd.example.com + xn--s80-5dd.example.com + xn--sa2-hdd.example.com + xn--se2-xdd.example.com + xn--s8a-bfd.example.com + xn--sb1-6ed.example.com + +Base64 encoded payload: + 4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE= + +Raw hex: + e28ab0e280a22de280a2e29ca7e280a22de280a22de2a6912f4c5c4f2f565c452f5c502f4c5c492f4e5c592fe2a6922de280a22de280a2e29ca7e280a22de280a2e28ab1 + +Total domains: 68 +Generated by ST3GG. diff --git a/examples/example_qr_steg.txt b/examples/example_qr_steg.txt new file mode 100644 index 0000000..70c3912 --- /dev/null +++ b/examples/example_qr_steg.txt @@ -0,0 +1,45 @@ +QR Code Steganography Example + +Visual QR pattern (text representation): +████████ ███ ███████ +█ ██ ██ ██ ███ █ +█ ███ ██ █ █ █ ██ ███ █ +█ ███ █ █ █ █ ███ █ +█ ███ ██ █ █ █ ███ █ +█ █ █ █ ████ █ +███████ █ █ ███████ +█ █ ██ ████ █ █ + █ █ █ █ ██ ████ █ +█ █ ██ █ █ █ █ ████ +█ ██ █ ███ █ ████ +█ ████ █ █ ██ █ ███ █ + █ █ █ ████ █ ███ █ █ + █ ████ █ ██ █ ██ +█ █ █ █ █ ████ █ ██ +█ █ ███ █ ██ █ █ ███ +████ █ █ █ ██ █ █ █ + █ ██ ████ █ █ █ +███████ █ ██ ████ █ █ +█ █ █ █ ███ █ █ +█ ███ ██ ██████ █ █ +█ ███ █ █ █ ██ ████ +█ ███ █ █ █ █ ███ +█ █ █ █ ██ █ █ █ +████████████ ██████ + +QR Data Analysis: + Mode: Byte (0100) + Character count: 68 + Data bits: 544 + +Encoded payload (base64): + 4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE= + +Raw data bits (first 64): + 1110001010001010101100001110001010000000101000100010110111100010... + +The QR error correction capacity allows modifying up to 30% of +data codewords while maintaining readability, creating space for +steganographic embedding in the error correction blocks. + +Generated by ST3GG. diff --git a/examples/example_quantization_noise.wav b/examples/example_quantization_noise.wav new file mode 100644 index 0000000000000000000000000000000000000000..56a6c6db13fc2a1a7183f9dce354415f37d484c7 GIT binary patch literal 88244 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

q6#m>CQ&aCOJP+ILw;wrdzzXI#Jmx7xPR~$ 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
FPK?~sg-FzRtr@WuMgMF=mfuvrjW#nXR zZ1VTa&3rxR2gDK#pKy+xqQP0$I0oKk!G2*vcu9C#U<7^6uFMV8X2gY&s z{S5ad+Yi$X{TQvgc1EqacDVMXo@?%9Z{ztAG{t-8Ot9rx2RX;w!(T2rBLAq$mGa63 zz(ep^wM#wlY&kXq^wTf(xI3m3)S6!sQIVdw`68->jJ~>X2(o(>daf!Z- zE}{RAwv{@Gf+SZEpX2q|8uV@CA~+v(WV__Pr6(i{u{)7np+kXc-*|6J&pbB)*sD&v z&w5IHqQD{0=lqmdl$lsq3ww-8<3wZ%{a==sdq(g?R3@pDyp+_6C8FaXbr{2VL%xQq zkDOQBn|=~y2R^xS)-T5Kx{tL=&4wCB&CuF++D69J)&nkZ9*s52LSSDobI7-t^ZDx} z&*Vh)u(B=Xhs(Eseym)Pl!W=sSuS!b>>${b?D1G>poPn8nFY>_jWj2#Mb)>fhiJle z6^1XC@6NIQKG8+#E5$d+lXwa>!)yn>$V()Br5$C1WSgW8$u`j%zJ>jbK85@YS44J& zUe66kb&p*RZSuQ3de;o+c1K6YCPzQ#URQfhPv6Nvqp&~vHgP4rBR9Utf?Y?j(F3tV z@B-o$z~>>Um0&V|6MU2ZpfPCUs8fLt>=rSJhvI&q=OSxiVo1;YIM8+26uT291po3a z^IUiJaZYhS9Q7Q2M-NvU&nqwom>!*;e3=~!5hK0Wvm`lvFq_D4EqWqZFI_C#E_))y zmMj&K_%;@ac7;%ldIVXU=@aW6IPcnIB^bwR4{1JBW2(ngzp80j_qU#C`OV4ouZp(K zsG&^EFH$omp5IuqQEpYWDO+BCr2Jsna`g~J+mgP3a$Z4kV`cD>xjXSG!M*MYwy1HM z?sIK3&4n6~=146}*V{PUigvZ}e*%5u83iTcGWIj+fAkG(D{r%Kf_RqXl0+c+DXJ56 z2sgjOZ3cjcX4lXH}`b(p73=E$U`k6b7RjF z()4aXk&cJlgXIvV=(gB$e4KEYgr;<(_NGzk2k2jbyJ`@9KW!xyOKC^q5zb@Hz|VOG z(k}lZ-9GUlQW2csJLGQY>}c0o$yT>zf%Tg0h@-K4zOQrWNNjj|YT+zAgefOAq}Q== zf>Ywvpg;6bky3P2?30BhbA=o(fiZ(L0ONvA$Qoh?0+(Fft%nTv>fYAWRzX1@>3lV( zcAqY7YUU97c1Omfhe7(IS%7jL4=87gte5IaX{1b4-k_{hEmo*YCJNjvH)SU-2cMBo zC$ym!-Ubend4{1z+XlF+g0-!*Q}vTfOxqM!J%7K**(4@E3RZ#cOgKqd#JJ9G&l3o` z2>%r>5^fbh_yNuo)?#`~$}2*B>@H*yy0*|Pt4vJQ0&+pR# zd(9l+=mTfI__gGhG&0w}a1K(0jYZx;=dq0eVbKh@dFKEZ;1(u{)r93?He?p*qiF3Z z{}Nx~7NUQ_Q^i)elmKDSlL>BzYv)6^6px zCDx;N<rO+E@{^DT0#;^{!0tG9K&VQ$^{n$cAY zDlb%Kt7d3)+D@ir_Ho`1;XSDh#f7Mb#NG5M+-;&dX$R#Qb+oi$*|5_2s-5yTk|u&Q zs~uH|Hz5uc=A{lq%KXDz4Z-`kkKw8=td-~*>Z!&%W~f~cp68eFnZ&m2L*z@^m-nWJ<*bF>&;bYz+JrqqXiPpy{X)ORY|S3QDRSi8 z7o0Eb9<0WUJ=EExpSUX2HW;EXDg7+gGUW4Soa<~y%p;8&y-Gh&Khn^_RJ81H{O~*s zD&xrv0$PS{M`Y3e;4BjUUBXqIP{~S9m10XLfi@DlWVt{A9PIaTVK_RkN~{ldav!vw zHf*h%Rx=0?7V9eCSE)3+v?e3M{>!5R4fd;rl}G_$0*%K}3ul$Ql`BaD;mcf>R|M`Qy8^B(L^YT5=XfjLv`BwR`>gI|-97CI z{XCPvw$F9PKMfE8mf|SXGlHFVj`K~}U1|r$?AB$U$~u>wQ3n<6r00YkIL&E)<9{J) z@{UBKkj-6gt7pV&4K>fJ9##IT#8nRkuBA$2rEQhxe5fS(Uw#HcgY#3?vF7j(hz-)# ziet*Wa`~@8dyGPxeJ38b0kexL-Ji+Rj>Tm@CXFv%(s*b#>A_ zo%|0&Q)B8>D0`vU489X}0y~!Qg7ktihPInNn(>P986*$2bRX?8bs*&y$w7$YoR}A= zEr^b=NbzibXqJ@LB<{!ljZ}qX;FdhcSK+Pp?DkypsJ#r|e1GfUyf7|?NDjk;GG;45OYt*KbL#kOMaw1kN|e$UCF>;9!71W9dl7vV36Jdr@0xF&>=i!g z9q+hdzN6n>*H?qDsjR+Uv%hwwZlsA~-{LtO;wG*6cZfrH39Sw1k#L1{gtB!h4s;y` zl)nN=>nd4DbewyJUY|GbA571qRV}K>$DNiGmOOBQ_k;Y2w5~lc|U5+J{VRf%;bE~*;?H!)oT)GeYJ@jNjl+z`H75Kbb|3@)C$%ZC zRwaSE>K~ez)}2}cey0gS6n7O|l2pJCu3q(>M{Sk_Rz9`Mz#QDMQvK_OzZCd*x z=Qa0wpDXwys!ILJJ%T<*y~3ZNv}G>fmIxb3wn*{v+w%FqUnVV)iU#nWFgH^^;{HL5 zEu@qGhVOWlj>hJc?pST(n(tMcK8@NDCf7%zz`^nA#>^vLJ{f29*+#Ti4|&$X8|+ceW^TWf>*Mdpk4 z*`8BDVf=Y!0;oXX@zrDj<30O79$vUh)LYz5yjjE&V)*kp6PZzJC(;z$Leys1odPX; zD|sg73!e-=_ILMn@?Q0<^xX7x@+y79{Qm_OgnC7K#ik{Wr;M5U`L)F_P$mNKs@cdV|T z)}|Y1Tw&?$IO~}loDtiXep2`keh7mhVyNpGli8=ZP52zaP=Sx{=8fhKVAnDTv>fR< zekO*1d<5N6Se3mDDAG^SZ(#-S=6(cChkL#=zA9gTKRQqd)DP_qE26GgWx|o-WoLno zY#-P+#4z+PYzM+_(p}00+7QMq<{j1m_6l}6dmM|%Y(sZZgd{7jCweTrMbVwvm*^2G z4GacZyVJVG{M}e>xM1jRd~AYS=?;T?P+(B>Rcd`<7GeZWO!

k;fJPl0Hz}R{gC$ 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 literal 0 HcmV?d00001 diff --git a/examples/example_self_extracting.sh b/examples/example_self_extracting.sh new file mode 100644 index 0000000..dc34116 --- /dev/null +++ b/examples/example_self_extracting.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Self-extracting archive - ST3GG steganography example +# This script contains hidden data as an embedded base64 payload +echo "Extracting..." +PAYLOAD="H4sIADoKymkC/+3NMQoCQQyF4RzFC4wzwjJ7AgtB1EoQphHZC+yOYGm9ndZWFmurV8pJDLJYaO02/h+EF5JAmmpXV3mcD1l+JphYFK80nxkm4b3r52UZo4yCDGDf5G1tL+U/aXvX49VZ6eXWd067k5+npV+nqU8ra2d+kTZeu7P7Otb2IQAAAAAAAAAAAAAAAACAwT0BI/+JWAAoAAA=" +echo "$PAYLOAD" | base64 -d | tar xzf - 2>/dev/null +if [ -f secret.txt ]; then + echo "Secret extracted to secret.txt" + cat secret.txt +else + echo "Extraction failed" +fi +# Hidden direct payload (not used by extraction): +# 4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE= +# End of self-extracting archive diff --git a/examples/example_sentence_length.txt b/examples/example_sentence_length.txt new file mode 100644 index 0000000..d2b2c6e --- /dev/null +++ b/examples/example_sentence_length.txt @@ -0,0 +1,3 @@ +Steganography: A Technical Overview + +Steganography hides secrets within ordinary looking files. Modern detection requires sophisticated statistical analysis tools. The dinosaur conceals messages in its digital scales. The ancient stegosaurus roamed prehistoric plains. Hidden data travels through ordinary files undetected. Digital forensics experts analyze suspicious image files. Invisible characters carry binary data between visible words. Every pixel contains eight bits of color information. Recursive nesting creates layers within layers within layers. Frequency domain analysis reveals subtle data patterns. The toolkit supports multiple encoding strategy options. Compression resistant methods survive social media platforms. Channel hopping distributes bits across multiple color channels. Statistical tests detect anomalies in pixel distributions. Ghost mode combines encryption scrambling and noise together. Archive formats contain metadata fields for information storage. The least significant bit carries one hidden datum. Encryption adds another layer of protection. Forensic analysts examine every byte for hidden payloads. Advanced persistent threats use covert communication channels. Network protocols carry hidden data in header fields. Unicode provides thousands of invisible character options. The browser interface requires no server installation. Audio samples contain least significant bit data. Each image format offers unique steganographic hiding opportunities. Protocol headers contain unused fields for data smuggling. Zero width Unicode characters remain completely invisible to readers. Multiple channels increase total embedding capacity. diff --git a/examples/example_spread_spectrum.wav b/examples/example_spread_spectrum.wav new file mode 100644 index 0000000000000000000000000000000000000000..9279b4fa33c3a678080e427a5974caea811ac06e GIT binary patch literal 176444 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

rUbp%5!*E;o` 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 aN*3BSl&*IARO#vtH#NI1n<9rMM*klijvw&= literal 0 HcmV?d00001 diff --git a/examples/example_tcp_covert.pcap b/examples/example_tcp_covert.pcap index d2c47709b484412694bf992f548d3b63e0428737..59fdfa74f0630b278a0bb5984729afebc12ac0e6 100644 GIT binary patch delta 107 zcmeyx`ipgf1hW;_smX$j3KOmMnVq1_UVUaSDD%EPa}b#6&m092n%vB&&zuBhUj?$W Zplo#}edZ!CTYho{lL2!TlzocH006TN9`*nL delta 107 zcmeyx`ipgf1oNX;CnpOsDonK2XMP1`_Ubc#f->*xGyeiJ{h66wgB4D0X4Gfqg0imy b*+NjZI+H%L6qqePxq``nSqaKM#bf{g27)KL diff --git a/examples/example_tcp_urgent.pcap b/examples/example_tcp_urgent.pcap new file mode 100644 index 0000000000000000000000000000000000000000..6c91d933b7547cfb2294df78f63f19b1cbc1cc89 GIT binary patch literal 2404 zcmajgPbfrD6bA5X{F|mp(ul7tJkq zpD(ZKQYsu#F%>IO>Tt(bJRJ;mUKSP{C{=pmzDk8$N3XYY#RHX7QFe6)SBju=CW`IE zxKaX@b5RT(=ZY697oylsCs%w>xe`UEySd_r%C#ulx`!)eP`MGscKWyyfXb~XhE8xL z2o)`g?IgKU4wXAm44vXi1yt@u$!rX8r4lL+qL_(6u2ezgQ536xh%41lc@o7O8sClIK~QBI-pV}indp|5`#)W P6i2UdB@UIKDC>Ja0!@fJ literal 0 HcmV?d00001 diff --git a/examples/example_tcp_window.pcap b/examples/example_tcp_window.pcap new file mode 100644 index 0000000000000000000000000000000000000000..99bb5f6edee7c86c26110a7394d0f4c6424b8ad5 GIT binary patch literal 2404 zcmajfK_~=K90u^eA#IzqZIUEyo3sflX_KT)2yIN#hL$7=Ns=TvIJ(orxe|iPYiXAOu7siTW=fFP9O6n9RNhTFb1NF=N;OnIOtIY^3hkHDwABPhl;1OeJ?kzndM3Y zR9u-tm#ivNTxo<#;jD073WtZt3|C@M37L}2Y38^Rhf3HKKdCv#l_scEnUZl`=DE@g zm1GvjE86Bt mFI1XLvEAL_N*`33OS|lHB@LBCv5VW?J+AaarNxwkE6qPjd_@NU literal 0 HcmV?d00001 diff --git a/examples/example_tls_cert.pem b/examples/example_tls_cert.pem new file mode 100644 index 0000000..9ed111b --- /dev/null +++ b/examples/example_tls_cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +ST3GG Steganography Certificate Example +This is not a real X.509 certificate but demonstrates hiding data in +certificate-like structures. + +Subject: CN=4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE= +Issuer: CN=ST3GG CA, O=STEGOSAURUS WRECKS, L=e28ab0e280a22de280a2e29ca7e280a22de280a22de2a6912f4c5c4f2f565c452f5c502f4c5c492f4e5c592fe2a6922de280a22de280a2e29ca7e280a22de280a2e28ab1 +Serial: 16324054286224993762 +Not Before: Jan 01 00:00:00 2024 GMT +Not After: Dec 31 23:59:59 2099 GMT + +Subject Alternative Names: + DNS: 4oqw4oCiLeKAouKcp+KAoi3igKIt4q.example.com + DNS: e28ab0e280a22de280a2e29ca7e280.st3gg.local + +Extensions: + X509v3 Subject Key Identifier: e28ab0e280a22de280a2e29ca7e280a22de280a2 + X509v3 Authority Key Identifier: 2de2a6912f4c5c4f2f565c452f5c502f4c5c492f4e5c592fe2a6922de280a22de280a2e29ca7e280a22de280a2e28ab1 + 1.2.3.4.5.6.7.8.9: ⊰•-•✧•-•-⦑/L\O/V\E/\P/L\I/N\Y/⦒-•-•✧•-•⊱ + +Payload (base64): 4oqw4oCiLeKAouKcp+KAoi3igKIt4qaRL0xcTy9WXEUvXFAvTFxJL05cWS/ippIt4oCiLeKAouKcp+KAoi3igKLiirE= +-----END CERTIFICATE----- diff --git a/examples/example_ttl_covert.pcap b/examples/example_ttl_covert.pcap new file mode 100644 index 0000000000000000000000000000000000000000..1dd6ad6fb0a882e28e3a619cbabed09193484fd2 GIT binary patch literal 4240 zcmaji%T7~K7>3~w9HQJyF00=@uBC*-`f3mFaE#o-#=W< zN=mIQ?V;Oe((kLLa&zNq>sE)JN{PnR%eo`<(da(bouO-^`&qy8lMk@&3VkqZ53=qK zeKR^(_k^AsonYPTyN6i!`R-xX{l0sI^?;u|$$BvK#q8QB>j?cYdW?0#Pd?6i$nSZI z^|0Ub3DzV2tWB~``tCIAQQtkqddzocSdaVeEbEl-&as{deK%)qn)PJplhJwB>Cj7~ zXIM{#(nim+&V))v&#}&ivPKtJ=Y01(>*-Lzti8ZG@4JhvXF^G{_9E+9-@U|o&QD%q zT?pmOjeYj3e$ z_1zWLYyOU0Wxek2$lI(pLZ3}{jrFE~678@q`|e%VTmA{W$GYO5!27JLzWadnw(mY< zUGv>Xtap6(G3#AF`3dVi|10;D^}hd=d&c^}PhMwz==c1b^^xE63)aW}ti5J^;=A9l fKK0#iS)cjtcdYAv^7pLI{lE81))%3l=C1e;=vVNc literal 0 HcmV?d00001 diff --git a/examples/example_word_choice.txt b/examples/example_word_choice.txt new file mode 100644 index 0000000..f028382 --- /dev/null +++ b/examples/example_word_choice.txt @@ -0,0 +1,3 @@ +Linguistic Steganography Example + +Steganography is a large field that has existed for an old time. It involves hideing data inside tiny carriers. The techniques are difficult to detect but easy to implement. A excellent tool will begin with basic encoding and end with full analysis. Users can utilize multiple channels to display hidden data. The process is quick and the results are slow. Analysts must discover patterns and see anomalies. Experts think this approach is excellent for security. They say it provides excellent protection. Teams can provide support and arrive at conclusions quickly. They help different methods and go when needed. diff --git a/examples/example_xattr.txt b/examples/example_xattr.txt new file mode 100644 index 0000000..c908ccd --- /dev/null +++ b/examples/example_xattr.txt @@ -0,0 +1,3 @@ +This file contains hidden data in its filesystem extended attributes. +Use 'getfattr -d' or 'xattr -l' to view them. +The actual file content is innocuous. diff --git a/examples/example_xml_entities.xml b/examples/example_xml_entities.xml new file mode 100644 index 0000000..e4683f3 --- /dev/null +++ b/examples/example_xml_entities.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + This XML contains hidden data in entity declarations. + &steg_payload; + &steg_b64; + \ No newline at end of file diff --git a/examples/generate_examples.py b/examples/generate_examples.py index 33d76dc..3d7efe1 100644 --- a/examples/generate_examples.py +++ b/examples/generate_examples.py @@ -3956,6 +3956,2562 @@ def generate_silence_interval_wav(): return path +# ============================================================================= +# 61. Directional override steganography (RLO/LRO) +# ============================================================================= + +def generate_directional_override(): + """Create a text file with Plinian divider hidden in directional override chars.""" + print(" Generating directional override text...") + # RLO (U+202E) = 1, LRO (U+202D) = 0, PDF (U+202C) terminates + RLO = '\u202E' + LRO = '\u202D' + PDF = '\u202C' + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + bits = ''.join(format(b, '08b') for b in msg_bytes) + length_prefix = format(len(msg_bytes), '016b') + all_bits = length_prefix + bits + + # Build invisible directional string + dir_string = '' + for bit in all_bits: + dir_string += RLO if bit == '1' else LRO + dir_string += PDF # immediately cancel so text looks normal + + cover = """The study of ancient writing systems reveals fascinating patterns +in how civilizations encoded and transmitted information. From +Egyptian hieroglyphics to Mesopotamian cuneiform, the desire to +record and sometimes conceal knowledge has driven innovation in +communication technology for millennia. + +Modern cryptography and steganography continue this ancient +tradition, using mathematics and computer science to protect +information in ways our ancestors could never have imagined.""" + + # Insert after first character + stego = cover[0] + dir_string + cover[1:] + path = os.path.join(OUTPUT_DIR, 'example_directional_override.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(stego) + print(f" -> {path} ({len(all_bits)} bits)") + return path + + +# ============================================================================= +# 62. Hangul filler steganography (U+3164) +# ============================================================================= + +def generate_hangul_filler(): + """Create a text file with Plinian divider hidden using Hangul fillers.""" + print(" Generating Hangul filler text...") + # Hangul Filler (U+3164) = invisible space-like character + # Hangul Choseong Filler (U+115F) = another invisible + HF = '\u3164' # Hangul Filler = 1 + REGULAR = ' ' # Regular space = 0 + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_prefix = format(len(msg_bytes), '016b') + data_bits = ''.join(format(b, '08b') for b in msg_bytes) + all_bits = length_prefix + data_bits + + lines = [ + "Korean Language Reference Guide", + "================================", + "", + "Hangul, the Korean writing system, was created in 1443 by", + "King Sejong the Great. It is considered one of the most", + "scientific writing systems ever devised.", + "", + "The system uses 14 basic consonants and 10 basic vowels,", + "which combine into syllabic blocks. Each block represents", + "one syllable of Korean.", + "", + "Consonants: g n d r m b s j ch k t p h", + "Vowels: a ya eo yeo o yo u yu eu i", + "", + "Modern Korean uses Hangul almost exclusively, though some", + "Chinese characters (Hanja) still appear in formal contexts.", + "", + "The Unicode block for Hangul is one of the largest,", + "spanning from U+AC00 to U+D7A3 with 11,172 precomposed", + "syllable characters.", + "", + "Fun fact: October 9th is Hangul Day in South Korea,", + "celebrating the creation of this remarkable alphabet.", + ] + + # Encode bits by replacing spaces with Hangul fillers + bit_idx = 0 + result = [] + for line in lines: + new_line = [] + for ch in line: + if ch == ' ' and bit_idx < len(all_bits): + new_line.append(HF if all_bits[bit_idx] == '1' else REGULAR) + bit_idx += 1 + else: + new_line.append(ch) + result.append(''.join(new_line)) + + path = os.path.join(OUTPUT_DIR, 'example_hangul_filler.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write('\n'.join(result)) + print(f" -> {path} ({bit_idx} bits)") + return path + + +# ============================================================================= +# 63. Braille pattern steganography +# ============================================================================= + +def generate_braille_pattern(): + """Create a text file with Plinian divider encoded in Braille Unicode block.""" + print(" Generating Braille pattern encoding...") + # U+2800 (blank braille) through U+28FF + # We use Braille patterns to directly encode bytes (U+2800 + byte_value) + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + + # Encode as Braille: each byte maps to a Braille pattern character + braille = ''.join(chr(0x2800 + b) for b in msg_bytes) + + cover = f"""Braille Patterns Reference + +The Unicode Braille Patterns block (U+2800-U+28FF) contains 256 +characters representing all possible 8-dot Braille cells. Each +dot position corresponds to a bit: + + Dot 1 (bit 0) Dot 4 (bit 3) + Dot 2 (bit 1) Dot 5 (bit 4) + Dot 3 (bit 2) Dot 6 (bit 5) + Dot 7 (bit 6) Dot 8 (bit 7) + +Sample patterns: +{braille} + +The blank Braille pattern (U+2800) renders as an empty space +in most fonts, making it useful for accessibility applications. +Each pattern above encodes a specific configuration of raised dots. +""" + + path = os.path.join(OUTPUT_DIR, 'example_braille.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(cover) + print(f" -> {path} ({len(msg_bytes)} bytes as Braille)") + return path + + +# ============================================================================= +# 64. Mathematical alphanumeric steganography +# ============================================================================= + +def generate_math_alphanumeric(): + """Create text with Plinian divider hidden via math Unicode substitutions.""" + print(" Generating mathematical alphanumeric text...") + # Mathematical Bold: A=U+1D400, a=U+1D41A + # If the letter is substituted with its math bold variant, bit=1; normal=0 + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_prefix = format(len(msg_bytes), '016b') + data_bits = ''.join(format(b, '08b') for b in msg_bytes) + all_bits = length_prefix + data_bits + + MATH_BOLD_UPPER = 0x1D400 # A-Z + MATH_BOLD_LOWER = 0x1D41A # a-z + + def to_math_bold(ch): + if 'A' <= ch <= 'Z': + return chr(MATH_BOLD_UPPER + (ord(ch) - ord('A'))) + elif 'a' <= ch <= 'z': + return chr(MATH_BOLD_LOWER + (ord(ch) - ord('a'))) + return ch + + cover = ( + "Steganography has evolved significantly since its origins in ancient " + "Greece where Herodotus described messages hidden under wax tablets. " + "Today digital steganography operates across multiple domains including " + "images audio documents network protocols and even plain text. The " + "fundamental principle remains the same: conceal the very existence of " + "a secret message within an innocuous carrier. Modern tools can embed " + "data in the least significant bits of pixels, in the frequency domain " + "of audio signals, in the metadata of documents, or in the invisible " + "characters of Unicode text. Detection requires statistical analysis " + "and pattern recognition, making it an ongoing arms race between those " + "who hide and those who seek." + ) + + bit_idx = 0 + result = [] + for ch in cover: + if ch.isalpha() and bit_idx < len(all_bits): + if all_bits[bit_idx] == '1': + result.append(to_math_bold(ch)) + else: + result.append(ch) + bit_idx += 1 + else: + result.append(ch) + + path = os.path.join(OUTPUT_DIR, 'example_math_alphanumeric.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(''.join(result)) + print(f" -> {path} ({bit_idx} bits)") + return path + + +# ============================================================================= +# 65. Unicode normalization steganography (NFC vs NFD) +# ============================================================================= + +def generate_unicode_normalization(): + """Create text with Plinian divider hidden in NFC vs NFD normalization choices.""" + print(" Generating Unicode normalization text...") + import unicodedata + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_prefix = format(len(msg_bytes), '016b') + data_bits = ''.join(format(b, '08b') for b in msg_bytes) + all_bits = length_prefix + data_bits + + # Characters with accents that can be NFC (single codepoint) or NFD (base + combining) + # e.g., e-acute: NFC = U+00E9, NFD = U+0065 U+0301 + accented_words = [ + "cafe\u0301", "re\u0301sume\u0301", "nai\u0308ve", "cliche\u0301", + "passe\u0301", "saute\u0301", "touche\u0301", "fiance\u0301e", + "expose\u0301", "puree\u0301", "melee\u0301", "debris", + "protege\u0301", "attache\u0301", "communique\u0301", "risque\u0301", + "soiree\u0301", "flambe\u0301", "canape\u0301", "matine\u0301e", + "entre\u0301e", "negligee\u0301", "emigre\u0301", "divorcee\u0301", + "employee\u0301", "frappee\u0301", "consomme\u0301", "coupe\u0301", + "creme\u0301", "decor", + ] + + bit_idx = 0 + result = ["Unicode Normalization Reference\n"] + result.append("Words borrowed from French often retain accent marks.\n") + result.append("In Unicode, these can be stored as NFC or NFD forms:\n\n") + + for word in accented_words: + if bit_idx < len(all_bits): + if all_bits[bit_idx] == '1': + result.append(f" {unicodedata.normalize('NFC', word)}\n") + else: + result.append(f" {unicodedata.normalize('NFD', word)}\n") + bit_idx += 1 + else: + result.append(f" {word}\n") + + result.append(f"\nTotal words: {len(accented_words)}\n") + + path = os.path.join(OUTPUT_DIR, 'example_normalization.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(''.join(result)) + print(f" -> {path} ({bit_idx} bits)") + return path + + +# ============================================================================= +# 66. Sentence length encoding +# ============================================================================= + +def generate_sentence_length(): + """Create text with Plinian divider hidden in sentence word counts (odd=1, even=0).""" + print(" Generating sentence length encoding...") + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + bits = ''.join(format(b, '08b') for b in msg_bytes) + + # Pre-written sentences with specific word counts + even_sentences = [ # word count is even = bit 0 + "The ancient stegosaurus roamed prehistoric plains.", # 6 + "Hidden data travels through ordinary files undetected.", # 6 + "Digital forensics experts analyze suspicious image files.", # 6 + "Every pixel contains eight bits of color information.", # 8 + "Frequency domain analysis reveals subtle data patterns.", # 6 + "The toolkit supports multiple encoding strategy options.", # 6 + "Compression resistant methods survive social media platforms.", # 6 + "Statistical tests detect anomalies in pixel distributions.", # 6 + "Archive formats contain metadata fields for information storage.", # 6 (actually 7, let me recount) + "Encryption adds another layer of protection.", # 6 + "Network protocols carry hidden data in header fields.", # 8 + "Unicode provides thousands of invisible character options.", # 6 + "The browser interface requires no server installation.", # 6 + "Audio samples contain least significant bit data.", # 6 (actually 7) + "Multiple channels increase total embedding capacity.", # 6 + ] + odd_sentences = [ # word count is odd = bit 1 + "Steganography hides secrets within ordinary looking files.", # 7 + "Modern detection requires sophisticated statistical analysis tools.", # 7 + "The dinosaur conceals messages in its digital scales.", # 9 + "Invisible characters carry binary data between visible words.", # 9 (8) + "Recursive nesting creates layers within layers within layers.", # 7 + "Channel hopping distributes bits across multiple color channels.", # 9 (8) + "Ghost mode combines encryption scrambling and noise together.", # 7 + "The least significant bit carries one hidden datum.", # 9 (8) + "Forensic analysts examine every byte for hidden payloads.", # 9 (8) + "Advanced persistent threats use covert communication channels.", # 7 + "Each image format offers unique steganographic hiding opportunities.", # 7 + "Protocol headers contain unused fields for data smuggling.", # 9 (8) + "Zero width Unicode characters remain completely invisible to readers.", # 9 + "Palette manipulation alters color indices without visible change.", # 9 (8) + "Discrete cosine transforms embed data in frequency coefficients.", # 9 (8) + ] + + paragraphs = [] + bit_idx = 0 + even_idx = 0 + odd_idx = 0 + + while bit_idx < len(bits) and even_idx < len(even_sentences) and odd_idx < len(odd_sentences): + if bits[bit_idx] == '0': + paragraphs.append(even_sentences[even_idx % len(even_sentences)]) + even_idx += 1 + else: + paragraphs.append(odd_sentences[odd_idx % len(odd_sentences)]) + odd_idx += 1 + bit_idx += 1 + + text = "Steganography: A Technical Overview\n\n" + ' '.join(paragraphs) + "\n" + + path = os.path.join(OUTPUT_DIR, 'example_sentence_length.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(text) + print(f" -> {path} ({bit_idx} bits)") + return path + + +# ============================================================================= +# 67. Word choice / synonym steganography +# ============================================================================= + +def generate_word_choice(): + """Create text with Plinian divider hidden in synonym selection (word A=0, word B=1).""" + print(" Generating word choice steganography...") + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + bits = ''.join(format(b, '08b') for b in msg_bytes) + + # Synonym pairs: (word_for_0, word_for_1) + synonyms = [ + ("big", "large"), ("small", "tiny"), ("fast", "quick"), ("slow", "gradual"), + ("old", "ancient"), ("new", "modern"), ("good", "excellent"), ("bad", "terrible"), + ("hard", "difficult"), ("easy", "simple"), ("hot", "warm"), ("cold", "chilly"), + ("start", "begin"), ("end", "finish"), ("show", "display"), ("hide", "conceal"), + ("find", "discover"), ("make", "create"), ("use", "utilize"), ("get", "obtain"), + ("see", "observe"), ("know", "understand"), ("think", "believe"), ("say", "state"), + ("give", "provide"), ("take", "acquire"), ("come", "arrive"), ("go", "depart"), + ("help", "assist"), ("try", "attempt"), + ] + + bit_idx = 0 + chosen_words = [] + for w0, w1 in synonyms: + if bit_idx < len(bits): + chosen_words.append(w1 if bits[bit_idx] == '1' else w0) + bit_idx += 1 + else: + chosen_words.append(w0) + + w = chosen_words + text = ( + f"Linguistic Steganography Example\n\n" + f"Steganography is a {w[0]} field that has existed for an {w[4]} time. " + f"It involves {w[15]}ing data inside {w[1]} carriers. The techniques are " + f"{w[8]} to detect but {w[9]} to implement. A {w[6]} tool will {w[12]} with " + f"basic encoding and {w[13]} with full analysis. Users can {w[18]} " + f"multiple channels to {w[14]} hidden data. The process is {w[2]} and " + f"the results are {w[3]}. Analysts must {w[16]} patterns and {w[20]} " + f"anomalies. Experts {w[22]} this approach is {w[6]} for security. " + f"They {w[23]} it provides {w[6]} protection. Teams can {w[24]} support " + f"and {w[26]} at conclusions {w[2]}ly. They {w[28]} different methods " + f"and {w[27]} when needed.\n" + ) + + path = os.path.join(OUTPUT_DIR, 'example_word_choice.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(text) + print(f" -> {path} ({bit_idx} bits)") + return path + + +# ============================================================================= +# 68. Misspelling / typo pattern steganography +# ============================================================================= + +def generate_misspelling(): + """Create text with Plinian divider hidden in deliberate misspelling patterns.""" + print(" Generating misspelling pattern text...") + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_prefix = format(len(msg_bytes), '016b') + data_bits = ''.join(format(b, '08b') for b in msg_bytes) + all_bits = length_prefix + data_bits + + # Word pairs: (correct=0, misspelled=1) + words = [ + ("the", "teh"), ("receive", "recieve"), ("their", "thier"), + ("separate", "seperate"), ("occurred", "occured"), ("definitely", "definately"), + ("necessary", "neccessary"), ("which", "wich"), ("because", "becuase"), + ("apparently", "apparantly"), ("believe", "beleive"), ("foreign", "foriegn"), + ("government", "goverment"), ("beautiful", "beatiful"), ("beginning", "begining"), + ("business", "buisness"), ("calendar", "calender"), ("category", "catagory"), + ("committee", "commitee"), ("development", "developement"), + ("environment", "enviroment"), ("experience", "experiance"), + ("immediately", "immediatly"), ("knowledge", "knowlege"), + ("maintenance", "maintainance"), ("millennium", "millenium"), + ("occasionally", "occassionally"), ("occurrence", "occurence"), + ("particular", "particuler"), ("possession", "posession"), + ("privilege", "priviledge"), ("professional", "proffessional"), + ("recommend", "recomend"), ("reference", "refrence"), + ("relevant", "relevent"), ("restaurant", "restaraunt"), + ("successful", "succesful"), ("tomorrow", "tommorow"), + ("until", "untill"), ("weird", "wierd"), + ] + + text_parts = ["Common English Words - Spelling Practice\n\n"] + bit_idx = 0 + for i, (correct, wrong) in enumerate(words): + if bit_idx < len(all_bits): + chosen = wrong if all_bits[bit_idx] == '1' else correct + bit_idx += 1 + else: + chosen = correct + text_parts.append(f"{i+1}. {chosen}\n") + + text_parts.append(f"\nTotal words: {len(words)}\n") + + path = os.path.join(OUTPUT_DIR, 'example_misspelling.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(''.join(text_parts)) + print(f" -> {path} ({bit_idx} bits)") + return path + + +# ============================================================================= +# 69. IP TTL covert channel +# ============================================================================= + +def generate_ip_ttl_covert(): + """Create a PCAP with the Plinian divider hidden in IP TTL values.""" + print(" Generating IP TTL covert channel PCAP...") + import time + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + + # PCAP global header + pcap = struct.pack('HHHH', 12345, 53, 8 + len(payload), 0) + payload + ip_len = 20 + len(udp) + ip_header = struct.pack('>BBHHHBBH4s4s', + 0x45, 0, ip_len, 0x1234 + i, 0x4000, + ttl, 17, 0, # TTL carries the hidden byte + bytes([192, 168, 1, 100]), + bytes([8, 8, 8, 8]), + ) + eth = b'\x00' * 6 + b'\x00' * 6 + b'\x08\x00' + frame = eth + ip_header + udp + pkt_header = struct.pack(' {path} ({len(msg_bytes)} bytes in TTL fields)") + return path + + +# ============================================================================= +# 70. IP ID field encoding +# ============================================================================= + +def generate_ip_id_covert(): + """Create a PCAP with the Plinian divider hidden in IP Identification fields.""" + print(" Generating IP ID covert channel PCAP...") + import time + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + + pcap = struct.pack('HHHH', 54321, 80, 8 + len(payload), 0) + payload + ip_len = 20 + len(udp) + ip_header = struct.pack('>BBHHHBBH4s4s', + 0x45, 0, ip_len, ip_id, 0x4000, + 64, 17, 0, + bytes([10, 0, 0, 1]), + bytes([10, 0, 0, 2]), + ) + eth = b'\x00' * 6 + b'\x00' * 6 + b'\x08\x00' + frame = eth + ip_header + udp + pkt_header = struct.pack(' {path} ({len(msg_bytes)} bytes in IP ID fields)") + return path + + +# ============================================================================= +# 71. TCP window size encoding +# ============================================================================= + +def generate_tcp_window_covert(): + """Create a PCAP with the Plinian divider hidden in TCP window size fields.""" + print(" Generating TCP window size covert PCAP...") + import time + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + pcap = struct.pack('HHIIBBHHH', + 44444, 80, 1000 + i, 0, + 0x50, 0x02, # Data offset 5, SYN flag + window, # Window carries hidden data + 0, 0, + ) + ip_len = 20 + len(tcp) + ip_header = struct.pack('>BBHHHBBH4s4s', + 0x45, 0, ip_len, 0x2000 + i, 0x4000, + 64, 6, 0, # Protocol 6 = TCP + bytes([172, 16, 0, 1]), + bytes([93, 184, 216, 34]), + ) + eth = b'\x00' * 6 + b'\x00' * 6 + b'\x08\x00' + frame = eth + ip_header + tcp + pkt_header = struct.pack(' {path} ({len(msg_bytes)} bytes in TCP window fields)") + return path + + +# ============================================================================= +# 72. TCP urgent pointer encoding +# ============================================================================= + +def generate_tcp_urgent_covert(): + """Create a PCAP with the Plinian divider in TCP urgent pointer fields.""" + print(" Generating TCP urgent pointer covert PCAP...") + import time + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + pcap = struct.pack('HHIIBBHHH', + 55555, 443, 2000 + i, 0, + 0x50, 0x20, # URG flag set + 65535, + 0, urgent, # Urgent pointer carries hidden data + ) + ip_len = 20 + len(tcp) + ip_header = struct.pack('>BBHHHBBH4s4s', + 0x45, 0, ip_len, 0x3000 + i, 0x4000, + 64, 6, 0, + bytes([192, 168, 10, 5]), + bytes([104, 18, 32, 68]), + ) + eth = b'\x00' * 6 + b'\x00' * 6 + b'\x08\x00' + frame = eth + ip_header + tcp + pkt_header = struct.pack(' {path} ({len(msg_bytes)} bytes in TCP urgent ptrs)") + return path + + +# ============================================================================= +# 73. DNS TXT record steganography +# ============================================================================= + +def generate_dns_txt_record(): + """Create a PCAP with the Plinian divider in a DNS TXT record response.""" + print(" Generating DNS TXT record PCAP...") + import time, base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + encoded = base64.b64encode(secret) + + pcap = struct.pack('HHHHHH', 0xABCD, 0x8180, 1, 1, 0, 0) + + # Question section: _steg.example.com, type TXT, class IN + qname = b'\x05_steg\x07example\x03com\x00' + dns += qname + struct.pack('>HH', 16, 1) # TXT, IN + + # Answer section: same name, TXT record + dns += qname + dns += struct.pack('>HHI', 16, 1, 300) # TXT, IN, TTL=300 + # TXT RDATA: length-prefixed string + txt_rdata = bytes([len(encoded)]) + encoded + dns += struct.pack('>H', len(txt_rdata)) + txt_rdata + + # Wrap in UDP/IP/Ethernet + udp = struct.pack('>HHHH', 53, 12345, 8 + len(dns), 0) + dns + ip_len = 20 + len(udp) + ip_header = struct.pack('>BBHHHBBH4s4s', + 0x45, 0, ip_len, 0x5678, 0x4000, + 64, 17, 0, + bytes([8, 8, 8, 8]), + bytes([192, 168, 1, 100]), + ) + eth = b'\x00' * 6 + b'\x00' * 6 + b'\x08\x00' + frame = eth + ip_header + udp + pkt_header = struct.pack(' {path} (TXT record: {len(encoded)} bytes)") + return path + + +# ============================================================================= +# 74. Covert timing channel +# ============================================================================= + +def generate_covert_timing(): + """Create a PCAP with the Plinian divider in inter-packet timing (microseconds).""" + print(" Generating covert timing channel PCAP...") + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + bits = ''.join(format(b, '08b') for b in msg_bytes) + length_bits = format(len(msg_bytes), '016b') + all_bits = length_bits + bits + + pcap = struct.pack('I', i) # Sequence number + udp = struct.pack('>HHHH', 9999, 9999, 8 + len(payload), 0) + payload + ip_len = 20 + len(udp) + ip_header = struct.pack('>BBHHHBBH4s4s', + 0x45, 0, ip_len, i & 0xFFFF, 0x4000, + 64, 17, 0, + bytes([10, 1, 1, 1]), + bytes([10, 1, 1, 2]), + ) + eth = b'\x00' * 6 + b'\x00' * 6 + b'\x08\x00' + frame = eth + ip_header + udp + pkt_header = struct.pack(' {path} ({len(all_bits)} bits in packet timing)") + return path + + +# ============================================================================= +# 75. Base32 encoding file +# ============================================================================= + +def generate_base32_file(): + """Create a file with the Plinian divider in base32 encoding.""" + print(" Generating base32 encoded file...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + b32 = base64.b32encode(secret).decode() + b64 = base64.b64encode(secret).decode() + b16 = base64.b16encode(secret).decode() + b85 = base64.b85encode(secret).decode() + + text = f"""Multi-Base Encoding Reference +============================= + +This file demonstrates the same data encoded in multiple bases. +Can you decode them all? + +Base16 (Hex): +{b16} + +Base32: +{b32} + +Base64: +{b64} + +Base85 (Ascii85): +{b85} + +Raw UTF-8 bytes ({len(secret)} bytes): +{' '.join(f'{b:02x}' for b in secret)} + +Generated by ST3GG. +""" + + path = os.path.join(OUTPUT_DIR, 'example_multibase.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(text) + print(f" -> {path}") + return path + + +# ============================================================================= +# 76. Morse code in text +# ============================================================================= + +def generate_morse_code(): + """Create a text file with the Plinian divider encoded in Morse code.""" + print(" Generating Morse code text...") + + MORSE = { + 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', + 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', + 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', + 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', + 'Y': '-.--', 'Z': '--..', '0': '-----', '1': '.----', '2': '..---', + '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', + '8': '---..', '9': '----.', ' ': '/', '/': '-..-.', '\\': '.-..-.', + '-': '-....-', '.': '.-.-.-', + } + + # Encode printable ASCII subset of the divider in Morse + ascii_part = "/L\\O/V\\E/\\P/L\\I/N\\Y/" + morse_encoded = ' '.join(MORSE.get(c.upper(), '?') for c in ascii_part) + + # Also encode full divider as hex, then hex chars in Morse + hex_str = PLINIAN_DIVIDER.encode('utf-8').hex().upper() + morse_hex = ' '.join(MORSE.get(c, '?') for c in hex_str) + + text = f"""Morse Code Reference & Practice + +Standard Morse alphabet: +{chr(10).join(f' {k}: {v}' for k, v in sorted(MORSE.items()) if k.isalpha())} + +Encoded message (ASCII portion): + {morse_encoded} + +Encoded message (full hex): + {morse_hex} + +Decode key: Each letter separated by space, words by / + . = dit (short), - = dah (long) + +Generated by ST3GG. +""" + + path = os.path.join(OUTPUT_DIR, 'example_morse.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(text) + print(f" -> {path}") + return path + + +# ============================================================================= +# 77. Pixel Value Differencing (PVD) steganography +# ============================================================================= + +def generate_pvd(): + """Create a PNG with Plinian divider hidden using Pixel Value Differencing.""" + print(" Generating PVD steganography PNG...") + width, height = 200, 200 + img = Image.new('RGB', (width, height)) + pixels = img.load() + + # Generate a natural-ish gradient + for y in range(height): + for x in range(width): + r = int(100 + 80 * (x / width) + 20 * ((x * y) % 17) / 17) + g = int(80 + 100 * (y / height) + 15 * ((x + y) % 13) / 13) + b = int(60 + 80 * ((x + y) / (width + height))) + pixels[x, y] = (min(255, r), min(255, g), min(255, b)) + + # PVD: encode bits in the difference between adjacent pixel pairs + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + bit_idx = 0 + for y in range(height): + for x in range(0, width - 1, 2): + if bit_idx >= len(bits): + break + r1, g1, b1 = pixels[x, y] + r2, g2, b2 = pixels[x + 1, y] + # Modify the LSB of the difference by adjusting pixel 2 + if bits[bit_idx] == 1: + r2 = r2 | 1 # Ensure odd difference + else: + r2 = r2 & 0xFE # Ensure even difference + pixels[x + 1, y] = (r2, g2, b2) + bit_idx += 1 + if bit_idx >= len(bits): + break + + path = os.path.join(OUTPUT_DIR, 'example_pvd.png') + img.save(path) + print(f" -> {path} ({bit_idx} bits via PVD)") + return path + + +# ============================================================================= +# 78. Histogram shifting steganography +# ============================================================================= + +def generate_histogram_shifting(): + """Create a PNG with Plinian divider hidden via histogram peak shifting.""" + print(" Generating histogram shifting PNG...") + width, height = 200, 200 + img = Image.new('L', (width, height)) # Grayscale + pixels = img.load() + + # Generate grayscale gradient with values centered around 128 + for y in range(height): + for x in range(width): + val = int(100 + 56 * (x / width) + 28 * (y / height)) + pixels[x, y] = min(255, max(0, val)) + + # Histogram shifting: shift peak value pixels by 0 or 1 to encode bits + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + # Find the histogram peak + hist = [0] * 256 + for y in range(height): + for x in range(width): + hist[pixels[x, y]] += 1 + peak = hist.index(max(hist)) + + # Shift pixels: peak value pixels encode bits + # bit=0: leave at peak, bit=1: shift to peak+1 + bit_idx = 0 + for y in range(height): + for x in range(width): + if bit_idx >= len(bits): + break + if pixels[x, y] == peak: + if bits[bit_idx] == 1: + pixels[x, y] = peak + 1 + bit_idx += 1 + elif pixels[x, y] > peak: + pixels[x, y] = min(255, pixels[x, y] + 1) # Shift right to make room + if bit_idx >= len(bits): + break + + path = os.path.join(OUTPUT_DIR, 'example_histogram_shift.png') + img.save(path) + print(f" -> {path} ({bit_idx} bits via histogram shifting, peak={peak})") + return path + + +# ============================================================================= +# 79. LSB multi-bit (4-bit per channel) +# ============================================================================= + +def generate_lsb_multibit(): + """Create a PNG with Plinian divider using 4 bits per channel (high capacity).""" + print(" Generating LSB multi-bit (4bpc) PNG...") + width, height = 100, 100 + img = Image.new('RGB', (width, height)) + pixels = img.load() + + for y in range(height): + for x in range(width): + r = int(128 + 60 * (x / width)) + g = int(100 + 80 * (y / height)) + b = int(80 + 60 * ((x + y) / (width + height))) + pixels[x, y] = (r, g, b) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + + # 4 bits per channel = embed nibbles directly + nibbles = [] + for byte in payload: + nibbles.append((byte >> 4) & 0x0F) + nibbles.append(byte & 0x0F) + + nib_idx = 0 + mask = 0xF0 # Keep upper 4 bits, replace lower 4 + for pix_idx in range(width * height): + if nib_idx >= len(nibbles): + break + x = pix_idx % width + y = pix_idx // width + r, g, b = pixels[x, y] + vals = [r, g, b] + for ch in range(3): + if nib_idx >= len(nibbles): + break + vals[ch] = (vals[ch] & mask) | nibbles[nib_idx] + nib_idx += 1 + pixels[x, y] = tuple(vals) + + path = os.path.join(OUTPUT_DIR, 'example_lsb_4bit.png') + img.save(path) + print(f" -> {path} ({nib_idx} nibbles = {nib_idx * 4} bits embedded)") + return path + + +# ============================================================================= +# 80. LSB MSB-first ordering +# ============================================================================= + +def generate_lsb_msb_first(): + """Create a PNG with Plinian divider using MSB-first bit ordering (reversed).""" + print(" Generating LSB MSB-first ordering PNG...") + width, height = 150, 150 + img = Image.new('RGB', (width, height)) + pixels = img.load() + + for y in range(height): + for x in range(width): + r = int(90 + 70 * (x / width)) + g = int(120 + 60 * (y / height)) + b = int(100 + 80 * ((x + y) / (width + height))) + pixels[x, y] = (r, g, b) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + # MSB-first: reverse the bit extraction order within each byte + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + # MSB-first: bit 0 (LSB) first, then bit 1, etc. (reversed from normal) + for j in range(8): + bits.append((byte >> j) & 1) + + bit_idx = 0 + for pix_idx in range(width * height): + if bit_idx >= len(bits): + break + x = pix_idx % width + y = pix_idx // width + r, g, b = pixels[x, y] + vals = [r, g, b] + for ch in range(3): + if bit_idx >= len(bits): + break + vals[ch] = (vals[ch] & 0xFE) | bits[bit_idx] + bit_idx += 1 + pixels[x, y] = tuple(vals) + + path = os.path.join(OUTPUT_DIR, 'example_lsb_msb_first.png') + img.save(path) + print(f" -> {path} ({bit_idx} bits, MSB-first ordering)") + return path + + +# ============================================================================= +# 81. BMP DIB header field steganography +# ============================================================================= + +def generate_bmp_dib_header(): + """Create a BMP with Plinian divider hidden in DIB header reserved fields.""" + print(" Generating BMP DIB header steganography...") + import base64 + + width, height = 100, 100 + img = Image.new('RGB', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + pixels[x, y] = (int(150 + 50 * x / width), int(100 + 80 * y / height), 120) + + path = os.path.join(OUTPUT_DIR, 'example_bmp_dib.bmp') + img.save(path, 'BMP') + + # BMP has reserved fields and padding we can abuse + # The "reserved" 4 bytes at offset 6-9 in the file header + secret = PLINIAN_DIVIDER.encode('utf-8') + with open(path, 'r+b') as f: + data = bytearray(f.read()) + # BMP header offset 6: 4 reserved bytes (normally zero) + # We can store 4 bytes there + data[6] = secret[0] if len(secret) > 0 else 0 + data[7] = secret[1] if len(secret) > 1 else 0 + data[8] = secret[2] if len(secret) > 2 else 0 + data[9] = secret[3] if len(secret) > 3 else 0 + + # Also append full secret after the pixel data (trailing data) + f.seek(0) + f.write(data) + f.seek(0, 2) # End of file + f.write(b'\n--- BMP HIDDEN ---\n') + f.write(secret) + f.write(b'\nb64:' + base64.b64encode(secret)) + f.write(b'\n') + + print(f" -> {path} (4 bytes in reserved + trailing data)") + return path + + +# ============================================================================= +# 82. GIF frame disposal method encoding +# ============================================================================= + +def generate_gif_disposal(): + """Create an animated GIF with Plinian divider in frame disposal method bits.""" + print(" Generating GIF disposal method encoding...") + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + # Each frame's disposal method can be 0-7 (3 bits) + # We use: 0 (no dispose) = bit 0, 1 (don't dispose) = bit 1 + bits = [] + for b in msg_bytes: + for j in range(7, -1, -1): + bits.append((b >> j) & 1) + + # Create animated GIF with enough frames to encode the message + frames = [] + for i in range(min(len(bits), 64)): # Cap at 64 frames + frame = Image.new('P', (20, 20)) + px = frame.load() + color = 50 + i * 3 + for y in range(20): + for x in range(20): + px[x, y] = min(255, color) + frames.append(frame) + + path = os.path.join(OUTPUT_DIR, 'example_gif_disposal.gif') + if frames: + # Save with disposal methods encoding bits + frames[0].save( + path, save_all=True, append_images=frames[1:], + duration=100, loop=0, + disposal=2, # Default disposal + ) + + # Now manually patch the disposal bits in the GCE blocks + with open(path, 'rb') as f: + data = bytearray(f.read()) + + # Find all Graphic Control Extension blocks (21 F9 04) + bit_idx = 0 + i = 0 + while i < len(data) - 4: + if data[i] == 0x21 and data[i + 1] == 0xF9 and data[i + 2] == 0x04: + # GCE found at offset i + # Packed byte is at i+3, disposal is bits 4-2 + packed = data[i + 3] + if bit_idx < len(bits): + disposal = bits[bit_idx] # 0 or 1 + packed = (packed & 0xE3) | (disposal << 2) # Set disposal bits + data[i + 3] = packed + bit_idx += 1 + i += 6 # Skip past this GCE + else: + i += 1 + + with open(path, 'wb') as f: + f.write(data) + + print(f" -> {path} ({bit_idx} bits in disposal methods, {len(frames)} frames)") + return path + + +# ============================================================================= +# 83. JPEG APP segment steganography +# ============================================================================= + +def generate_jpeg_app_segment(): + """Create a JPEG with Plinian divider hidden in a custom APP segment.""" + print(" Generating JPEG APP segment steganography...") + import base64 + + width, height = 120, 120 + img = Image.new('RGB', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + r = int(180 + 40 * (x / width)) + g = int(120 + 60 * (y / height)) + b = int(80 + 80 * ((x + y) / (width + height))) + pixels[x, y] = (r, g, b) + + import io + buf = io.BytesIO() + img.save(buf, 'JPEG', quality=95) + jpeg_data = bytearray(buf.getvalue()) + + # Inject a custom APP14 segment (0xFFEE) with our secret + secret = PLINIAN_DIVIDER.encode('utf-8') + b64_secret = base64.b64encode(secret) + + # APP segment: FF EE, length (2 bytes), identifier + data + app_data = b'ST3GG\x00' + secret + b'\x00' + b64_secret + app_segment = b'\xFF\xEE' + struct.pack('>H', len(app_data) + 2) + app_data + + # Insert after SOI marker (FF D8) and before the rest + new_jpeg = bytes(jpeg_data[:2]) + app_segment + bytes(jpeg_data[2:]) + + path = os.path.join(OUTPUT_DIR, 'example_jpeg_app.jpg') + with open(path, 'wb') as f: + f.write(new_jpeg) + print(f" -> {path} (APP14 segment: {len(app_data)} bytes)") + return path + + +# ============================================================================= +# 84. Color space abuse (YCbCr channel hiding) +# ============================================================================= + +def generate_color_space(): + """Create a PNG with Plinian divider hidden in YCbCr color space conversion.""" + print(" Generating color space (YCbCr) steganography...") + + width, height = 150, 150 + img = Image.new('RGB', (width, height)) + pixels = img.load() + + for y in range(height): + for x in range(width): + r = int(140 + 60 * (x / width)) + g = int(120 + 80 * (y / height)) + b = int(100 + 60 * ((x + y) / (width + height))) + pixels[x, y] = (r, g, b) + + # Convert to YCbCr, embed in Cb channel LSB, convert back + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + bit_idx = 0 + for pix_idx in range(width * height): + if bit_idx >= len(bits): + break + x = pix_idx % width + y = pix_idx // width + r, g, b = pixels[x, y] + + # RGB to YCbCr + Y = int(0.299 * r + 0.587 * g + 0.114 * b) + Cb = int(-0.169 * r - 0.331 * g + 0.500 * b + 128) + Cr = int(0.500 * r - 0.419 * g - 0.081 * b + 128) + + # Embed in Cb LSB + Cb = (Cb & 0xFE) | bits[bit_idx] + bit_idx += 1 + + # YCbCr back to RGB + r2 = max(0, min(255, int(Y + 1.402 * (Cr - 128)))) + g2 = max(0, min(255, int(Y - 0.344 * (Cb - 128) - 0.714 * (Cr - 128)))) + b2 = max(0, min(255, int(Y + 1.772 * (Cb - 128)))) + pixels[x, y] = (r2, g2, b2) + + path = os.path.join(OUTPUT_DIR, 'example_ycbcr.png') + img.save(path) + print(f" -> {path} ({bit_idx} bits in Cb channel)") + return path + + +# ============================================================================= +# 85. PNG gAMA chunk manipulation +# ============================================================================= + +def generate_png_gama(): + """Create a PNG with Plinian divider hidden in gAMA and custom ancillary chunks.""" + print(" Generating PNG gAMA/ancillary chunk steganography...") + import base64 + + width, height = 100, 100 + img = Image.new('RGB', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + pixels[x, y] = (int(100 + 80 * x / width), int(80 + 100 * y / height), 140) + + # Save PNG then inject custom chunks + import io + buf = io.BytesIO() + img.save(buf, 'PNG') + png_data = buf.getvalue() + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64_secret = base64.b64encode(secret) + + def make_png_chunk(chunk_type: bytes, data: bytes) -> bytes: + """Create a properly formatted PNG chunk with CRC.""" + length = struct.pack('>I', len(data)) + crc_data = chunk_type + data + crc = zlib.crc32(crc_data) & 0xFFFFFFFF + return length + chunk_type + data + struct.pack('>I', crc) + + # Build custom private chunks (lowercase first letter = ancillary + private) + # stEg chunk with our secret + steg_chunk = make_png_chunk(b'stEg', secret) + # sT3g chunk with base64 + st3g_chunk = make_png_chunk(b'sT3g', b64_secret) + + # Insert chunks after IHDR (first chunk after 8-byte signature) + sig = png_data[:8] + ihdr_len = struct.unpack('>I', png_data[8:12])[0] + ihdr_end = 8 + 12 + ihdr_len # sig + length + type + data + crc + + new_png = png_data[:ihdr_end] + steg_chunk + st3g_chunk + png_data[ihdr_end:] + + path = os.path.join(OUTPUT_DIR, 'example_png_chunks_custom.png') + with open(path, 'wb') as f: + f.write(new_png) + print(f" -> {path} (2 custom PNG chunks)") + return path + + +# ============================================================================= +# 86. PDF JavaScript steganography +# ============================================================================= + +def generate_pdf_javascript(): + """Create a PDF with Plinian divider hidden in a JavaScript action.""" + print(" Generating PDF JavaScript steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64 = base64.b64encode(secret).decode() + + js_code = f'var s=atob("{b64}");app.alert("ST3GG: "+s);' + + objects = [] + objects.append(b"1 0 obj\n<< /Type /Catalog /Pages 2 0 R /OpenAction 4 0 R >>\nendobj\n") + objects.append(b"2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n") + objects.append(b"3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] >>\nendobj\n") + + js_bytes = js_code.encode('utf-8') + objects.append(f"4 0 obj\n<< /Type /Action /S /JavaScript /JS ({js_code}) >>\nendobj\n".encode('utf-8')) + + pdf = b"%PDF-1.4\n%\xe2\xe3\xcf\xd3\n" + offsets = [] + for obj in objects: + offsets.append(len(pdf)) + pdf += obj + + xref_offset = len(pdf) + pdf += f"xref\n0 {len(objects) + 1}\n".encode() + pdf += b"0000000000 65535 f \n" + for offset in offsets: + pdf += f"{offset:010d} 00000 n \n".encode() + pdf += f"trailer\n<< /Size {len(objects) + 1} /Root 1 0 R >>\n".encode() + pdf += f"startxref\n{xref_offset}\n%%EOF\n".encode() + + path = os.path.join(OUTPUT_DIR, 'example_pdf_javascript.pdf') + with open(path, 'wb') as f: + f.write(pdf) + print(f" -> {path}") + return path + + +# ============================================================================= +# 87. PDF incremental update steganography +# ============================================================================= + +def generate_pdf_incremental(): + """Create a PDF with Plinian divider hidden in an incremental update.""" + print(" Generating PDF incremental update steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + + # Base PDF + base = b"%PDF-1.4\n" + base += b"1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n" + base += b"2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n" + base += b"3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] >>\nendobj\n" + xref1 = len(base) + base += b"xref\n0 4\n0000000000 65535 f \n0000000009 00000 n \n0000000062 00000 n \n0000000115 00000 n \n" + base += b"trailer\n<< /Size 4 /Root 1 0 R >>\n" + base += f"startxref\n{xref1}\n%%EOF\n".encode() + + # Incremental update: add a hidden annotation with our secret + incr = f'4 0 obj\n<< /Type /Annot /Subtype /Text /Contents ({PLINIAN_DIVIDER}) /Rect [0 0 0 0] /F 2 >>\nendobj\n'.encode('utf-8') + incr_offset = len(base) + update = incr + xref2 = len(base) + len(update) + update += f"xref\n4 1\n{incr_offset:010d} 00000 n \ntrailer\n<< /Size 5 /Root 1 0 R /Prev {xref1} >>\nstartxref\n{xref2}\n%%EOF\n".encode() + + path = os.path.join(OUTPUT_DIR, 'example_pdf_incremental.pdf') + with open(path, 'wb') as f: + f.write(base + update) + print(f" -> {path}") + return path + + +# ============================================================================= +# 88. PDF form field steganography +# ============================================================================= + +def generate_pdf_form_fields(): + """Create a PDF with Plinian divider hidden in form field default values.""" + print(" Generating PDF form field steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64 = base64.b64encode(secret).decode() + + objects = [] + objects.append(b"1 0 obj\n<< /Type /Catalog /Pages 2 0 R /AcroForm << /Fields [5 0 R 6 0 R] >> >>\nendobj\n") + objects.append(b"2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n") + objects.append(b"3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Annots [5 0 R 6 0 R] >>\nendobj\n") + objects.append(b"4 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>\nendobj\n") + # Hidden form field with secret as default value + objects.append(f"5 0 obj\n<< /Type /Annot /Subtype /Widget /FT /Tx /T (steg_field) /V ({PLINIAN_DIVIDER}) /Rect [0 0 0 0] /F 6 >>\nendobj\n".encode('utf-8')) + objects.append(f"6 0 obj\n<< /Type /Annot /Subtype /Widget /FT /Tx /T (steg_b64) /V ({b64}) /Rect [0 0 0 0] /F 6 >>\nendobj\n".encode('utf-8')) + + pdf = b"%PDF-1.4\n%\xe2\xe3\xcf\xd3\n" + offsets = [] + for obj in objects: + offsets.append(len(pdf)) + pdf += obj + xref_offset = len(pdf) + pdf += f"xref\n0 {len(objects) + 1}\n".encode() + pdf += b"0000000000 65535 f \n" + for offset in offsets: + pdf += f"{offset:010d} 00000 n \n".encode() + pdf += f"trailer\n<< /Size {len(objects) + 1} /Root 1 0 R >>\n".encode() + pdf += f"startxref\n{xref_offset}\n%%EOF\n".encode() + + path = os.path.join(OUTPUT_DIR, 'example_pdf_forms.pdf') + with open(path, 'wb') as f: + f.write(pdf) + print(f" -> {path}") + return path + + +# ============================================================================= +# 89. HTML event handler steganography +# ============================================================================= + +def generate_html_events(): + """Create an HTML file with Plinian divider hidden in event handler attributes.""" + print(" Generating HTML event handler steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64 = base64.b64encode(secret).decode() + hex_enc = secret.hex() + + html = f''' + +Event Handler Steganography + +

ST3GG Event Handler Example

+

+This page contains hidden data in event handler attributes. +

+
+{PLINIAN_DIVIDER} +
+ +
+ + +
+ +''' + + path = os.path.join(OUTPUT_DIR, 'example_html_events.html') + with open(path, 'w', encoding='utf-8') as f: + f.write(html) + print(f" -> {path}") + return path + + +# ============================================================================= +# 90. XML entity declaration steganography +# ============================================================================= + +def generate_xml_entities(): + """Create an XML file with Plinian divider hidden in entity declarations.""" + print(" Generating XML entity steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64 = base64.b64encode(secret).decode() + + # Encode each byte as an XML entity + entity_defs = '\n'.join( + f' ' + for i, b in enumerate(secret) + ) + + xml = f''' + + +{entity_defs} +]> + + This XML contains hidden data in entity declarations. + &steg_payload; + &steg_b64; +''' + + path = os.path.join(OUTPUT_DIR, 'example_xml_entities.xml') + with open(path, 'w', encoding='utf-8') as f: + f.write(xml) + print(f" -> {path}") + return path + + +# ============================================================================= +# 91. Nested ZIP steganography +# ============================================================================= + +def generate_nested_zip(): + """Create a nested ZIP (ZIP inside ZIP) with Plinian divider at inner level.""" + print(" Generating nested ZIP steganography...") + import zipfile, io + + secret = PLINIAN_DIVIDER.encode('utf-8') + + # Inner ZIP + inner_buf = io.BytesIO() + with zipfile.ZipFile(inner_buf, 'w', zipfile.ZIP_DEFLATED) as zf: + zf.writestr('secret.txt', PLINIAN_DIVIDER) + zf.writestr('flag.txt', 'ST3GG{n3st3d_z1p_m4tr10shk4}') + zf.comment = secret + inner_zip = inner_buf.getvalue() + + # Outer ZIP + path = os.path.join(OUTPUT_DIR, 'example_nested.zip') + with zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED) as zf: + zf.writestr('data/readme.txt', 'Just a normal archive. Nothing to see here.\n') + zf.writestr('data/inner.zip', inner_zip) + zf.writestr('data/notes.txt', 'Check inner.zip for more data.\n') + + print(f" -> {path}") + return path + + +# ============================================================================= +# 92. Emoji skin tone selector steganography +# ============================================================================= + +def generate_emoji_skin_tone(): + """Create text with Plinian divider hidden in emoji skin tone modifier choices.""" + print(" Generating emoji skin tone selector text...") + + # Skin tone modifiers: U+1F3FB to U+1F3FF (5 tones = ~2.3 bits each) + # We use 4 tones for clean 2-bit encoding: + # Light (1F3FB)=00, MedLight (1F3FC)=01, MedDark (1F3FE)=10, Dark (1F3FF)=11 + TONES = ['\U0001F3FB', '\U0001F3FC', '\U0001F3FE', '\U0001F3FF'] + # Base emojis that support skin tones + BASES = ['\U0001F44D', '\U0001F44B', '\U0001F64C', '\U0001F44F', # thumbs up, wave, raised hands, clap + '\U0001F91D', '\U0001F4AA', '\U0001F91E', '\U0001F596', # handshake, flex, crossed fingers, vulcan + '\U0001F44C', '\U0001F918', '\U0001F919', '\U0001F91F', # ok, horns, call me, love you + '\U0001F448', '\U0001F449', '\U0001F446', '\U0001F447'] # point left/right/up/down + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + # Convert to 2-bit pairs + pairs = [] + for b in msg_bytes: + pairs.append((b >> 6) & 0x03) + pairs.append((b >> 4) & 0x03) + pairs.append((b >> 2) & 0x03) + pairs.append(b & 0x03) + + lines = ["Emoji Skin Tone Diversity Display\n"] + pair_idx = 0 + for i, base in enumerate(BASES): + row = f" {i+1:2d}. " + for _ in range(len(msg_bytes) // len(BASES) + 2): + if pair_idx < len(pairs): + tone = TONES[pairs[pair_idx]] + row += base + tone + ' ' + pair_idx += 1 + else: + row += base + TONES[0] + ' ' + lines.append(row.rstrip()) + + lines.append(f"\nTotal emoji: {pair_idx}") + + path = os.path.join(OUTPUT_DIR, 'example_emoji_skin_tone.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines)) + print(f" -> {path} ({pair_idx} 2-bit pairs)") + return path + + +# ============================================================================= +# 93. Punycode / IDN homograph steganography +# ============================================================================= + +def generate_punycode(): + """Create a text file with Plinian divider hidden in Punycode-encoded domains.""" + print(" Generating Punycode/IDN steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64 = base64.b64encode(secret).decode() + + # Encode each byte as a Punycode domain with homograph characters + domains = [] + for i, b in enumerate(secret): + # Create a domain that encodes the byte value + # Use mix of ASCII and non-ASCII to make it look like IDN + label = f"s{b:02x}" + # Add a non-ASCII char to force Punycode + idn_label = label + chr(0x0430 + (b % 20)) # Cyrillic letters + try: + puny = idn_label.encode('idna').decode('ascii') + except (UnicodeError, UnicodeDecodeError): + puny = f"xn--{label}" + domains.append(f"{puny}.example.com") + + text = f"""IDN / Punycode Domain Reference +================================ + +The following domains demonstrate Internationalized Domain Names +(IDN) with Punycode encoding. Each domain encodes data in its +label structure. + +Domains: +{chr(10).join(f' {d}' for d in domains)} + +Base64 encoded payload: + {b64} + +Raw hex: + {secret.hex()} + +Total domains: {len(domains)} +Generated by ST3GG. +""" + + path = os.path.join(OUTPUT_DIR, 'example_punycode.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(text) + print(f" -> {path} ({len(domains)} encoded domains)") + return path + + +# ============================================================================= +# 94. JPEG restart marker steganography +# ============================================================================= + +def generate_jpeg_restart_markers(): + """Create a JPEG with Plinian divider hidden in restart marker intervals.""" + print(" Generating JPEG restart marker steganography...") + + width, height = 100, 100 + img = Image.new('RGB', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + pixels[x, y] = (int(160 + 60 * x/width), int(100 + 80 * y/height), 120) + + import io + buf = io.BytesIO() + img.save(buf, 'JPEG', quality=90) + jpeg_data = bytearray(buf.getvalue()) + + # Inject restart markers (FFD0-FFD7) carrying data + # The marker index (0-7) encodes 3 bits + secret = PLINIAN_DIVIDER.encode('utf-8') + import base64 + b64 = base64.b64encode(secret) + + # Build restart marker payload and inject after SOS + rst_data = bytearray() + for i, byte_val in enumerate(secret[:8]): # 8 restart markers available + marker_idx = byte_val % 8 + rst_data.extend([0xFF, 0xD0 + marker_idx]) + + # Find SOS marker (FFDA) and inject before image data + sos_pos = jpeg_data.find(b'\xFF\xDA') + if sos_pos > 0: + # Find end of SOS header (after the scan header) + sos_len = struct.unpack('>H', jpeg_data[sos_pos+2:sos_pos+4])[0] + inject_pos = sos_pos + 2 + sos_len + new_jpeg = bytes(jpeg_data[:inject_pos]) + bytes(rst_data) + bytes(jpeg_data[inject_pos:]) + else: + new_jpeg = bytes(jpeg_data) + + # Also add a COM marker with the full secret + com_data = b'ST3GG: ' + secret + com_marker = b'\xFF\xFE' + struct.pack('>H', len(com_data) + 2) + com_data + new_jpeg = new_jpeg[:2] + com_marker + new_jpeg[2:] + + path = os.path.join(OUTPUT_DIR, 'example_jpeg_restart.jpg') + with open(path, 'wb') as f: + f.write(new_jpeg) + print(f" -> {path}") + return path + + +# ============================================================================= +# 95. Matched pairs LSB steganography +# ============================================================================= + +def generate_matched_pairs_lsb(): + """Create a PNG with Plinian divider using matched-pairs LSB embedding.""" + print(" Generating matched pairs LSB PNG...") + width, height = 200, 200 + img = Image.new('RGB', (width, height)) + pixels = img.load() + + import random + random.seed(777) + for y in range(height): + for x in range(width): + r = int(100 + 80 * (x / width) + random.randint(-3, 3)) + g = int(80 + 100 * (y / height) + random.randint(-3, 3)) + b = int(60 + 80 * ((x+y) / (width+height)) + random.randint(-3, 3)) + pixels[x, y] = (max(0,min(255,r)), max(0,min(255,g)), max(0,min(255,b))) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + # Matched pairs: use pixel pairs where the bit is encoded in + # whether pixel[2k] > pixel[2k+1] (1) or not (0) in the R channel + bit_idx = 0 + for y in range(height): + for x in range(0, width - 1, 2): + if bit_idx >= len(bits): + break + r1, g1, b1 = pixels[x, y] + r2, g2, b2 = pixels[x + 1, y] + if bits[bit_idx] == 1: + # Ensure r1 > r2 + if r1 <= r2: + r1, r2 = max(r1, r2), min(r1, r2) + if r1 == r2: + r1 = min(255, r1 + 1) + else: + # Ensure r1 <= r2 + if r1 > r2: + r1, r2 = min(r1, r2), max(r1, r2) + pixels[x, y] = (r1, g1, b1) + pixels[x + 1, y] = (r2, g2, b2) + bit_idx += 1 + if bit_idx >= len(bits): + break + + path = os.path.join(OUTPUT_DIR, 'example_matched_pairs.png') + img.save(path) + print(f" -> {path} ({bit_idx} bits via matched pairs)") + return path + + +# ============================================================================= +# 96. PNG scanline filter abuse +# ============================================================================= + +def generate_png_scanline_filter(): + """Create a PNG with Plinian divider encoded in scanline filter byte choices.""" + print(" Generating PNG scanline filter abuse...") + + width, height = 100, 200 # Need enough scanlines for the message + img = Image.new('RGB', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + pixels[x, y] = (int(120 + 60*x/width), int(100 + 80*y/height), 130) + + # Save normally first + import io + buf = io.BytesIO() + img.save(buf, 'PNG') + png_data = buf.getvalue() + + # Parse PNG, decompress IDAT, modify filter bytes, recompress + # Each scanline starts with a filter byte (0-4) + # We encode: filter 0 (None) = bit 0, filter 1 (Sub) = bit 1 + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + # Find and decompress IDAT chunks + pos = 8 # Skip PNG signature + idat_data = b'' + chunks_before = bytearray() + chunks_after = bytearray() + found_idat = False + past_idat = False + + while pos < len(png_data): + chunk_len = struct.unpack('>I', png_data[pos:pos+4])[0] + chunk_type = png_data[pos+4:pos+8] + chunk_data = png_data[pos+8:pos+8+chunk_len] + chunk_crc = png_data[pos+8+chunk_len:pos+12+chunk_len] + + if chunk_type == b'IDAT': + idat_data += chunk_data + found_idat = True + elif not found_idat: + chunks_before.extend(png_data[pos:pos+12+chunk_len]) + else: + past_idat = True + chunks_after.extend(png_data[pos:pos+12+chunk_len]) + + pos += 12 + chunk_len + + if idat_data: + raw = zlib.decompress(idat_data) + scanline_len = width * 3 + 1 # 3 bytes per pixel + 1 filter byte + + # Modify filter bytes to encode our message + raw_array = bytearray(raw) + for i, bit in enumerate(bits): + if i >= height: + break + offset = i * scanline_len + # Set filter byte: 0=None (bit 0), 1=Sub (bit 1) + raw_array[offset] = 1 if bit == 1 else 0 + + # Recompress + compressed = zlib.compress(bytes(raw_array)) + new_idat = b'IDAT' + compressed + idat_crc = zlib.crc32(new_idat) & 0xFFFFFFFF + idat_chunk = struct.pack('>I', len(compressed)) + new_idat + struct.pack('>I', idat_crc) + + new_png = png_data[:8] + bytes(chunks_before) + idat_chunk + bytes(chunks_after) + + path = os.path.join(OUTPUT_DIR, 'example_scanline_filter.png') + with open(path, 'wb') as f: + f.write(new_png) + print(f" -> {path} ({min(len(bits), height)} bits in filter bytes)") + else: + path = os.path.join(OUTPUT_DIR, 'example_scanline_filter.png') + img.save(path) + print(f" -> {path} (fallback: no filter modification)") + return path + + +# ============================================================================= +# 97. QR code error correction steganography +# ============================================================================= + +def generate_qr_steg(): + """Create a text-based QR representation with Plinian divider in the data.""" + print(" Generating QR code steganography...") + import base64 + + # Since we can't easily generate actual QR images without qrcode lib, + # we create a text file that describes a QR payload with hidden data + secret = PLINIAN_DIVIDER.encode('utf-8') + b64 = base64.b64encode(secret).decode() + + # Build QR data segments as they would be encoded + # Mode indicator (0100 = byte mode) + char count (8 bits) + data + mode = '0100' + count = format(len(secret), '08b') + data_bits = ''.join(format(b, '08b') for b in secret) + + # Build a visual text-QR using block characters + block = '\u2588' # Full block + light = ' ' + import random + random.seed(42) + qr_size = 25 + # Create a pseudo-QR pattern + qr_rows = [] + for y in range(qr_size): + row = '' + for x in range(qr_size): + # Finder patterns in corners + if (x < 7 and y < 7) or (x >= qr_size-7 and y < 7) or (x < 7 and y >= qr_size-7): + # Finder pattern + dx = x if x < 7 else (x - (qr_size-7)) if x >= qr_size-7 else x + dy = y if y < 7 else (y - (qr_size-7)) + if dx in (0,6) or dy in (0,6) or (2<=dx<=4 and 2<=dy<=4): + row += block + else: + row += light + else: + # Data area - encode our secret bits + bit_pos = (y * qr_size + x) - 49 # Offset past finders + if 0 <= bit_pos < len(data_bits): + row += block if data_bits[bit_pos] == '1' else light + else: + row += block if random.random() > 0.5 else light + qr_rows.append(row) + + qr_visual = '\n'.join(qr_rows) + + text = f"""QR Code Steganography Example + +Visual QR pattern (text representation): +{qr_visual} + +QR Data Analysis: + Mode: Byte (0100) + Character count: {len(secret)} + Data bits: {len(data_bits)} + +Encoded payload (base64): + {b64} + +Raw data bits (first 64): + {data_bits[:64]}... + +The QR error correction capacity allows modifying up to 30% of +data codewords while maintaining readability, creating space for +steganographic embedding in the error correction blocks. + +Generated by ST3GG. +""" + + path = os.path.join(OUTPUT_DIR, 'example_qr_steg.txt') + with open(path, 'w', encoding='utf-8') as f: + f.write(text) + print(f" -> {path}") + return path + + +# ============================================================================= +# 98. Echo hiding steganography +# ============================================================================= + +def generate_echo_hiding(): + """Create a WAV with Plinian divider hidden in echo delay patterns.""" + print(" Generating echo hiding WAV...") + import numpy as np + import math + + sample_rate = 22050 + duration = 3 + num_samples = sample_rate * duration + + # Generate a rich tone + t = np.arange(num_samples) / sample_rate + signal = (0.4 * np.sin(2 * np.pi * 440 * t) + + 0.2 * np.sin(2 * np.pi * 880 * t) + + 0.1 * np.sin(2 * np.pi * 1320 * t)) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + # Echo hiding: bit=0 -> short echo (150 samples), bit=1 -> long echo (300 samples) + SHORT_DELAY = 150 + LONG_DELAY = 300 + ECHO_AMP = 0.3 + segment_len = num_samples // len(bits) if bits else num_samples + + output = signal.copy() + for i, bit in enumerate(bits): + start = i * segment_len + end = min(start + segment_len, num_samples) + delay = LONG_DELAY if bit == 1 else SHORT_DELAY + for j in range(start + delay, end): + output[j] += ECHO_AMP * signal[j - delay] + + # Normalize and convert to 16-bit + output = output / np.max(np.abs(output)) * 0.8 + samples_16 = (output * 16000).astype(np.int16) + + path = os.path.join(OUTPUT_DIR, 'example_echo_hiding.wav') + with wave.open(path, 'w') as wav: + wav.setnchannels(1) + wav.setsampwidth(2) + wav.setframerate(sample_rate) + wav.writeframes(samples_16.tobytes()) + print(f" -> {path} ({len(bits)} bits in echo delays)") + return path + + +# ============================================================================= +# 99. Phase coding steganography +# ============================================================================= + +def generate_phase_coding(): + """Create a WAV with Plinian divider hidden in phase of frequency components.""" + print(" Generating phase coding WAV...") + import numpy as np + + sample_rate = 22050 + segment_size = 512 # FFT segment size + num_segments = 200 # Total segments + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + # Generate base signal + total_samples = segment_size * num_segments + t = np.arange(total_samples) / sample_rate + signal = 0.5 * np.sin(2 * np.pi * 440 * t) + 0.2 * np.random.randn(total_samples) * 0.05 + + # Phase coding: modify phase of first segment's DFT + # bit=0 -> phase=0, bit=1 -> phase=pi + output = signal.copy() + for i, bit in enumerate(bits): + if i >= num_segments: + break + start = i * segment_size + segment = output[start:start + segment_size] + spectrum = np.fft.rfft(segment) + magnitudes = np.abs(spectrum) + phases = np.angle(spectrum) + + # Modify phase of a specific frequency bin + target_bin = 10 + (i % 20) # Spread across bins + phases[target_bin] = np.pi if bit == 1 else 0 + + # Reconstruct + spectrum = magnitudes * np.exp(1j * phases) + output[start:start + segment_size] = np.fft.irfft(spectrum, n=segment_size) + + # Normalize and convert + output = output / np.max(np.abs(output)) * 0.8 + samples_16 = (output * 16000).astype(np.int16) + + path = os.path.join(OUTPUT_DIR, 'example_phase_coding.wav') + with wave.open(path, 'w') as wav: + wav.setnchannels(1) + wav.setsampwidth(2) + wav.setframerate(sample_rate) + wav.writeframes(samples_16.tobytes()) + print(f" -> {path} ({min(len(bits), num_segments)} bits in phase)") + return path + + +# ============================================================================= +# 100. Spread spectrum (DSSS) steganography +# ============================================================================= + +def generate_spread_spectrum(): + """Create a WAV with Plinian divider hidden via Direct Sequence Spread Spectrum.""" + print(" Generating spread spectrum (DSSS) WAV...") + import numpy as np + + sample_rate = 22050 + chip_rate = 100 # Chips per bit + duration = 4 + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + # Generate carrier signal + total_samples = sample_rate * duration + t = np.arange(total_samples) / sample_rate + carrier = 0.5 * np.sin(2 * np.pi * 440 * t) + + # Generate PN (pseudo-noise) sequence + np.random.seed(42) # Fixed seed = shared secret + samples_per_bit = sample_rate // chip_rate + + # Spread each bit across samples_per_bit samples using PN sequence + spread = np.zeros(total_samples) + for i, bit in enumerate(bits): + start = i * samples_per_bit + if start + samples_per_bit > total_samples: + break + pn = np.random.choice([-1, 1], size=samples_per_bit) + data_val = 1 if bit == 1 else -1 + spread[start:start + samples_per_bit] = data_val * pn * 0.02 # Low amplitude + + output = carrier + spread + output = output / np.max(np.abs(output)) * 0.8 + samples_16 = (output * 16000).astype(np.int16) + + path = os.path.join(OUTPUT_DIR, 'example_spread_spectrum.wav') + with wave.open(path, 'w') as wav: + wav.setnchannels(1) + wav.setsampwidth(2) + wav.setframerate(sample_rate) + wav.writeframes(samples_16.tobytes()) + print(f" -> {path} ({len(bits)} bits via DSSS)") + return path + + +# ============================================================================= +# 101. Quantization noise steganography +# ============================================================================= + +def generate_quantization_noise(): + """Create a WAV with Plinian divider hidden in quantization noise patterns.""" + print(" Generating quantization noise WAV...") + import numpy as np + + sample_rate = 22050 + duration = 2 + num_samples = sample_rate * duration + + # Generate 16-bit audio + t = np.arange(num_samples) / sample_rate + signal = 0.5 * np.sin(2 * np.pi * 523.25 * t) + 0.2 * np.sin(2 * np.pi * 659.25 * t) + samples = (signal * 16000).astype(np.int16) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for byte in payload: + for j in range(7, -1, -1): + bits.append((byte >> j) & 1) + + # Quantization noise: add controlled noise to the 2nd LSB + # bit=0: 2nd LSB = 0, bit=1: 2nd LSB = 1 + for i, bit in enumerate(bits): + if i >= len(samples): + break + val = int(samples[i]) + # Handle signed 16-bit: convert to unsigned, modify, convert back + u = val & 0xFFFF + u = (u & 0xFFFD) | (bit << 1) + samples[i] = np.int16(u if u < 32768 else u - 65536) + + path = os.path.join(OUTPUT_DIR, 'example_quantization_noise.wav') + with wave.open(path, 'w') as wav: + wav.setnchannels(1) + wav.setsampwidth(2) + wav.setframerate(sample_rate) + wav.writeframes(samples.tobytes()) + print(f" -> {path} ({len(bits)} bits in quantization noise)") + return path + + +# ============================================================================= +# 102. BPCS (Bit-Plane Complexity Segmentation) steganography +# ============================================================================= + +def generate_bpcs(): + """Create a PNG with Plinian divider using BPCS embedding in complex bit planes.""" + print(" Generating BPCS steganography PNG...") + import numpy as np + + width, height = 200, 200 + img = Image.new('RGB', (width, height)) + pixels = img.load() + + # Generate a natural-looking image with varying complexity + np.random.seed(123) + for y in range(height): + for x in range(width): + r = int(100 + 80 * (x/width) + np.random.randint(-10, 10)) + g = int(80 + 100 * (y/height) + np.random.randint(-10, 10)) + b = int(60 + 80 * ((x+y)/(width+height)) + np.random.randint(-10, 10)) + pixels[x, y] = (max(0,min(255,r)), max(0,min(255,g)), max(0,min(255,b))) + + # Extract image as numpy array + img_array = np.array(img, dtype=np.uint8) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + + # BPCS: replace "complex" 8x8 blocks in bit plane 0 with message data + # Complexity threshold: blocks with >40% transitions are "complex enough" + BLOCK_SIZE = 8 + THRESHOLD = 0.4 + + def block_complexity(block): + """Calculate complexity as ratio of bit transitions.""" + transitions = 0 + total = 0 + for r in range(block.shape[0]): + for c in range(block.shape[1] - 1): + if block[r, c] != block[r, c + 1]: + transitions += 1 + total += 1 + for r in range(block.shape[0] - 1): + for c in range(block.shape[1]): + if block[r, c] != block[r + 1, c]: + transitions += 1 + total += 1 + return transitions / total if total > 0 else 0 + + # Convert payload to bits + payload_bits = [] + for b in payload: + for j in range(7, -1, -1): + payload_bits.append((b >> j) & 1) + + # Embed in bit plane 0 of red channel + bit_idx = 0 + channel = img_array[:, :, 0] # Red channel + bit_plane = (channel >> 0) & 1 # Bit plane 0 + + for by in range(0, height - BLOCK_SIZE + 1, BLOCK_SIZE): + for bx in range(0, width - BLOCK_SIZE + 1, BLOCK_SIZE): + if bit_idx + BLOCK_SIZE * BLOCK_SIZE > len(payload_bits): + break + block = bit_plane[by:by+BLOCK_SIZE, bx:bx+BLOCK_SIZE] + if block_complexity(block) >= THRESHOLD: + # Replace this complex block with message data + for r in range(BLOCK_SIZE): + for c in range(BLOCK_SIZE): + if bit_idx < len(payload_bits): + bit_plane[by+r, bx+c] = payload_bits[bit_idx] + bit_idx += 1 + if bit_idx + BLOCK_SIZE * BLOCK_SIZE > len(payload_bits): + break + + # Reconstruct channel + channel = (channel & 0xFE) | bit_plane + img_array[:, :, 0] = channel + result = Image.fromarray(img_array) + + path = os.path.join(OUTPUT_DIR, 'example_bpcs.png') + result.save(path) + print(f" -> {path} ({bit_idx} bits via BPCS)") + return path + + +# ============================================================================= +# 103. JPEG DCT coefficient steganography +# ============================================================================= + +def generate_jpeg_dct(): + """Create a JPEG with Plinian divider hidden in DCT coefficients (manual).""" + print(" Generating JPEG DCT coefficient steganography...") + import numpy as np + + width, height = 128, 128 # Multiple of 8 for DCT blocks + img = Image.new('RGB', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + r = int(140 + 60 * np.sin(x * 0.1) + 30 * np.cos(y * 0.08)) + g = int(120 + 50 * np.cos(x * 0.08 + y * 0.05)) + b = int(100 + 40 * np.sin((x + y) * 0.06)) + pixels[x, y] = (max(0,min(255,r)), max(0,min(255,g)), max(0,min(255,b))) + + # Convert to grayscale numpy array for DCT processing + gray = np.array(img.convert('L'), dtype=np.float64) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for b in payload: + for j in range(7, -1, -1): + bits.append((b >> j) & 1) + + # Manual 2D DCT using numpy (type-II DCT via FFT) + def dct2(block): + return np.real(np.fft.fft2(block)) + + def idct2(block): + return np.real(np.fft.ifft2(block)) + + # Embed bits in mid-frequency DCT coefficients of 8x8 blocks + bit_idx = 0 + BLOCK = 8 + for by in range(0, height, BLOCK): + for bx in range(0, width, BLOCK): + if bit_idx >= len(bits): + break + block = gray[by:by+BLOCK, bx:bx+BLOCK].copy() + coeffs = dct2(block) + # Modify coefficient at position (3,4) — mid-frequency + if bit_idx < len(bits): + val = coeffs[3, 4] + if bits[bit_idx] == 1: + coeffs[3, 4] = abs(val) + 10 if val >= 0 else -(abs(val) + 10) + else: + coeffs[3, 4] = val * 0.5 # Reduce magnitude + bit_idx += 1 + gray[by:by+BLOCK, bx:bx+BLOCK] = np.clip(idct2(coeffs), 0, 255) + if bit_idx >= len(bits): + break + + # Save as grayscale image (the DCT modification is in the pixel data) + result = Image.fromarray(gray.astype(np.uint8), 'L') + path = os.path.join(OUTPUT_DIR, 'example_dct_manual.png') + result.save(path) + print(f" -> {path} ({bit_idx} bits in DCT coefficients)") + return path + + +# ============================================================================= +# 104. DFT (Discrete Fourier Transform) embedding +# ============================================================================= + +def generate_dft_embedding(): + """Create a PNG with Plinian divider hidden in DFT magnitude spectrum.""" + print(" Generating DFT embedding PNG...") + import numpy as np + + width, height = 128, 128 + img = Image.new('L', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + pixels[x, y] = int(128 + 60 * np.sin(x * 0.1) + 40 * np.cos(y * 0.12)) + + gray = np.array(img, dtype=np.float64) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for b in payload: + for j in range(7, -1, -1): + bits.append((b >> j) & 1) + + # 2D DFT + spectrum = np.fft.fft2(gray) + magnitude = np.abs(spectrum) + phase = np.angle(spectrum) + + # Embed bits in magnitude of mid-frequency components + bit_idx = 0 + for freq in range(10, 60): + if bit_idx >= len(bits): + break + r, c = freq, freq + if bits[bit_idx] == 1: + magnitude[r, c] *= 1.5 + magnitude[height - r, width - c] *= 1.5 # Conjugate symmetry + else: + magnitude[r, c] *= 0.7 + magnitude[height - r, width - c] *= 0.7 + bit_idx += 1 + + # Reconstruct + spectrum = magnitude * np.exp(1j * phase) + result = np.real(np.fft.ifft2(spectrum)) + result = np.clip(result, 0, 255).astype(np.uint8) + + path = os.path.join(OUTPUT_DIR, 'example_dft.png') + Image.fromarray(result, 'L').save(path) + print(f" -> {path} ({bit_idx} bits in DFT magnitude)") + return path + + +# ============================================================================= +# 105. DWT (Discrete Wavelet Transform) - Haar wavelet +# ============================================================================= + +def generate_dwt_haar(): + """Create a PNG with Plinian divider hidden in Haar wavelet coefficients.""" + print(" Generating DWT (Haar wavelet) PNG...") + import numpy as np + + width, height = 128, 128 + img = Image.new('L', (width, height)) + pixels = img.load() + np.random.seed(555) + for y in range(height): + for x in range(width): + pixels[x, y] = int(100 + 80 * (x/width) + 40 * (y/height) + np.random.randint(-5, 5)) + + gray = np.array(img, dtype=np.float64) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for b in payload: + for j in range(7, -1, -1): + bits.append((b >> j) & 1) + + # Simple Haar wavelet transform (1 level) + h = height // 2 + w = width // 2 + LL = np.zeros((h, w)) + LH = np.zeros((h, w)) + HL = np.zeros((h, w)) + HH = np.zeros((h, w)) + + for y in range(h): + for x in range(w): + a = gray[2*y, 2*x] + b_val = gray[2*y, 2*x+1] + c = gray[2*y+1, 2*x] + d = gray[2*y+1, 2*x+1] + LL[y, x] = (a + b_val + c + d) / 4 + LH[y, x] = (a + b_val - c - d) / 4 + HL[y, x] = (a - b_val + c - d) / 4 + HH[y, x] = (a - b_val - c + d) / 4 + + # Embed bits in HH (high-frequency detail) coefficients + bit_idx = 0 + for y in range(h): + for x in range(w): + if bit_idx >= len(bits): + break + if bits[bit_idx] == 1: + HH[y, x] = abs(HH[y, x]) + 5 + else: + HH[y, x] = abs(HH[y, x]) * 0.3 + bit_idx += 1 + if bit_idx >= len(bits): + break + + # Inverse Haar + result = np.zeros((height, width)) + for y in range(h): + for x in range(w): + ll = LL[y, x]; lh = LH[y, x]; hl = HL[y, x]; hh = HH[y, x] + result[2*y, 2*x] = ll + lh + hl + hh + result[2*y, 2*x+1] = ll + lh - hl - hh + result[2*y+1, 2*x] = ll - lh + hl - hh + result[2*y+1, 2*x+1] = ll - lh - hl + hh + + result = np.clip(result, 0, 255).astype(np.uint8) + path = os.path.join(OUTPUT_DIR, 'example_dwt_haar.png') + Image.fromarray(result, 'L').save(path) + print(f" -> {path} ({bit_idx} bits in HH wavelet band)") + return path + + +# ============================================================================= +# 106. Image subsampling (4:2:0 vs 4:4:4 chroma) +# ============================================================================= + +def generate_subsampling(): + """Create a PNG with Plinian divider encoded in chroma subsampling pattern.""" + print(" Generating chroma subsampling steganography...") + import numpy as np + + width, height = 200, 200 + img = Image.new('RGB', (width, height)) + pixels = img.load() + for y in range(height): + for x in range(width): + r = int(140 + 60 * (x / width)) + g = int(120 + 80 * (y / height)) + b = int(100 + 60 * ((x + y) / (width + height))) + pixels[x, y] = (r, g, b) + + msg_bytes = PLINIAN_DIVIDER.encode('utf-8') + length_bytes = struct.pack('>I', len(msg_bytes)) + payload = length_bytes + msg_bytes + bits = [] + for b_val in payload: + for j in range(7, -1, -1): + bits.append((b_val >> j) & 1) + + # Subsampling steg: for each 2x2 pixel block, if bit=1, average the + # chroma (B channel) across the block (simulating 4:2:0 subsampling). + # If bit=0, leave chroma at full resolution (4:4:4). + bit_idx = 0 + for by in range(0, height - 1, 2): + for bx in range(0, width - 1, 2): + if bit_idx >= len(bits): + break + if bits[bit_idx] == 1: + # Average B channel across 2x2 block (4:2:0 simulation) + b_avg = 0 + for dy in range(2): + for dx in range(2): + r, g, b = pixels[bx + dx, by + dy] + b_avg += b + b_avg //= 4 + for dy in range(2): + for dx in range(2): + r, g, _ = pixels[bx + dx, by + dy] + pixels[bx + dx, by + dy] = (r, g, b_avg) + bit_idx += 1 + if bit_idx >= len(bits): + break + + path = os.path.join(OUTPUT_DIR, 'example_subsampling.png') + img.save(path) + print(f" -> {path} ({bit_idx} bits in chroma subsampling)") + return path + + +# ============================================================================= +# 107. Self-extracting archive steganography +# ============================================================================= + +def generate_self_extracting(): + """Create a self-extracting shell script with Plinian divider as embedded payload.""" + print(" Generating self-extracting archive...") + import base64, tarfile, io + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64_secret = base64.b64encode(secret).decode() + + # Create a tar.gz payload with the secret + tar_buf = io.BytesIO() + with tarfile.open(fileobj=tar_buf, mode='w:gz') as tf: + info = tarfile.TarInfo(name='secret.txt') + info.size = len(secret) + tf.addfile(info, io.BytesIO(secret)) + tar_b64 = base64.b64encode(tar_buf.getvalue()).decode() + + script = f'''#!/bin/sh +# Self-extracting archive - ST3GG steganography example +# This script contains hidden data as an embedded base64 payload +echo "Extracting..." +PAYLOAD="{tar_b64}" +echo "$PAYLOAD" | base64 -d | tar xzf - 2>/dev/null +if [ -f secret.txt ]; then + echo "Secret extracted to secret.txt" + cat secret.txt +else + echo "Extraction failed" +fi +# Hidden direct payload (not used by extraction): +# {b64_secret} +# End of self-extracting archive +''' + + path = os.path.join(OUTPUT_DIR, 'example_self_extracting.sh') + with open(path, 'w') as f: + f.write(script) + os.chmod(path, 0o755) + print(f" -> {path}") + return path + + +# ============================================================================= +# 108. Extended attributes (xattr) steganography +# ============================================================================= + +def generate_xattr_steg(): + """Create a file with Plinian divider hidden in filesystem extended attributes.""" + print(" Generating xattr steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + + # Create the carrier file + path = os.path.join(OUTPUT_DIR, 'example_xattr.txt') + with open(path, 'w') as f: + f.write("This file contains hidden data in its filesystem extended attributes.\n") + f.write("Use 'getfattr -d' or 'xattr -l' to view them.\n") + f.write("The actual file content is innocuous.\n") + + # Set extended attributes with the secret + try: + os.setxattr(path, b'user.st3gg.payload', secret) + os.setxattr(path, b'user.st3gg.b64', base64.b64encode(secret)) + os.setxattr(path, b'user.st3gg.hex', secret.hex().encode()) + os.setxattr(path, b'user.st3gg.flag', b'ST3GG{x4ttr_m4st3r}') + print(f" -> {path} (4 xattr attributes set)") + except OSError as e: + # xattr may not be supported on all filesystems + print(f" -> {path} (xattr not supported: {e})") + + return path + + +# ============================================================================= +# 109. TLS certificate field steganography +# ============================================================================= + +def generate_tls_cert_steg(): + """Create a self-signed cert with Plinian divider in certificate fields.""" + print(" Generating TLS certificate steganography...") + import base64 + + secret = PLINIAN_DIVIDER.encode('utf-8') + b64_secret = base64.b64encode(secret).decode() + + # We'll create a PEM-formatted "certificate" with the secret in fields + # Not a real x509 cert (would need cryptography lib), but structurally valid-looking + text = f"""-----BEGIN CERTIFICATE----- +ST3GG Steganography Certificate Example +This is not a real X.509 certificate but demonstrates hiding data in +certificate-like structures. + +Subject: CN={b64_secret} +Issuer: CN=ST3GG CA, O=STEGOSAURUS WRECKS, L={secret.hex()} +Serial: {int.from_bytes(secret[:8], 'big')} +Not Before: Jan 01 00:00:00 2024 GMT +Not After: Dec 31 23:59:59 2099 GMT + +Subject Alternative Names: + DNS: {b64_secret[:30]}.example.com + DNS: {secret.hex()[:30]}.st3gg.local + +Extensions: + X509v3 Subject Key Identifier: {secret.hex()[:40]} + X509v3 Authority Key Identifier: {secret.hex()[40:]} + 1.2.3.4.5.6.7.8.9: {PLINIAN_DIVIDER} + +Payload (base64): {b64_secret} +-----END CERTIFICATE----- +""" + + path = os.path.join(OUTPUT_DIR, 'example_tls_cert.pem') + with open(path, 'w', encoding='utf-8') as f: + f.write(text) + print(f" -> {path}") + return path + + # ============================================================================= # Main # ============================================================================= @@ -4048,6 +6604,71 @@ def main(): files.append(generate_capitalization_encoding()) files.append(generate_silence_interval_wav()) + # Chunk 9: More Unicode & text tricks + files.append(generate_directional_override()) + files.append(generate_hangul_filler()) + files.append(generate_braille_pattern()) + files.append(generate_math_alphanumeric()) + files.append(generate_unicode_normalization()) + files.append(generate_sentence_length()) + files.append(generate_word_choice()) + files.append(generate_misspelling()) + + # Chunk 10: Network & encoding tricks + files.append(generate_ip_ttl_covert()) + files.append(generate_ip_id_covert()) + files.append(generate_tcp_window_covert()) + files.append(generate_tcp_urgent_covert()) + files.append(generate_dns_txt_record()) + files.append(generate_covert_timing()) + files.append(generate_base32_file()) + files.append(generate_morse_code()) + + # Chunk 11: Image techniques + files.append(generate_pvd()) + files.append(generate_histogram_shifting()) + files.append(generate_lsb_multibit()) + files.append(generate_lsb_msb_first()) + files.append(generate_bmp_dib_header()) + files.append(generate_gif_disposal()) + files.append(generate_jpeg_app_segment()) + files.append(generate_color_space()) + files.append(generate_png_gama()) + + # Chunk 12: Document, archive & misc + files.append(generate_pdf_javascript()) + files.append(generate_pdf_incremental()) + files.append(generate_pdf_form_fields()) + files.append(generate_html_events()) + files.append(generate_xml_entities()) + files.append(generate_nested_zip()) + files.append(generate_emoji_skin_tone()) + files.append(generate_punycode()) + + # Chunk 13: Final techniques + files.append(generate_jpeg_restart_markers()) + files.append(generate_matched_pairs_lsb()) + files.append(generate_png_scanline_filter()) + files.append(generate_qr_steg()) + + # Chunk 14: Audio DSP techniques + files.append(generate_echo_hiding()) + files.append(generate_phase_coding()) + files.append(generate_spread_spectrum()) + files.append(generate_quantization_noise()) + + # Chunk 15: Image DSP techniques + files.append(generate_bpcs()) + files.append(generate_jpeg_dct()) + files.append(generate_dft_embedding()) + files.append(generate_dwt_haar()) + files.append(generate_subsampling()) + + # Chunk 16: Misc final techniques + files.append(generate_self_extracting()) + files.append(generate_xattr_steg()) + files.append(generate_tls_cert_steg()) + print() print(f"Generated {len(files)} example files!") print() diff --git a/test_examples.py b/test_examples.py index 325e076..5100464 100644 --- a/test_examples.py +++ b/test_examples.py @@ -8,6 +8,7 @@ import os import sys import struct import json +import wave import traceback from pathlib import Path @@ -2014,6 +2015,519 @@ except Exception as e: print() +# ============================================================================= +# SECTION 11: Full Coverage Tests for All Remaining Example Files +# ============================================================================= +print("-" * 70) +print("SECTION 11: Full Coverage Tests (50 additional example files)") +print("-" * 70) + + +def test_file_exists(filename, desc): + """Basic test: file exists and is non-empty.""" + path = EXAMPLES_DIR / filename + if path.exists() and path.stat().st_size > 0: + record(f"{filename} [exists]", "PASS", f"{desc} ({path.stat().st_size} bytes)") + return True + else: + record(f"{filename} [exists]", "FAIL", "File missing or empty") + return False + + +def test_direct_search(filename, desc): + """Test that the Plinian divider appears directly in the file.""" + path = EXAMPLES_DIR / filename + data = path.read_bytes() + if PLINIAN_DIVIDER.encode('utf-8') in data: + record(f"{filename} [direct]", "PASS", f"Plinian divider found in {desc}") + return True + else: + record(f"{filename} [direct]", "FAIL", f"Plinian divider not found in {desc}") + return False + + +def test_b64_hex_search(filename, desc): + """Test that base64 or hex encoding of divider is detectable.""" + import base64 + path = EXAMPLES_DIR / filename + data = path.read_bytes() + secret = PLINIAN_DIVIDER.encode('utf-8') + found = [] + if base64.b64encode(secret) in data: + found.append("b64") + if secret.hex().encode() in data: + found.append("hex") + if found: + record(f"{filename} [b64/hex]", "PASS", f"{desc}: {'+'.join(found)}") + else: + record(f"{filename} [b64/hex]", "WARN", f"No b64/hex encoding found") + + +def test_image_lsb_decode(filename, desc, bits_per_channel=1, length_size=4): + """Test LSB decode of Plinian divider from image.""" + try: + img = Image.open(EXAMPLES_DIR / filename).convert('RGBA') + pixels = list(img.getdata()) + bits = [] + for r, g, b, a in pixels: + for ch in [r, g, b]: + for bp in range(bits_per_channel): + bits.append((ch >> bp) & 1) + + length = 0 + prefix_bits = length_size * 8 + for i in range(prefix_bits): + length = (length << 1) | bits[i] + + if 0 < length < 500: + msg_bits = bits[prefix_bits:prefix_bits + length * 8] + msg = bytearray() + for i in range(0, len(msg_bits), 8): + v = 0 + for j in range(8): + if i + j < len(msg_bits): + v = (v << 1) | msg_bits[i + j] + msg.append(v) + decoded = msg.decode('utf-8', errors='replace') + if PLINIAN_DIVIDER[:10] in decoded: + record(f"{filename} [LSB decode]", "PASS", f"{desc}") + return + record(f"{filename} [LSB decode]", "WARN", f"Length={length}, partial decode") + except Exception as e: + record(f"{filename} [LSB decode]", "FAIL", str(e)) + + +# --- Unicode & text tricks (Chunk 9) --- + +# Directional override +try: + data = (EXAMPLES_DIR / 'example_directional_override.txt').read_bytes() + text = data.decode('utf-8') + rlo_count = text.count('\u202E') + lro_count = text.count('\u202D') + if rlo_count > 0 and lro_count > 0: + record("example_directional_override.txt [bidi]", "PASS", + f"RLO={rlo_count}, LRO={lro_count} directional chars") + else: + record("example_directional_override.txt [bidi]", "FAIL", "No bidi chars") +except Exception as e: + record("example_directional_override.txt [bidi]", "FAIL", str(e)) + +# Hangul filler +try: + data = (EXAMPLES_DIR / 'example_hangul_filler.txt').read_bytes() + text = data.decode('utf-8') + hf_count = text.count('\u3164') + if hf_count > 0: + record("example_hangul_filler.txt [hangul]", "PASS", f"{hf_count} Hangul fillers") + else: + record("example_hangul_filler.txt [hangul]", "FAIL", "No Hangul fillers") +except Exception as e: + record("example_hangul_filler.txt [hangul]", "FAIL", str(e)) + +# Braille +try: + data = (EXAMPLES_DIR / 'example_braille.txt').read_bytes() + text = data.decode('utf-8') + braille_chars = [c for c in text if 0x2800 <= ord(c) <= 0x28FF] + if len(braille_chars) >= 10: + # Decode Braille back to bytes + decoded = bytes(ord(c) - 0x2800 for c in braille_chars) + if PLINIAN_DIVIDER.encode('utf-8') == decoded: + record("example_braille.txt [decode]", "PASS", "Braille -> bytes -> Plinian divider exact match") + else: + record("example_braille.txt [decode]", "WARN", f"{len(braille_chars)} Braille chars, partial match") + else: + record("example_braille.txt [decode]", "FAIL", f"Only {len(braille_chars)} Braille chars") +except Exception as e: + record("example_braille.txt [decode]", "FAIL", str(e)) + +# Math alphanumeric +try: + data = (EXAMPLES_DIR / 'example_math_alphanumeric.txt').read_bytes() + text = data.decode('utf-8') + math_bold = sum(1 for c in text if 0x1D400 <= ord(c) <= 0x1D433) + normal_alpha = sum(1 for c in text if c.isascii() and c.isalpha()) + if math_bold > 0: + record("example_math_alphanumeric.txt [math]", "PASS", + f"{math_bold} math bold chars, {normal_alpha} normal") + else: + record("example_math_alphanumeric.txt [math]", "FAIL", "No math bold chars") +except Exception as e: + record("example_math_alphanumeric.txt [math]", "FAIL", str(e)) + +# Unicode normalization +try: + import unicodedata + data = (EXAMPLES_DIR / 'example_normalization.txt').read_bytes() + text = data.decode('utf-8') + nfc_count = sum(1 for line in text.split('\n') if line.strip() and + unicodedata.is_normalized('NFC', line.strip())) + nfd_count = sum(1 for line in text.split('\n') if line.strip() and + not unicodedata.is_normalized('NFC', line.strip()) and + unicodedata.is_normalized('NFD', line.strip())) + if nfc_count > 0 or nfd_count > 0: + record("example_normalization.txt [NFC/NFD]", "PASS", + f"NFC={nfc_count}, NFD={nfd_count} lines") + else: + record("example_normalization.txt [NFC/NFD]", "WARN", "Could not distinguish NFC/NFD") +except Exception as e: + record("example_normalization.txt [NFC/NFD]", "FAIL", str(e)) + +# Sentence length, word choice, misspelling — test they exist and contain text +for fname, desc in [ + ('example_sentence_length.txt', 'sentence length encoding'), + ('example_word_choice.txt', 'word choice/synonym steg'), + ('example_misspelling.txt', 'misspelling pattern steg'), +]: + test_file_exists(fname, desc) + +# --- Network & encoding tricks (Chunk 10) --- + +# IP TTL, IP ID, TCP window, TCP urgent +for fname, field_name, offset, size in [ + ('example_ttl_covert.pcap', 'IP TTL', 22, 1), # TTL at IP header byte 8 + ('example_ipid_covert.pcap', 'IP ID', None, None), + ('example_tcp_window.pcap', 'TCP window', None, None), + ('example_tcp_urgent.pcap', 'TCP urgent', None, None), +]: + if test_file_exists(fname, f'{field_name} covert channel'): + # Verify it's a valid PCAP + data = (EXAMPLES_DIR / fname).read_bytes() + if data[:4] in (b'\xa1\xb2\xc3\xd4', b'\xd4\xc3\xb2\xa1'): + record(f"{fname} [pcap valid]", "PASS", f"Valid PCAP with {field_name} encoding") + else: + record(f"{fname} [pcap valid]", "FAIL", "Not valid PCAP") + +# DNS TXT +try: + data = (EXAMPLES_DIR / 'example_dns_txt.pcap').read_bytes() + import base64 as b64mod + b64_secret = b64mod.b64encode(PLINIAN_DIVIDER.encode('utf-8')) + if b64_secret in data: + record("example_dns_txt.pcap [payload]", "PASS", "Base64 divider in DNS TXT record") + else: + record("example_dns_txt.pcap [payload]", "WARN", "Divider not found in raw PCAP") +except Exception as e: + record("example_dns_txt.pcap [payload]", "FAIL", str(e)) + +# Covert timing +test_file_exists('example_covert_timing.pcap', 'covert timing channel') + +# Multi-base encoding +try: + data = (EXAMPLES_DIR / 'example_multibase.txt').read_bytes() + import base64 as b64mod + secret = PLINIAN_DIVIDER.encode('utf-8') + found = [] + if b64mod.b64encode(secret) in data: + found.append('b64') + if b64mod.b32encode(secret) in data: + found.append('b32') + if b64mod.b16encode(secret) in data: + found.append('b16') + if b64mod.b85encode(secret) in data: + found.append('b85') + record("example_multibase.txt [decode]", "PASS" if len(found) >= 3 else "WARN", + f"Found encodings: {', '.join(found)}") +except Exception as e: + record("example_multibase.txt [decode]", "FAIL", str(e)) + +# Morse +test_file_exists('example_morse.txt', 'Morse code encoding') + +# --- Image techniques (Chunk 11) --- + +# PVD +test_file_exists('example_pvd.png', 'Pixel Value Differencing') + +# Histogram shifting +test_file_exists('example_histogram_shift.png', 'histogram shifting') + +# LSB 4-bit (high capacity) +try: + img = Image.open(EXAMPLES_DIR / 'example_lsb_4bit.png').convert('RGBA') + pixels = list(img.getdata()) + # Extract nibbles from lower 4 bits + nibbles = [] + for r, g, b, a in pixels: + for ch in [r, g, b]: + nibbles.append(ch & 0x0F) + # Reconstruct bytes from pairs of nibbles + length = 0 + for i in range(8): # 4 bytes = 8 nibbles for length + length = (length << 4) | nibbles[i] + if 0 < length < 200: + msg = bytearray() + for i in range(8, 8 + length * 2): + if i % 2 == 0 and i + 1 < len(nibbles): + msg.append((nibbles[i] << 4) | nibbles[i + 1]) + decoded = msg.decode('utf-8', errors='replace') + if PLINIAN_DIVIDER[:10] in decoded: + record("example_lsb_4bit.png [decode]", "PASS", "4-bit LSB decoded") + else: + record("example_lsb_4bit.png [decode]", "WARN", f"Length={length}, decoded: {decoded[:20]}") + else: + record("example_lsb_4bit.png [decode]", "WARN", f"Length={length}") +except Exception as e: + record("example_lsb_4bit.png [decode]", "FAIL", str(e)) + +# LSB MSB-first +test_file_exists('example_lsb_msb_first.png', 'LSB MSB-first ordering') + +# BMP DIB header +try: + data = (EXAMPLES_DIR / 'example_bmp_dib.bmp').read_bytes() + if PLINIAN_DIVIDER.encode('utf-8') in data: + record("example_bmp_dib.bmp [trailing]", "PASS", "Plinian divider in BMP trailing data") + else: + record("example_bmp_dib.bmp [trailing]", "FAIL", "Divider not in raw data") +except Exception as e: + record("example_bmp_dib.bmp [trailing]", "FAIL", str(e)) + +# GIF disposal +test_file_exists('example_gif_disposal.gif', 'GIF disposal method encoding') + +# JPEG APP segment +try: + data = (EXAMPLES_DIR / 'example_jpeg_app.jpg').read_bytes() + if b'ST3GG' in data and PLINIAN_DIVIDER.encode('utf-8') in data: + record("example_jpeg_app.jpg [APP segment]", "PASS", "ST3GG APP segment with divider") + elif b'ST3GG' in data: + record("example_jpeg_app.jpg [APP segment]", "WARN", "ST3GG found but divider not in raw") + else: + record("example_jpeg_app.jpg [APP segment]", "FAIL", "No ST3GG marker") +except Exception as e: + record("example_jpeg_app.jpg [APP segment]", "FAIL", str(e)) + +# YCbCr color space +test_file_exists('example_ycbcr.png', 'YCbCr color space LSB') + +# PNG custom chunks +try: + data = (EXAMPLES_DIR / 'example_png_chunks_custom.png').read_bytes() + if b'stEg' in data and PLINIAN_DIVIDER.encode('utf-8') in data: + record("example_png_chunks_custom.png [chunks]", "PASS", "Custom stEg chunk with divider") + else: + record("example_png_chunks_custom.png [chunks]", "FAIL", "Custom chunks not found") +except Exception as e: + record("example_png_chunks_custom.png [chunks]", "FAIL", str(e)) + +# Matched pairs +test_file_exists('example_matched_pairs.png', 'matched pairs LSB') + +# Scanline filter +test_file_exists('example_scanline_filter.png', 'PNG scanline filter abuse') + +# --- Document & archive (Chunk 12) --- + +# PDF JavaScript +try: + data = (EXAMPLES_DIR / 'example_pdf_javascript.pdf').read_bytes() + import base64 as b64mod + b64 = b64mod.b64encode(PLINIAN_DIVIDER.encode('utf-8')) + if b64 in data and b'/JavaScript' in data: + record("example_pdf_javascript.pdf [JS]", "PASS", "JavaScript action with base64 divider") + else: + record("example_pdf_javascript.pdf [JS]", "FAIL", "JS or divider not found") +except Exception as e: + record("example_pdf_javascript.pdf [JS]", "FAIL", str(e)) + +# PDF incremental +test_direct_search('example_pdf_incremental.pdf', 'PDF incremental update') + +# PDF form fields +test_direct_search('example_pdf_forms.pdf', 'PDF form fields') + +# HTML events +try: + data = (EXAMPLES_DIR / 'example_html_events.html').read_bytes() + text = data.decode('utf-8') + has_events = 'onload=' in text and 'onclick=' in text + has_hidden = 'type="hidden"' in text + has_divider = PLINIAN_DIVIDER in text + if has_events and has_hidden and has_divider: + record("example_html_events.html [events]", "PASS", + "Event handlers + hidden fields + divider") + else: + record("example_html_events.html [events]", "WARN", + f"events={has_events}, hidden={has_hidden}, divider={has_divider}") +except Exception as e: + record("example_html_events.html [events]", "FAIL", str(e)) + +# XML entities +try: + data = (EXAMPLES_DIR / 'example_xml_entities.xml').read_bytes() + text = data.decode('utf-8') + has_entity = ' 10: + record("example_emoji_skin_tone.txt [tones]", "PASS", + f"{skin_tones} skin tone modifiers") + else: + record("example_emoji_skin_tone.txt [tones]", "FAIL", + f"Only {skin_tones} modifiers") +except Exception as e: + record("example_emoji_skin_tone.txt [tones]", "FAIL", str(e)) + +# Punycode +test_file_exists('example_punycode.txt', 'Punycode/IDN domains') +test_b64_hex_search('example_punycode.txt', 'Punycode file') + +# QR steg +test_file_exists('example_qr_steg.txt', 'QR code steganography') +test_b64_hex_search('example_qr_steg.txt', 'QR steg file') + +# JPEG restart markers +try: + data = (EXAMPLES_DIR / 'example_jpeg_restart.jpg').read_bytes() + has_com = b'\xFF\xFE' in data # COM marker + has_steg = b'ST3GG' in data + if has_com and has_steg: + record("example_jpeg_restart.jpg [COM]", "PASS", "JPEG COM marker with ST3GG") + else: + record("example_jpeg_restart.jpg [COM]", "WARN", f"COM={has_com}, ST3GG={has_steg}") +except Exception as e: + record("example_jpeg_restart.jpg [COM]", "FAIL", str(e)) + +# PNG polyglot (already tested in section 10, but verify decode) +try: + data = (EXAMPLES_DIR / 'example_polyglot.png.zip').read_bytes() + # Should be valid as both PNG and ZIP + is_png = data[:8] == b'\x89PNG\r\n\x1a\n' + import zipfile, io + try: + zf = zipfile.ZipFile(io.BytesIO(data)) + is_zip = True + zip_names = zf.namelist() + zf.close() + except: + is_zip = False + zip_names = [] + if is_png and is_zip: + record("example_polyglot.png.zip [polyglot]", "PASS", + f"Valid PNG + ZIP ({len(zip_names)} files)") + else: + record("example_polyglot.png.zip [polyglot]", "WARN", + f"PNG={is_png}, ZIP={is_zip}") +except Exception as e: + record("example_polyglot.png.zip [polyglot]", "FAIL", str(e)) + +# --- Audio DSP (Chunk 14) --- + +for fname, desc in [ + ('example_echo_hiding.wav', 'echo hiding'), + ('example_phase_coding.wav', 'phase coding'), + ('example_spread_spectrum.wav', 'spread spectrum DSSS'), + ('example_quantization_noise.wav', 'quantization noise'), +]: + if test_file_exists(fname, desc): + # Verify valid WAV + try: + with wave.open(str(EXAMPLES_DIR / fname)) as w: + record(f"{fname} [wav valid]", "PASS", + f"WAV: {w.getnchannels()}ch, {w.getframerate()}Hz, {w.getnframes()} frames") + except Exception as e: + record(f"{fname} [wav valid]", "FAIL", str(e)) + +# --- Image DSP (Chunk 15) --- + +for fname, desc in [ + ('example_bpcs.png', 'BPCS bit-plane complexity'), + ('example_dct_manual.png', 'DCT coefficient embedding'), + ('example_dft.png', 'DFT magnitude embedding'), + ('example_dwt_haar.png', 'DWT Haar wavelet'), + ('example_subsampling.png', 'chroma subsampling'), +]: + if test_file_exists(fname, desc): + try: + img = Image.open(EXAMPLES_DIR / fname) + record(f"{fname} [image valid]", "PASS", + f"{img.size[0]}x{img.size[1]} {img.mode}") + except Exception as e: + record(f"{fname} [image valid]", "FAIL", str(e)) + +# --- Misc (Chunk 16) --- + +# Self-extracting archive +try: + data = (EXAMPLES_DIR / 'example_self_extracting.sh').read_bytes() + text = data.decode('utf-8') + import base64 as b64mod + b64_secret = b64mod.b64encode(PLINIAN_DIVIDER.encode('utf-8')).decode() + if b64_secret in text and '#!/bin/sh' in text: + record("example_self_extracting.sh [SFX]", "PASS", "Shell SFX with embedded payload") + else: + record("example_self_extracting.sh [SFX]", "FAIL", "Missing shebang or payload") +except Exception as e: + record("example_self_extracting.sh [SFX]", "FAIL", str(e)) + +# Extended attributes +try: + path = EXAMPLES_DIR / 'example_xattr.txt' + if path.exists(): + try: + attrs = os.listxattr(str(path)) + steg_attrs = [a for a in attrs if 'st3gg' in a] + if steg_attrs: + payload = os.getxattr(str(path), b'user.st3gg.payload') + if payload == PLINIAN_DIVIDER.encode('utf-8'): + record("example_xattr.txt [xattr decode]", "PASS", + f"Plinian divider in xattr ({len(steg_attrs)} attrs)") + else: + record("example_xattr.txt [xattr decode]", "WARN", + f"{len(steg_attrs)} attrs but payload mismatch") + else: + record("example_xattr.txt [xattr decode]", "WARN", + "No st3gg xattrs (may not survive git)") + except OSError: + record("example_xattr.txt [xattr decode]", "WARN", + "xattr not supported on this filesystem") +except Exception as e: + record("example_xattr.txt [xattr decode]", "FAIL", str(e)) + +# TLS cert +test_file_exists('example_tls_cert.pem', 'TLS certificate fields') +test_direct_search('example_tls_cert.pem', 'TLS cert') +test_b64_hex_search('example_tls_cert.pem', 'TLS cert') + +print() + # ============================================================================= # SUMMARY # =============================================================================