From f229424df4083f15a04bae8a6acdfcba569e522c Mon Sep 17 00:00:00 2001 From: Aaron Date: Mon, 19 May 2025 14:01:32 -0400 Subject: [PATCH] updates --- build/make.linux64.so.py | 4 +- build/make.mingw64.dll.py | 4 +- build_linux64/libamscimglib4.linux64.a | Bin 12680 -> 567760 bytes build_linux64/libamscimglib4.linux64.so | Bin 14040 -> 545720 bytes build_linux64/objstore/amscimglib4_bitmap.o | Bin 0 -> 8648 bytes build_linux64/objstore/amscimglib4_image.o | Bin 944 -> 5432 bytes build_linux64/objstore/amscimglib4_jpeg.o | Bin 0 -> 5544 bytes build_linux64/objstore/amscimglib4_png.o | Bin 0 -> 3072 bytes .../objstore/amscimglib4_templatetest.o | Bin 1264 -> 1256 bytes build_linux64/objstore/amscimglib4_tests.o | Bin 944 -> 944 bytes build_linux64/objstore/amscimglib4_util.o | Bin 944 -> 1504 bytes build_mingw64/libamscimglib4.mingw64.a | Bin 0 -> 8938 bytes build_mingw64/libamscimglib4.mingw64.dll | Bin 0 -> 43008 bytes .../objstore/ams_template_cppdll_src2.o | Bin 1765 -> 0 bytes .../objstore/ams_template_cppdll_template.o | Bin 1459 -> 0 bytes build_mingw64/objstore/amscimglib4_bitmap.o | Bin 0 -> 5856 bytes build_mingw64/objstore/amscimglib4_image.o | Bin 0 -> 4603 bytes build_mingw64/objstore/amscimglib4_jpeg.o | Bin 0 -> 439 bytes build_mingw64/objstore/amscimglib4_png.o | Bin 0 -> 438 bytes .../objstore/amscimglib4_templatetest.o | Bin 0 -> 840 bytes build_mingw64/objstore/amscimglib4_tests.o | Bin 0 -> 440 bytes build_mingw64/objstore/amscimglib4_util.o | Bin 0 -> 832 bytes build_mingw64/tests.exe | Bin 0 -> 296804 bytes .../README_PrecompiledDependencies.txt | 5 +- dependencies/linux64/include/jconfig.h | 45 + dependencies/linux64/include/jmorecfg.h | 363 ++ dependencies/linux64/include/jpeglib.h | 1096 ++++++ dependencies/linux64/include/png.h | 3358 +++++++++++++++++ dependencies/linux64/include/pngconf.h | 622 +++ dependencies/linux64/include/pnglibconf.h | 233 ++ dependencies/linux64/include/zconf.h | 545 +++ dependencies/linux64/include/zdict.h | 481 +++ dependencies/linux64/include/zlib.h | 1938 ++++++++++ dependencies/linux64/include/zstd.h | 3209 ++++++++++++++++ dependencies/linux64/include/zstd_errors.h | 107 + dependencies/linux64/lib/libjpeg.a | Bin 0 -> 274046 bytes dependencies/linux64/lib/libpng.a | 1 + dependencies/linux64/lib/libpng16.a | Bin 0 -> 405016 bytes dependencies/linux64/lib/libz.a | Bin 0 -> 146716 bytes dependencies/winx64/include/jconfig.h | 45 + dependencies/winx64/include/jmorecfg.h | 363 ++ dependencies/winx64/include/jpeglib.h | 1096 ++++++ dependencies/winx64/include/png.h | 3358 +++++++++++++++++ dependencies/winx64/include/pngconf.h | 622 +++ dependencies/winx64/include/pnglibconf.h | 233 ++ dependencies/winx64/include/zconf.h | 545 +++ dependencies/winx64/include/zdict.h | 481 +++ dependencies/winx64/include/zlib.h | 1938 ++++++++++ dependencies/winx64/include/zstd.h | 3209 ++++++++++++++++ dependencies/winx64/include/zstd_errors.h | 107 + dependencies/winx64/lib/libjpeg.a | Bin 0 -> 240744 bytes dependencies/winx64/lib/libpng.a | 1 + dependencies/winx64/lib/libpng16.a | Bin 0 -> 340448 bytes dependencies/winx64/lib/libz.a | Bin 0 -> 123982 bytes include/amscimglib4/amscimglib4.h | 32 +- include/amscimglib4/amscimglib4_intl.h | 7 + src/amscimglib4/amscimglib4_bitmap.c | 293 ++ src/amscimglib4/amscimglib4_image.c | 320 ++ src/amscimglib4/amscimglib4_jpeg.c | 223 ++ src/amscimglib4/amscimglib4_png.c | 141 + ...atetest.cpp => amscimglib4_templatetest.c} | 0 ...cimglib4_image.cpp => amscimglib4_tests.c} | 0 src/amscimglib4/amscimglib4_tests.cpp | 12 - src/amscimglib4/amscimglib4_util.c | 20 + src/amscimglib4/amscimglib4_util.cpp | 12 - 65 files changed, 25036 insertions(+), 33 deletions(-) create mode 100644 build_linux64/objstore/amscimglib4_bitmap.o create mode 100644 build_linux64/objstore/amscimglib4_jpeg.o create mode 100644 build_linux64/objstore/amscimglib4_png.o create mode 100644 build_mingw64/libamscimglib4.mingw64.a create mode 100644 build_mingw64/libamscimglib4.mingw64.dll delete mode 100644 build_mingw64/objstore/ams_template_cppdll_src2.o delete mode 100644 build_mingw64/objstore/ams_template_cppdll_template.o create mode 100644 build_mingw64/objstore/amscimglib4_bitmap.o create mode 100644 build_mingw64/objstore/amscimglib4_image.o create mode 100644 build_mingw64/objstore/amscimglib4_jpeg.o create mode 100644 build_mingw64/objstore/amscimglib4_png.o create mode 100644 build_mingw64/objstore/amscimglib4_templatetest.o create mode 100644 build_mingw64/objstore/amscimglib4_tests.o create mode 100644 build_mingw64/objstore/amscimglib4_util.o create mode 100644 build_mingw64/tests.exe create mode 100644 dependencies/linux64/include/jconfig.h create mode 100644 dependencies/linux64/include/jmorecfg.h create mode 100644 dependencies/linux64/include/jpeglib.h create mode 100644 dependencies/linux64/include/png.h create mode 100644 dependencies/linux64/include/pngconf.h create mode 100644 dependencies/linux64/include/pnglibconf.h create mode 100644 dependencies/linux64/include/zconf.h create mode 100644 dependencies/linux64/include/zdict.h create mode 100644 dependencies/linux64/include/zlib.h create mode 100644 dependencies/linux64/include/zstd.h create mode 100644 dependencies/linux64/include/zstd_errors.h create mode 100644 dependencies/linux64/lib/libjpeg.a create mode 120000 dependencies/linux64/lib/libpng.a create mode 100644 dependencies/linux64/lib/libpng16.a create mode 100644 dependencies/linux64/lib/libz.a create mode 100644 dependencies/winx64/include/jconfig.h create mode 100644 dependencies/winx64/include/jmorecfg.h create mode 100644 dependencies/winx64/include/jpeglib.h create mode 100644 dependencies/winx64/include/png.h create mode 100644 dependencies/winx64/include/pngconf.h create mode 100644 dependencies/winx64/include/pnglibconf.h create mode 100644 dependencies/winx64/include/zconf.h create mode 100644 dependencies/winx64/include/zdict.h create mode 100644 dependencies/winx64/include/zlib.h create mode 100644 dependencies/winx64/include/zstd.h create mode 100644 dependencies/winx64/include/zstd_errors.h create mode 100644 dependencies/winx64/lib/libjpeg.a create mode 120000 dependencies/winx64/lib/libpng.a create mode 100644 dependencies/winx64/lib/libpng16.a create mode 100644 dependencies/winx64/lib/libz.a create mode 100644 src/amscimglib4/amscimglib4_bitmap.c create mode 100644 src/amscimglib4/amscimglib4_image.c create mode 100644 src/amscimglib4/amscimglib4_jpeg.c create mode 100644 src/amscimglib4/amscimglib4_png.c rename src/amscimglib4/{amscimglib4_templatetest.cpp => amscimglib4_templatetest.c} (100%) rename src/amscimglib4/{amscimglib4_image.cpp => amscimglib4_tests.c} (100%) delete mode 100644 src/amscimglib4/amscimglib4_tests.cpp create mode 100644 src/amscimglib4/amscimglib4_util.c delete mode 100644 src/amscimglib4/amscimglib4_util.cpp diff --git a/build/make.linux64.so.py b/build/make.linux64.so.py index e2acb08..8104754 100644 --- a/build/make.linux64.so.py +++ b/build/make.linux64.so.py @@ -16,8 +16,8 @@ builddir = "./build_linux64" doinstall = True #copies the build_output to the install dir when finished cc = "gcc" #compiler -cflags = "-fPIC -O3 -DEXPORT_TEMPLATEDLL" -libraries = "-l{}".format(libname) +cflags = "-fPIC -O3 -DEXPORT_AMSCIMGLIB4" +libraries = "-l{} -ljpeg -lpng -lz -lm".format(libname) libdirs = "-L{} -L{}/lib -L{}/lib".format(builddir,commondir,depdir) linkerflags = "-shared -Wl,-rpath=. -Wl,--out-implib={}/lib{}.a".format(builddir,libname) srcexts = [".c",".cpp"] diff --git a/build/make.mingw64.dll.py b/build/make.mingw64.dll.py index 8ba1547..cee0f9a 100644 --- a/build/make.mingw64.dll.py +++ b/build/make.mingw64.dll.py @@ -16,8 +16,8 @@ builddir = "./build_mingw64" doinstall = False #copies the build_output to the install dir when finished cc = "x86_64-w64-mingw32-gcc" #compiler -cflags = "-fPIC -O3 -DEXPORT_TEMPLATEDLL" -libraries = "-l{}".format(libname) +cflags = "-fPIC -O3 -DEXPORT_AMSCIMGLIB4" +libraries = "-l{} -ljpeg -lpng -lz -lm".format(libname) libdirs = "-L{} -L{}/lib -L{}/lib".format(builddir,commondir,depdir) linkerflags = "-shared -Wl,-rpath=. -Wl,--out-implib={}/lib{}.a".format(builddir,libname) srcexts = [".c",".cpp"] diff --git a/build_linux64/libamscimglib4.linux64.a b/build_linux64/libamscimglib4.linux64.a index 7a116f9260ab7b547c4258a81099904d2f028bb3..231f44e687b6fed159e5ee8290e61484ec35ce6b 100644 GIT binary patch literal 567760 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 diff --git a/build_linux64/libamscimglib4.linux64.so b/build_linux64/libamscimglib4.linux64.so index e0dc1f6882059cb05b629b22956df1509191d796..68d44d320abdf80fb5044eeca157abbf089be8df 100644 GIT binary patch literal 545720 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

?GU9~F#=8O#CeJgNX7;4^A1DLBdDk8 zYK0B7y|PVDh+Rb!)Gw*(Dr!@HVjM1bOfQ5NRC`S)&)cMwcC|qf!6^lZ4LmI%oF~n8 z!ebo{%ENPSm=>GwZ>jCdH2Z{CM~=veI>jqZSUN#r^n^#eO)7cnHY+-Bc*_SB&KsNc zB$|eI@n^Q8n9fm?!zVmpGtYiR>0-e-il2GGHvM_5!Z~)Uif`hruKgXVx~Zs%QKK|r zZ9$Ixc>v?#0T}P;If zKRZF>BY`}niVUDpUsR`8G0*G+`m<5RKh_^pkGL%?z;pJBcyw%CzhZ^XCfw;83NSib zfhZ}(lNgVNn7T}P0phKnO0(c7SG%cNqj*l2vgq@ozK9dkG* za6x;-Id-p#kN71iir`vBb|EAr(+GV+>Djx4kn+xkc?=qJlxq%q^4@^s>UO`wg956~ z7T=M9KLcgL?ZSyjsX<}Nbs8)yoUm;qEz)3~qwu5`s2YY2h`%kwH}JFwNtIQ{2L@i$ zIrd%H>Wq(a4e5zkswNs{5)aHirG^hwY8p*WYA01(I!C=?cw~<7W(d^nd`Bn~BlZo& zK%LECpqw-NUDbqKGMKBV>2eh}QC}DApb6q!)5Lji^F-4~!WH}mBX#x}+lLz*7@>0% zYL|M_RUkSIG6H|WZW?0>l8<^}5oZqN!O?sRtJH^}xnls$9YPbiXfVT)r$2-W>|yCL zhwK;Zbix?h;Zt5USX{8%IhH7);ayJgrHYG7v{HzyaIEvtA#d!r@Im@ZWGBH?@fuaA zCBUIuo!P1?jp2SW@xAT^gB5Xe-%v=}*@#t>9T8<4V2d%j!A`tu+edxjZWF;5kbt>h zj}t~osqGi+aE?XxBlkg20dME+aEjSOMAD1YLepk{qj8uhtGb==Nd*>TQ$11MW-A8( z3~{Jd#F_I6B|%N%2P6rqjP&7wXsRYF6N+%RXvRB5kU7pA=qs#DPl!dG@Hg%?)y|>! zE}#NYSZcurYjBP=>QhL+t&rhD{6%pGa2GvBg#odg*(bG!42dnmFcA%(P2bGcFC+#7 zSZRkvY0hg0V@?spf;HHy%;Qej1_LGWg0~F-(*#kHS79*cH786+r>HaLrKmF&9Wtkb z22jTZ?ar~?PPjATjQz+71BoC<5ogRss&K}B;EZ_^^pGWcoH2VS$aPcUPiWJ2{(ION z+X=kCJ7b@9!tasr8XtRs^L&Lf=2c+q0naCu*%`ZzV%P5PMG!-|c{t`R zXKWXrDGjyyobdCY_ntErT%P0URYRVSchC$dbAHQ=K0T^1h_k|G9z7^&SsmJD#gE#8jH)Kx{5DPC9>u z{3nEPn5hclpZdDnjPhmc>T9a%Z*#vd;l`Pxi-fI=! zqY5~g_SeMxWATi;{$wyF%IA@ZjwW2<mQd5d@i{H;Ft0k0H4oe0Q^cG1K@Q$2Egli41g~daP3XY zvo$PH4ZP-Os##g2c2mUEw6dt#zM0BwNMOF1`c|6gBfOa^t@*{9sdZ)1O}3n=c%=!< zn{L=mMYr;8P}}Sk51C4TJ*ZMS+%lEwV1A}j!`D=*R*Vw`R~Fr4GXyou+n1@?o|-Ui zF3fIoyDby6d4qim+PulW1#N!Rz6EVI<7uGHPuXul&D+hJ?aZ5sUgT{^o4alHpwb=o zEvU4|zOi|f-Iumq+FX!nxW+DT0kuE0Z$Zs_&0D(W{k#SJTw>eo4j+Y+-a^%=2Tp)Q zu6+xT$g^)j%N0j8Q-8jF3+k80l5au%vvqIFwjVuJth~FHJZJLmd3jLohHa4q2Z0hh zxssar!A{F3@<^~`FM&1S$8Y$I%du)w(ys5w#p`?iw7;*v&H9Up-yHKeDEQ0}5g4mI zC;uQZ81q?3LJU4=#2_ND6cMl{J^M&;`NSLC1Zp8M1n z>g14rqO0ix=c`>GI0aEjLhebxxt^VfOl%xBG!g08IDBX#aWM|{Z zp@~S*t4Eo{PNCH4`lo@SL97Nuhi0D(jDwIx#vY6;()M6vk-G;Yiv&IxS!D6S$Rd@m zMk>d3Wg3eSIXd_flCLZDkuF8nZ~xPReW=Tjh0dbF3OWxH(p#9o#2YwH=~Q z+~LC*-pxhQc86$@RdWXq6|3+LZjn`e2X~8Af(N(5s>6fZVHM+`cA$C z`jRO#va_=(t#u^D%x9}X>+GPnV#1_bU0P?wYgW3|s&#hIXQf;HT4#l9R=U-+bym)1 zrCXg_XGLvRdRqG$eA^{$+YLT}9(MAFJNXypJF}${!bgAfL2iySyGFObEE>C4FV!7R z^>ZIM7q*kq%`Y=*9JsnE#oS$rOU5zY-SvQhC-V35Cxp`QcBybdMLY1;=n;6``u)`K44{IFEdXd&!Tg^a6oF#~6_hm0 z|4;Pe&xKPOKf`YY72SaE7I@$q7XN4Q+ZEVlwH$Z)bavV2*s3}(pObyY?cO71D*Tyu z;QqPba;~D8nYd188xoMXrSr+#q0m|JuS*Wk6tVsp(6y3fBX zNW(MB`CMH)tp0qqj7(+LOs32-zQ&GIFqN2_Q^WjM&VN-pa>lK)>G>w3;ZpY57S!hT zZk1ij`*`ksy)dtr+wY>(nH=#m=G^QBVwcp2Z-W<)rM zzjM>^4gC2WP;y7d677W%zv{z?U%jisuj-EYbvr72cYnlRyf+$pEA&Xk$@4#qob2w3 zh6r-7HMFPV-@W93;4I+%HK1SMW2swMQ8EzC*P-UAsS7Dk?~)wD1J4XEIPIL zo#@F;%6M|C3PnTDoSB^PB`#u#az#k(Zm)WYyI{9k8TIDx=g2LM9Df?Yxje2@-xl@S zR45=Q7v4J2P)F3u z3Ex=6>0I{`e?D%-IrbD~DHPribvm~J zTDiHsf|6wVNIu;Bhnh^0{MBpt6}jYqeap%JX}8{4r4pI&e|GMF$tk|F2xn$ERpE5L z-AdgX#R+$jkKa4DnBU@>qWj3K&z+BoBVM9gJ2$>WZh9*J&Rv2U=B{4S`13j)3C-{W zcW#6odiW1s2zT-Rv`TlV^gfjqod`G3*-Mu9m7wAexAJGb`u-^={IcM|Fn#>@G`ao` z>>e0LV8~pv-KpNgbBZ$IO%&PSRIhhx@J1h~aH=1p$LNFbJ8%zeta*{%>v3v8G>mh) z`UPHJw=EViYW7hiC5-q6^5J$d%j~x+;6PF~IHQaI(evzDlK`K7;v9x`RP@(#<5M<0d z0b01DpXK#k+C#1$OCbYuFC|i>b&&Qbo&Or|c+JD08vfAM6@HVVZ;}2A`Dh#-^s&#g z@Jb3!?fPXa<5C5GO!sRu)dER3nDoYKJMM~&ja9fjMseXnLVPpN9{Z%$qzjDJ}WE^q*Ajw9q1Xx^4=~y z8H8{xd{}Us#xqUAMxRzfQ#D}M5BR_O2RvWN+hl*p=iZ}Zf4hS7Q2sYL#G1=lPt1{N zqdBxaUPrVm{PV|D_!s9#Lc2mwL{7eDeB|UA<04#M6j~oS`TQ}Flc#aiVmGz|iV#g{ zu8YGNb}aX>ot>O;TxD&0JXur_FMc+j921(696heGc>4@gtD77@vU0%-|8)``t>lE# z$^|*^3wAeupr380cVJU3*gW$Rqjv9(=;wv6zs9%F^Od0wP}WD4peRGH%t%fu zuH=~4f}P(jP{OORavi0(qv#`_UfbN3+ zmp90M+Zs#W^L6DqJJ~$K=I&F@RIFpKe*Zo_IVlNAvG{H}L*He+u;t;B^#bWGXkUeI zP&N)bc?yl4<1Bm_GiO@2tXZnsE-NRNY#wHT8=&2!Vf`4(XWFj#>5KxW<=@Oc{%Fyz zc(S_C&&U4p>&pGbbEAH1H}yw-v&!V(vW6G`_9p&DLR%xDO(&a8MJJn3f}sy|qaD4{ z&V_P>YdiTq<)eoxlVgfw?8Z+{7#Azv9!u7Iby%$Ut&{IsV?J-@_B1XKrbBT^eliU6 zWtf|saGHnfa{NThAOV>{PtrpoH}n@Pndu>QB7LL&nxU4Ks~`3{Gt?(M!vx=o zb?kGnbJ~FvPv(|IJ-56vIXX;N07m=(Y}3&T+AS086id)eqHkqrQ!JEy~uIswmkwmq1Q7;WMd&sc?S=(%`k8yu2n%W^5BDZ7udA3L5a8!XNa_Ldvy zg0%64D>-vQ!i*<-L%NM+<#tWWqbWIwzHirmmLuV=KeqU#+#Ij2#PzDeOih*_SUikq z*K9{;QDN)>j+U9T6IEeveu=_FUdNe$=X6WO*G+&(|J-qISE7z0`sWt!Ti&7aHcGPV zeccp3cU;$0P1bUHcBcCJIoXh}%$m*UbJx_cUIEjlJp6MC5}WMLcKg#~e~eeBAYq&? z1txT2&;AbqNDRykyZVUdW$tOVXCyGxHQ&*ECUwored&E`=Dq8+LGRGVoKzU+&nQYR zCroC4V(*dHTt@WC$6urQwYk^3p)KFG_lvpyigMcL`r3t0DCT~Kgqc^_^!_TQRTVhR z-|er;@2V);4B~9;H$}8us_ohe<4H+-Pg`b+H-@a9s|eM6p4e_Ol-u)sy)5UaqZpysiFZldb9FQ2mK6k^fmZ82vYhPCvd&0H>?SO&<^Ah~@uP z3FlZ;kAS4s8EJO2+ztMb{#A4R``bxQ>o;adb3cbXONO1tKTx@nAeRf(aq zckLuv;Z4_0`bCuMKgYBprQ-*QediG6v^~)`&ADk^qW+cD)=6>;|G^E!v5(S^_C zr0g&Cse!?Wczd_!3FN?iVxNq^q-$D{D(T%6_&59+)tp*Q`YTqFTDIbL{{ApHyE>I; zsOh&9LJQSbmB%nJrGGpyKC|P%8H(47({xU8d=W^l1w)z+f9$mh0Bcf00*eRHjC!!?6z?!(3fPhg8 zhFj~rmqFCNMayH4o}4lo7Y#GOXW8N>x1 znwaNItNe1Ee{cDY`t!P)(0z}Adt!UPHSQ z^@m{ki&Bacla_})ClmYGpH;2k9=A|}9#Q!;7nBp~r~V2UC_m_5QE!AgFU>+}#`(Uy zZV}~FmRA$q2XyddiwURdPe&*dH`^n$YT2eG5BM#=hKt(5Hwy$WYB4e3`8rgO1q4~Gv z1;YW(jP)Li&BiW3sDj^7zG0lQPG`n0?=NBEd*(P7r#g|784dbCPUoo?LE@i zKQT_V546BE&Mn?(+SikM);1?%np02Au=FJi76rYV<`GR2KKn<_GhX|1%Y{Q$>&kkT zG`Yn+vCt1VKV6Y^Mi~CirhU49A~RV9_$;z{mZo~`LF*Vb)56ZNBd(9LCIC;c%5n6m zeb_n4vD5V9%`a8<&HA&AZ(memS9u;}z?8odS>u)j*IcmSktK+7{NNk%t;sPE?}|#` z>Q8jY_x>tMPTbv}Z^&ho4}BMo5!j1R3jO&kT@cz16RVu}aOwvjZ0(hFM0vR8PNO_4 zr1^>WutM_?t_ZewI~%=JO3L31YXpi)A}~9_D%8{bigAgh`62&@)!vkGiS2#fl<|Zn zBPP6GP60nwgjH~K;(=yR4%yEGOw~kMjz8^6a5%C@}=GbQW>uQ2U+(RD65|5bJV}_7G5LXzIbwcx$C_X>v(NMg>&b_u~0AZ zRQrij*fckNDXb{;_Sv} zy)&_SI_Jj9K4`cbZPI&mn$D(He`%g`=TahUZ(y(4#<~8~k}1haPlFZHPUF>Z?%dnc z`ZOla(mTkw!K>KhCsb`f3fd^&2YHq8VlsLaj}p-!TGqYnR)nGEiYsmcoTi8?Ug1Hf z;&Ys62aIJNqyE%Oy+j*{Y#57f@_gksU&NPT|89|%Dc!%gf79en|G8y9ENwU<@iB*v zf0oYd`Le#uVE3N*o9v37txtjWb(74Cmr#%N{EeiC=%Ad`_mCdR>HC>i{jV}RXLh8% z50_C^UDk7RP}cUJDSN%j3i;H@l)X=1L|E_44bawUIhVxL&-FzprcMADhnt<2S{@iH z>hZ+lJg!_jM_(4t4>>I^Pk!qrvV(@xA}&uX9zD!itw`jF#aEJclF1@d)MVlOd%u69 zn5e9($Y~kH>*;M8SnTto>eJhHnCEwSw%jq8ENXer{ZCr5=p`V_??`$`WJpzEEgm#J z(*6lq7s0r)6QqL%%B(9Hx|98uCSWo2PID7~UBhEeJ*r93FWzP4SuzrvC~(3AQfy%U zlF^SE;MUE7?v(SRNsx^GzQ2U0KzRplCB!-cDEW;VLVqA2kQ^HRE<2%77oF&v*DzxA zyeW{*)-J8c>AB!J)FT4_{w5~u6g6;-^dGT$TP_#SN<7il!{qrlv8lMUeGEdrUBR6;wJCUqbTVTf=d4m=>o}p z>;=~s28rJyG1=N=V7JrZ{ea`M7)oVM<}d{fI525i|$Aht|2~h9R}fEjzcg;mE{w<;boIh~xk8 zO1UAuit+4yDOAu6&FuWMz}T?*p^lK*GR*u_kd8uE%bZU<&U`Q z(cG*u_%+w?S^qF^mcZdX*C5J}Ng9c6;(;dnsiM$n(M8VwRIb%%I1$5uthAuHl*FDQ z>43Y1hX9Ne0Dd2ThSY>SV#>HhU(<9U4b-TmoLbD7iuzTBsP=}Vu|BG~8nk6IcbRnx z%)LbMK@VV(0OfuIMYqOasgwi&%nQ(_GQVuEuko)V5N^XP*S}HF{i~o{{WRYfrvAC5 zOcZjHGtU`jFWb>FOJF8;m76Z28@C3g6i(-S-;XmpQK3+X##o=&p1K$@8ufoJ zsMIgpWlGN-Tl@M`UxsrJ?i}N~GiGGZZxN{GM!TLDWqi}b4bPME004V_{|HYzc!Kn6 zXe+kbL;USB+o(h}f9eu3juc9|ckuY>4LA=zn&~2@baBPR z_Oc)E(A!Pzsc-Slyv3g?JI}GKs#X}6BMfYwSCGlt9cF$L_^|PBYlM0ESqldGj;&># z+{v+jG#R*AO7}n&0yYQJPas)3=&ve-J6tibY*P5VT^aa?jh8)N9pn@9S4e{4TY+CG znykX(hmDdeK1#?C^RG+Wd6+dlE1@?=gqPT^PuZrAzAofz7oq!XwO-;ylSviOgR8FL z7n2JOGTmSK+I_rD+*aYe?*Ch!A1U&GG}^hd)B6ZFNvCrsZjyy~(#+1EEq-J?uaE87 z?MDi=LKe7CCgEd>KI45iI&s^cJ$imN66*23>qb~D$htb=Xprg8PgeA|>};&}ZxnKh z&vHW@@<(fMue-Gmdz}5N+kie>>F?ls$2-HEf>5F_RG;e96 zd0R_+BW|KUh!}2SX%)=>d+<#>pdz70mrw1PPqKUMr(unFVgIlx^XVx1%YGW(h%4<6 zTQZ;8#1Vd?N( z0t#ExEz9nP2TeWlcm!c(u^hY5!ui|NFFm{=w~kp1#RKt5TfsPoj02Q=qy(O}AVET5~@QT5~|ld&cWZ{gudZ z8T?jsK-=kw2MtHS{(t86AM;Fr+$H%`oG*Gnv%~Prr$+8YaLORjG7Vf)CH%=s`#Sxd z8qc4sw6#jRjXwty*r>Z;K7Ibc<_TPDasN&!=?ed{A_X0tgK)Pp`v6X~h}WsbquFwP z6YNaB(OuRvADN?trM-X+o@fY z^nX#JH?QRuewYNWdY)emVk<(pDO&pV+`Qy;mhgsObF_aJkvJp$i2dPLv)q(!&u2_~ z$mjn>fXL;yXr@k;I4t7tvq>`E5#d^BH?e-Mv=0AiKSl@A!Bib7>tAw9SIZj8n8~fh ztEGQgK}s?@ppOBLGb69#4dQ~!ZLofB*VGLv;V&h2qV)vKBCM)6^}#d-lLB`E1Q%z}wuQCik=7loIy?rVJC*c5^VgM|esbuB|6-Of_J;CFaBlT}%I z2`psS+bh_FI)QG-Ad$N0Dla*b9~fY1Y3f9Vh|RZrX^G{R9U5Yf@FzoI)5j@A)X#XN ztbL^TZzVv(Qz-`}F3=rBuEgp23&yQxvGxLM((h2ZXN+u_3Cw_xWMjGYkp>o%Q;=gO z!F*pASWh@d^W|7C&*6SVZ;QAga-NKXEsl}6MlnbHo5xdx zLoVj_Kd+)x!BdyNp2Ogtp1ks;z1+cx>?!f8O8A-NRZZfj6!Kk4w|G^h$gWr*irn!` zIPj`h2pT!QW!ONaP@&CNPz%BCN;I{(nCDn+MX8L#bA|91a*|`pH9;wRtA0!d0@0yh zB;~C1e(!ehlu*gn`8siDAdeyh-OVK)U&FCfp6-)9ANo!Cg!zYTLE_|WfC>kLh27Ts=$IaG zv$}{;5fHemd^{wu60y?zHqmPHdRcOpjb%D8Xm!hbytd)3L5pOmkbq7D)Tw_d;MM`= zY^h~bX1@P5_-=e*ZJG4nkd79aWI6q`EUs+%el`H7d9lGg7!pTjvuVrh!8tYdE!dK5 zu$FgQqJuM^m;swQg-^k{kEtj10D?i|Im1MSki#-j>Zc}m6A767W6bi+KsR-~I)YqY zi`a~%4_LJ{_3xSd`2If9B5LRnmdQAi$c8O9FY)owSAV(b+tcfRM9)_`3nw!(`S7+_45ltT#IL(ss zO&@>OXRwY8 znyH|(*4BRSZs*=@Ufm=^D*(Xs&RTC>={CYFlowW>w-ecsma+A5`ZrS$wf5`$+4FGkUf)mqqa^V-s7&fzF{odG{|1RsM4Q6Rw85|!7A8eAZcwHPo~Ob{m4F9KC~VTF9fS7 zI|wC{ld}-@QwiHjMTng|d;L*m%kD;~Qo)UDEKac`UpTPf9+_kGpw{3oVi8`uQbG{rt1-9yiwHxC#1$VRAI!ay^^F6c5PVIgoW_|Os;>@2Sfacr6!$JepPQof z?2v)l1Nj=Z3tq_}c&Db}!BxnE-jD#MLph(Q2&_*5r1zCTzNL56nC3(!)^9d;@)V5j z-3`Yk+J|{liYSoABK0l!7!&&B7)GjLYFc8Zyy1F7&Z|n;J2oJJi%8=pn!l(QjMnbU_oxwd{jXH|*N8W{AB@P)^zOS8 zUx{#}VH9g7lq#Q;`TTuwTY$DHrMo1$Z#}B2y3dO&PkR z_GOP}qd)v2SOw(B?5wRXIx&`by8zVB6Y6!yoBE9@$MLzdMS zo#fR`*6)`+TL~%#Qv;}9 z3!s){L0$fdM86^IGEU^JkC$~fj+9&VGu(5p-KfS1^K3`q(h`QuOTi&H}xitI*w|Kk2?uH3aXgc!7x%2$w zcMFn{T^N3BD1VyC;_$0ai1`f&6HD~2GsFKPTAw+g|5(!)dDX?vU!uIIR?-fYf_zP(o+X z%A$6YT6H3+H<=wa1c;i*%dJJ-=F8j&FTXC*#0ziCcX_#^NJPgc@o$7|T5i(o<~aqe zvJZ*e`CsPemOq)FH67;X_O1L-^d562*G)_|Vay&hCu&J2`~u+v-ga2D%AEPWE)gPBtpNuNb*r>0OhT`ft`sdwz+t=OBNMS#1sb zcS?xsHu5hpoDv6+ryHm-*;0;DN$mZ$v!Wp+;W_rawfHv%_OIg%?Rk{hsW|yHVTk_3 zQ7b*wl}M`vzm7ZkoR(Yp9`~=nnBWQv`BAVXv|Y?ztL`-aitkF-cZ3To&6;@XzCBG1 znTet<8QRyTRi@K&J>Qle*v{XEYrQ|Hx=L>;|6Rrfi!6D32h`DD^nGAuXp>0|xxM)k z)&ZVor;5Rwwsf1e)F1B~XsHh&a9ak&7Ih{jRXC%X@n~rzoBb=_;44PU1aqt*b%m)t zDjF8@$RdvQk-hBR(m!*ZCXX%K0N;D(K>5i5YIw8^1yldacikTlzz3E=JwGM+HDJ%A zX_k79)QQ{da@8Kfr>TlXq@`lipRwO3ZcCG+XKRovrd(e#2oLlhZR)QI3x+mFq(%sa z)i?j357`ZkV6}Z{48lvY48lRZ{TFgp`j?sBc9Zi7w};-1hjyWU3V+g#Yfj3IEF(`MOXUu;V~3 z&G;_O;D#VhadYL@4h|a46|+YYZ?GYZ0`<)J0)F~}X)vE*IKFT|9xJ?P+}Zx6ALJSL z#A9F__rLM;lek4Cd4p7fLNev`)?0ts5KLb~ddGZ6m^y3IUBRBzWF*w^FCKuisH97I zbPpGKxv+|}RW2lfIy*z5U9sAKjU_sBFUPl0A3wdGnMLz4AfhYdRt}|(?$yfFX{bVs zt=t--hQ z7JR4*K3vELomdLKT<+bd32J9T6H_{?0}E^wPD=g zcAj*lx#T&sE8*K@22H5&IYUUIX-Vq-0Kq;`fI(D|GcX7`W66rp;N0IKw>F2yxHU=q zR9YF@BdR&gGmxIzkseR7w!D_TFAe=^G2v}guR~Hu`8}|(;xidNWh6SftP4${vT3fe zBUXm6XI2e`2Ljg6R5>~)KeUDZ!*1+9Oq(TiRdbBjV#n+MDwgINa zSQw|-RPA-8!aSb*HxW~|M#S5tF?BPK@#N%X+^IDp7V7Ffrj1t4jhF3ZKP8_|&u@6Q zqc1m-=yqJMxmOC4y5u+2VTjJShT6uE{AGq3_)E*Vn6YYtU!|WCzkFN-s?4W-5wCnw z1TG^+Tb{G}IK<^a4eel6VxXa>uV}587;Q+Oq7%mQ#HAV`^G&UHy~n&nKB-R2ampoa z8FYMo0L*k{>Hvrb^G4ef23=5_CAO)`GkcjcDp^V_%cFKbr8%brL~7`{@O`U0zP=Z^ ze>90!?%Pc5%4BDQsV|YipkzhgtGouHFLfM@mW^$v`4%vq@m|FUif84BKOE_xttrt~ zCRNq}Fam_s@i^c42B-2R?(J1~r{ain8ktzUB(!Xv93%P21~)nFAvgKcWzgMqD%MF* zX=91AN@LFDV(MRMoM{^wT+@^HXYIM*X}TBvfUCteq{e`-m=>eMECrvA+)aIjKb1*q zHfmRP6IhAUbvjvepHqP)X0nCo?L?-93x)_=~hr==R;t+X&rjd=(=WB721YhLO>V#);kF)EHr zEAjDBSC44=cBKBe(8Clw8@y~Ap}O`G%71ui!)y2t7d51hSnRoV)&e}OgN$cj}tO{)<`3U10tw)h`w0jz|qd?+xc3FHNR>Gs72`>WWGEf zpNGAf9p@h3d)k2g$OVnow_^MhLL%@}m^(J9thJ(FK8o+jL$ys4;+IXo;9t{}7{ATH zRZ=?*QX5JKj>DKG-vNJpx*q%#Tp@OGUg|rrc3W3&(J_=u&E`dRxYSee#)yA|4Ei&= z`BWc2;~o86hGRX>)EkUhfi>o^_Gf73U+ImqenBq9#(1ISa{-439{=DwdF-j!Zq%&W$pG+E?c{HpF0CgT&P5hx#H5gY)x!8Id=(EAnPXQt9` z7%|Zs`ZY(yaK)*X5d!(DGTt2Xm$!k2L8}O~?KotgBxjVFwS8n=A>J^5K1OBTxQM@8 zeHAS}5bH8+6Man2+1t5I?>Wua12X0pL_%gNZ}CPDSWPv>_F}L) zr@Iz%u?6brm>&tVtDc5y!x*Y;Fu!R}d`gY^lA(*SuSJ{;QSiwG44EHKM3UzhnsqwYY21kTHMB5P368`_riyujisQ)z zg|4??^u(R55g;uX7xPw$&mvvMa_1>0b*I?ad&2cnQSW0@x2d=1XXwTZ{M3(8u!qXF z?)5?0YRSf?&xuS9jYbBSm}eL#^%@mb_Ds?pDBx{JYnf-viaT>E2PFI{6%#GRf znf&)H6e(L*&wY2=U2dnK_2bhyrW9hLCb~y?Qwog&Le%0fwd>wJUt$mg?p@z_9(w;f zqptxZ!95(<$ni_~fuI>>)w^aWes<_a?D5G8q{T3HFplzX6Px2A{TofvLduVT#EJ{R zBH|zrizaVZ3zmPP4WP?7K4d$`O2S^1E4dRGv>W|j2)ZrV*qKa} zPzQ%Uu2~c<>#hGjyJ!GE!jNZu{e`NpKP%zimC%=!(4wkMy{wK5s+v(~EJFQuwWv=0 zOIw55FPFiY#sy`;S>&Us7aGc&qm5ctG5x7CSm)lK2guC+hMRU`wpRr|mUpFAxSj#@|ud~kTtoSkS%}D&~ z`MqDdFP$Bk>yC!4~_&%n!>E&-P zW(FY1UC!LV9ketwpDz>J+2X690BX=_YETt!j3_$8)eYEez*ui~p5HzSD1LKi4_PEE zxi@@CQ7K~Cez*vA#udR2k}FQJQU&t2x(2Bh`)erp7x(TSC)Q@|5~F?X!cgyY?1=K+ z8*_1vQMP4g{pi+Vyt6<1C%mKKVu}6v_4B4WYp?urD3Z+m+8I*oSzCJZK!`9Wx$@tjd{7LV>tDrx= z2#q&!XJ@kkz{>dF?kN%|+8eL%KC1BcR5b6d$7$0{rPvr{dz_Z<;%d?iJGs(irPpw= zaU~?oLHS8Izb?IgzpjGTb}()z2TWOC{SGq+jC%V}xbBm$a%^G=XTa$s+Yz==6`>v4 zlUC8Zv*9Kg3M?R%hs5qjQzsL+DtFKGu6N@tpu$#dR!sbvH&vL=l8nQW1jbV!GP=cdCB=1}Cxd~nvjA2EvG>+qOM)&j@dlRUp4@jNN=qzPoY*-h3V?B=67>N@a2 zvq@z#SCy<|URqQYNxZt>%(gszmROIgi+eQm-0@m&;>}#% zFzdS#Zw}*Wg61s|e@P2VrK5|$F`8TOT46iZJ2tZ9!^ zfY@A@@0NYs@L@ExwF0a1tB9X5glgmLgCF%gW#<%YJ%=B>BJ(_~o}E3O2#yTy1mx+W zV}!lGKP=UK7tyWMrl$ z^mHN1-E#_`c%sS!e(AKn=IC2we73!>cI6A}P?UNqeu5U%o*KH*EwC z3izcStnE*+gSQ_=q?XW-{i)GNY4dhDuYIWld_G7!ILW_bIRpwJmEf6!D8tZW`%~Lx z^L4G0tmjaZ?gbJ>q7%<9|ABx1MnyVaJ~UpZU7!pe~w$*k|$uB z5fd9N*H^*yGoOU(Z`@>nRl)T$pM>jg94BB^B}}-EnYcNzxF}>KlXF{#=U*wXHwtIJ zrH;RZ5u`BsaOyby24~m_V2)oYeT2-eQw-_*)LpDSN-qsfPaP)xi%f41mH)!Sq$3Uv znV$e{)=&CVx#+bay@|Dp)MflJ`o{Vn2X;9|yr;~LUv2iq>s%Q3N0~(n{I3=My_)8- zozQ8K%PR5lxW;qZDiNF!Be`PiZDh?mzrwq09OOVdXP@Lr&nJ*eEjLp-=54u;t@Z?> ze4XXy4SDVnOds}-TXv^hai5Ff`HXx0HgwXT%^S`{{Ag(Nl322eX$D)`nL>NJmiGxv z!@Vl^t;^f8OFGT<2wwL7gSgnL;v$CYj*|POk>`ov(AlhU}yE8Rm6KQTKv8kILGz&JlRd`fhYS> z;<4JtPu$CT>gl#+6Xk=_-iZy1v&u-QW~{nHuqW;`&iAwZ zdv-Qa{n`G5JGbyV-OufjgM($VQO>F#foyU*9)n$Q3%kZ6{>mE)g*X&Cg>Q_xTSv;W zEq)m4onH35v$9dj{JG-i59Um__K_3!dg}?e@#ml9=9Ghj$jL1V>&LM zR$42{*bNBY&T5_JH$AJmVJJF{O(Su<9UguSH;+)MqK8cU61ccDbt$+6dT6sUewn~DBIv2)QU;S#4K-U2>{PAy_u@Bb zN`WZMk>9iHKWr(P9RslCHp@>Tb*=t*0EjugUmTE^p-0p^&ya}VVjhwB*J!}~=ua7XGu<$eW77J|!1X$Mo?>2r zjO!k#*i3QY&uskO>p2C0-g+>+HUg=c=xG7HonglE3N^Fj&*{q#H0!Q$~; zPuvu7nrG6EOcis<-Sf)IAReOiw;K`ZePVPq6Q1PQKWUFc^60OA06H0$yJrs0%hxW? zIzIBDUUWR!1JTrm><vWPzRc?AED{(s8e2E3~3%Ky(zZXm(n2^chOV;eiSoutK1XlY9{tvPT5 z=fVv{u?R{nP8Gc@vWV=ey6n$pxAI=AY-uJ?HF~wb$Nz?X}lld+oJ3^?8;fzlEfb#T&a7ylEbC z>VGE8ul$)XUmAno+g|vIF&in=>8NZ~6^#F~Om~23D4b3*D?8N=YqTe{imo((?tM1E zUOXVmZ7mN?qO+pjBLZi5{-0BUC`_P$Uitgs3WW9k%-}yGZ_G|+kZJ_kH&svMV~m^Y z=M>{(6@_r#6u;nup4HIz6fgWi%$+zVD9Y}N{(Q75Ww6-3v^|ht?XHQX3XOG5Gy*K& zYHhatCYG6}J2B-QI+)N|+6$GhtKfG3u6`+luVFYQhZDjk%zl_r%)KKI41dl!Ss|ES z#X9xXML151`SJDDJr{#u8nKB6uLSGK<=>|ryyw*nj`v7AnbDZEh{Zj}hv9r@wr2W#=hJqwhK9irsBkaz!Q3RV^Vgpg{(SQ%Ju@d!GYnVm7Uuwu?NNg>U zMdUyqi7-0`-4*w~SL|I^>Uc}%#JwxsaKuQWgkxbg$M*hC41%ILt~;JR zXViR-S0On}a%Z(r)~3EO7qlziLQsLmWbLH0Ak13TardpbcX`vPTqf~-Q4AS-VKaf; zZvE4?g@0jNFBC-F4bj$Q)1O(Z)R4ME!p;qQ2u+MS4mRJ4K!!DJil-9d(}RcvX?!W!!e{#i;Z7B-?;x zq$JxDCa-jE_01X?jC>4oQ_?MCvzT$@FB;wRaGPxAv`qtFEB5YJuSWwboi5w(8rP;v z8Nio|!rYg;Y{QA@4{n|{T|y_&0czGcL9eJw(*2R@h^@O!7pOlR%y&M~6{cyXfHNBG zh{zkWK(@GI?)udHp~-dmRdgw$NgTa7b5L0z273>tBtEO*8~8ICKTTP4HxQ%W@uGbiX3EQYD+D5#Ka`1Q9r_&0+%0C{ym%` z+iuouPlZTPWYvTt0`GWVuQ>s|pc${$p(c@2jeDlX?NZ}ZaN`7A>#bfkNl}2Y*)Uy_+qENM$|Mhpr)o@*ogz7 zg>P{;I{jK&;~sz|Mby0*)UH90hKM#mn`5Us^>NOEMIUUym>c{fhD6`Ce56%qLbL;b zYOPHeEF3`Po+YZElG|v%JVUZQw~=1tI)TUma!nmPke1!z&H*3>Td>Hjara;iR&!h5 z!&o%xzAvr&XU$r{n6;I6(zrHF*l$|+vUSnW`x>aLsdVz1KqQMY^Q7cAH8mbN-M6G{ z{eG+D>~$d1wu9#u zS@Ly6y;}D;Z5zRx>o=YHYa@7Y-iD;aeI@atTO2=H)ZowH5)%T-HzW5TOPyvYCwgRB zKlVDOazoQzWZ|C!Xw1G|Hh^Jerp*JKd)6*D^6<~jL70Z?@0od@uDfWVEdu)o_U}#Q zV=lMs#N1;8hK@`UnhLzt;uaYb0wgo0J?{NdGYH#9T!tY z;QdGg`j=D(i6`Zq)p_V&ya&{=lvjj2KCFfT1oPk7XxGqvfiC8ER3m7jpv6ETQyX(H z**~F;(Rc;G`RA>{#tC#XhpF+OXrOml($W@cmm2R;HOXLeshy0VUTY-FR4b+Wds11A z#-T{A`iQL~nE?%^)H52=b7}%oG=yvPH6pyyL1j%NrE+{2)3MUtB?hjP3^{?4L5$3{ zE4x`o(?*|EdZbl?8!qE=%XYLa&opxZTV=RSdXL;6>LVxIX01Y&n3xm&&9zz*OmunC zPHa^A+sY@5T4MRzz&CoB+WOx-A?1wYjov=RYdN4Ukw9PT&0bp#A6w#_vywNP%aVno zYN3>l;&m)$d%g?-86CxBCLMfBKdhk%&FKDTcU)TU z;^dKe&fxIW;J^%j1gVlY1EJ@~_nv(oGPq+v7nh)dbfN+2q;!yHkw3gEAb%uX3A_N# zQ=bm??yZ6w*P@L?0RM(pQ-x;Nt*IKI|4i=iQb7M_a|h@jp9X-s%j7KU{jU{9Kbbx} z_@`8qYfP7>4&9ukp%lA#b%`8%YA|@e(^%*V93+9A)c$;VyO_(u5pPB5P!3|fmE8K)8{4ev-Nu0 z@6FKbdHM+SdZh<)rPp)ns~!@y=OG+=1raoRcS#**N_`XXqThyd=r^t0t2j%!CskCS z-1{yBYm`xM06+@9-rofDo2GR{g#$fTK_UUI&l{K?dY>`lS#*A&=jRU?5}&Mj!=x}W zL4z4Hv`1F&Dns7~MBfEH4MA!{-)5>Yi{B*IT%1MUI@B>h@9Ga@_bbN$W(HzEK>c78 zipkeVYw+Qo5ow!$#CLKW0Mp|okfso#Fxt|xuyWJlFO}n4|DchYup&0Lq?c`ohG^VW zQ4pUgtM|udT4kcm>-qits;Sj7o4O6O1w$^c_um)I>XgTDL5@Wz3ej z)*bCmZWfKJW5FYuv2MW|akEqeJY+%1L&mc_s)I*e@R$=k)HxK<%>N4hpXC2({-qY{ z=6@Ie2XX4V^lt;Z;$Zz7a}P?g*(S+`3y0Ij0>zH^L>Z&Wn=&Wv-@~YH`aGwjDm1h; zX~x~YV8?4h*MvDD2eX9~^?v&#AGPiw;*kx}vy3y$fLkm4={MWga-j-}rrLlR9^5IGsfy217aHwX;FT6SG`KnRZgqwwEaG8zm z$NB@CrAh;vV}K^fVt$!=Kt#UC+{3l*?pl|<3YsCnN^N0(M-AX5nn`2yPgDsbYCcEL@~I@Wr(HL)_3e^M=n_K&t)D#yyxn22i0M;NlrG zD=-4J^C2}WKWr<8>h%$K>0;Z9%!Gt!`jmPy~uJdB)w64!+y@?%=zN?@rl+a_qC|HBIJum~PE62ZcEISQ_kg$xgN` zd8=VTWF z+o|We=?0XEsS6PN*<((yhm(EB4LDKF+1%rV4mlmW!p6`%l)kSEzqwAL1G}*eO-Exu z1-m)5m20flg{F(tv`8mdAc0`ex8|JS0KblfwmG4fCi~Gtd4?~`v1VdD{CdU-r}ALa z!QNkIDA!mIX#6r10Qi6?A4U^%H($*`{*5>aM1jqy&vc)2w!Jir_5sthkWD+Qr_WP6 z?pZN*(P7cNm!TjVxNmR{<(N%xiH7Y>-*Ws*FE$4@IbhROJ%@Z5xp1b`tPm1itrp-6 zQU(XWKY@SgU1W}XFQ{`B?LDB83PwFn{iJc~ZmDBL7VRSMT{SF2z3DKZ8=!11s3oEY ztMN#8Vof&RdsFi;m#{*?x}acoq+1i^-p7t}J?Lbw=!k;0Pxi)|7kn|tk8p}+Wjiw1 zk~S8l>7c~|tZ*W#5g5zrBBdD&_?0D`u^s6WwvT8tAbUu*Xv3A(i14@hzXBpCj90$gw8z*a_SwhULyZM-uK*#TppXAkewA_b z`9~VcE&B8w5PHca+Q-pu1;Dwn~=LL0D` z2u<}1E_VDMVi)l!*HG*L<8?Kcy&u0a9@)VATHLnPT(&n>`MUMUn&@Tk#w%wB;n9|N z(W|Qi{F1N4xWV%$Yn;#@W0k$t)=$<|=e=pQM2OscARgLG>vw#pN(TIodKQd9EH3z( z);dKTT^&(028v|_9B+Du7QNkFANMEcMg3}q?1|%V$=xT%#{GiBz`=_Rz8ii{GvoXH zCtcCJ*BbAznKJHZaMv@)vN!Mdmmteh!lH3zt(=$Vq1e`2A7Q~a?VD`Xjx=wQ6r zjJKB7448te@(YbWDREiZ{e6Pc(g)+qq>!FttSE!~YOs)r`9>;JaP#;IGb(RvujXcPZ3T)vfUtWP{8!5b3=z#fQ=@Q5ylHbcN%pEr?hvJFJzp z&oNWkx0bCTNNqJ<4edm9cQ#(&x{Sq=NdTN(LD;vAr&V0gagh%W@s_7p6Z_ z#V3*E1G!uMo!V1MiGF5ds_TKLNw2>p^5qBR8b!?-_Md)1pCMmAs%2qgp?6I|I+Ap2 zR(RK7TpuJh--17;ea!$q0euCeg{^5?(wm8-C%N;ig{q^4>eCdXby+DbIo^9jXr&EQ zgH(tjvaOoOl?wfJ)wJCEXIZ2Ew>M$5H@yP7C_;hZt1gaz4_iO= zWnSxceMxGG*WVH;vMbkGiJJ+cqjfZxC>F|5?|ETFmyYSLk&A|l`C@$GQU4>ghzSJ{qayw+@IaSams=I8WIm}kk{0de>0>bT#WMVZ_@)OZJ{sT`#>-#LwQiLX;Ujmo{a zjWdX!sd)39+c=SUg#Kn-V3asDr12ZX&r`hl9@_Xt;u{ptI8L0(Yvky%y~xQ$dBbOZ z<50(4CbUAYNjfkW4vlAe6_M(M&O;I{5z(a})oKe_NY{fRgMUA0W}Blq+{t7;@Ea1+ zAy|wTg&2}W#x7;ddtJdD$d#{I4>l@AtNPu0MEzw%C4E+Q-#&pds#S)-7n^O=-ojwK z8{7Q)GWQ-_N?xl&Sn1mvzrpyKnIQutOou|ze-Hs0&G(W|xl=2ip(U`a3^t;BpY8el zEz-A0FYEd0>B{bfxn8WG_Z2VZ^uC<#zkt4DoJ!Ad)R@={?=tl5tyC4D7uz!~z3obK z&EevaHb5z_sm!kQRk=Gqhp$6bjb*wna&3C)oCSa!qt=2m;6!CJc>4EZ_=hTq|IwVh zFhfD)oK~~;{u%hA4pc*z(N&1Pi0g13v{ZSxLh(lc#P(*$^z^kFZw8YZxtTxY)Czju z563HGp?_D3U&h@Y*hI{IlQV5`_XrzhDSqefsgd_cZnO=< z)!#x17x)t2*Nk(6`sopGN{JnMC0cp%PW)0Ll#-%Xh~Qgx9a6?tr&7lqaAZW0l$kEL zX}KCURkh?x&>k*%#vQ9$)exeenO-dhmxJCldV zZ#>v)-ytQJaldP7E~VI&X0e^Pw=}D9q&JDFi+jcV+|`m8+?wL9gi6yN#UZzHUN!1H zF^*o6vU(eq{q2fu{2xeiyHaW6;S?|24>v9zc#=U+yyQ2`_H|=8s$eFZ2+@6 zimb*5=O*sX&T4GsQJ7`5+|5YlwUpNd!Rts~jSW}g?l7;jj3j-EnHj^DpR}6-hiN~& z?J8oT-sEu9jfDx|HP5P9&leg-eH8>>1;JNg@Fj)2cMaQ%>szAuB*@_F^=_K9QzHlOA&9{XdY#in=St% z8bc~we;PK}UC1!;$V^DvQI=}1$-M6=64bh9((NzG8yBnp!!95@-lB0VZHM+edM76= z2D#@<@c?m8tL4++1MAQf#HcO>mN^VntQRK83NvDBz30w|L)oCJMthP-+nZJuilb)M zV26dV30}EjX*XYv_I900j^$X1Th+0`s8+{5fW|9H%0d+807VDT^&q^A`SZcAkv`Qd zwzpb*%T7EXnhp6gaAfwVVbh(~eXU@F8FIkSWJYaRb@F=zr^b1TU)0u53NuKZ$=)rU zd5qAwb^oVLO{R^dCGmiMT?Ew2RLwf2gDFk*!d)<@JJG#uL>sW7#+#(RsW6l8a1aF9 z(coVs#HE*xM#lDjGu{5GNe+>AcHC`b2Y4Ah&u%dMpCu%c8Vn3A z8onU7S!qpP|EpL#N8nlx>!Q4-H?R$$A5Uld+!kKgb-v~mo&}Y^Hvp~s?;!$!&js+ZqJBZX`=aR9kwuW|ALrT4Q(S7Q_wdLz z^Ily|JzG92u%V4?flH<2ZbO`nx*PkuWA)!DSl?o9BSs_)=xR>fdoBeiXxMoD!v@)D ze!=g|gr~{? z1h>DC83?mwk`&zzLhxIK8RmnM)ApK5Fpm11^+J~Q!c}-gMn9s3#aRAnvt70BQ9>|{ zSU+YbXg(wKkc26@Ao&yxpORw)vBrAgiDu#bLbDzKFrrZD;CGSsmBSF(^tp-WBJxO= z)g)vpqWJUuDQr-zh6O22mu36j@DDBZR*!)5cE#-vaIezDU5Ii!_t`Prw&A!7l**UkQGpfqy-m zDocGLDXc%wFq$AgN;}wkB_AJdJ};*JwDgC?eQl#I;jA z_s^n7QUbIv*N zv1VRiMi_%jvu*v|sVRZ2Rd`l%FXxe2b!a7W$lZ$j`R}JDA`J%H-RQoUTxgCgGgGo) zzw&8K-R{$Ba8@=L5wouOgxPA-*FR~ps{V64lQG%C>EyGD*_^zPLV9{i)MQ-&@awp$5r}8Wc}yy?idr9#VBh#K=dasC=waC5GQqc z6>FXa*yd{~QF?kQ&C zpODw|yrdp)N@<|O8?(jn78dr`jU%qO_aD?Qf@|^(6N@|xrsOhY$vG+v--_o(Hd7E0 za<0StjuJYlqfqI6pp5X|e@LAd`A#j)VuB;|afGzQ-coGG)BG{`L=NUh?yNRPD_6$TijUn9Nr4^~gslJQi=NiYNjZ4uj7kkr7 zDO5Eznx53nK_7e5BWAqO(eyigEfk}$Pt@=e7#{7(@6b(# zKLqtMof4d>^j4}jxOxvU?XMZSxQ%-}@*qu5lV$46^zf9*+VEe< z^gH+{YB!clO(Ih8F#3i&)A)YJT#hEwilc@>q&p)|wb#|%7>>Asm4rEp_^2iVms_(Z z6nZrpA78_$;&IWr;YvR&)y0IDdyk02U`=7Id_=PtonoM~BcK+e#Zz0E>~Us!&#O72 ztR=lUr9JCmx}LA>HEwdu7Hg%S0)RD8iiN!b3_NROz-T6U%Ku}EHBZ-J2?D+A&?c?c zYQaHc1)hj5%fHGK*7B`Q)5EL*`p4|l>CVJDxpSIpEqtxiDrYiG$^*VxM`4H2`Z6CJ zHYnVfivs;UHb83KTi%jZI95}6^Ur5Cj;H>k9lk4TT)wrT$oOM3QeM9}{Z%&REe3t-5)xHGhLOVsatj4g_=)wml;=!YdSB8iZfN zb09;VA}Uf5)fo{DiXcFcu9-6!@gq@&;_8C9A2;)z5&d*3nk>rt<0sFK?oLHFq@vq1 zqJy9x9VCd1yLcqOo0e-RQKgzoXXlk3i3V6N*g(nMgf9}NsCsXDiH6ul;70_`teZ=^ z%{Z96=@3zy2%0m8p!rx;-GoQr1+NNDbpr|Jn^c?h)=7%8%a2~oBuVTx^Q zkeAaC_9)>OJ`NJz^dj(HQ{uw{vIjJ_&aE-+eACB4jwmPq=oATG;r|UK?pEUMBqWNr zQwrOqQnn}$cQxLm|946LxAg=|A18Bq)J)~4htU5b<;;myp|U( zs9Eq1N$5c`>>$JY0!Bq{dX=bTI>S)`RnMuhcPp)ag6#Ds~+|3yv$-x0VID8jkH(8s(UER6kw%InK}ZD*pOoKv^%W zkKx(sn8EGH5q;U#ED-}qc{AxrTGlt0EK%!Xo(n!wy_5XhbO;PMp0|Q{+`N|hToAMQVy~;OTca-wq8z}!hl`rB88sS5eG}Q?2QS@nw7BSC%ou8X_ zs{*EpRg3rbQ@#Q4p2-Hb%5s!Y#&^Tc{et~2Upr0jRj6)XKT}KH2#3tCXPUfzr**NI z!48#SSk~)S`OVnv3kJ#FH-H2~U*a&cKF|*%X&^hXKx^1y%G=4;7J;an3om;jRhote zdH7*eUB8q6E!M?kGQ4!Yq4UjPC$bPGv)(lD1WI3wH;OjTfxN^qMKx?Rg>L0bKxQ$f zOlrnm*%!X5!YPUWjn>7aHY1Q>LrZS7$~nA9kuO=JRB8Y#Y8Aa`mAxrQuL>j`(W8(5 zAt5!Yv5NNASfk(>=|Tp8lbV@BBah@S^3`q??XX6P1#J z!7A&rMxC~b*4kFt`;@O{=&`L)9Z_r4NeYD8%3iic^%3=wRd&=G^{!Qfp;6g(;@4S4 zZ}Pg2|5vS|{nn^$)`%~W9TdToS+>v`@dJF)l>ubbi&jyuHDY`PLDg2-0g5+Cm9c)Xt)d>QY;1%CbF4C2hg2rf2T|mJI;-q$B`Z{_QHQOfcdW8)R@q1352!w? z=qUNuTch?`WiNtqyH)lsIjBG<(fvw3Y7@=C@aFp<|AZI4ZH@R3&HjQjidq+)u!;^^ zWouQ-5zjU&rf3amp48ij``Yy=>ky=(PHV)kB^g*F{!tPDvAfK}O!mn;xdb@1-eQhs zJ&XKnWSa$ugb>2z{}K~z1VRgZn8|@5plQHbFzR{}cl6S0%yZ!@rF860U@Y9i+fkA< zyvNsHLXmx!{#>lWy8Yb(Ys9C?`#PyME7hf64}iR!%GAJhBoyU8{n zVKJp3a)Hb)QUTl)e3X%}@Kr%%BrdqzGEfaR8AyD}KwR*J-Od0q*OO%sn*nH$V30YD zPT!?(m{GD|0G+g8_kTg>NmJmt==>;v_=Vdu(5e2vp|fCkt;sytI%#q8|BcSMXyl~O zxF7?KIsZ2_`Yv4`H}o;kDrw>M{AgVI=aZD&(8g9ey5S9e7JT6!Oz2-COZAOvG5~LX zhaS%ma06l)l^0|ev20Ox(>r2V!@q5^^}*K+v1H21>Rv-H+et_n3%AneN8yzL;n3#` zzHpTR8~_yw2e>4sn95x`!o&tRJ;~@H2ZaVW4FIGG&PD21CjTH(8ix!sC)K+DFQhh2 zRPpB`b!`f%$4zX2RQvxAq>9c#N?bumX}D*$RPGI?fb+N5xk$Y*S*Qlc>^cV-c*er+ zQkr~2x-zn&T0mF*B_RuP6DDsTez$kku~{vf)&8#zn$^DSK-evw z$I5rizJc|jOl#QQe^&b>GRX;6_=TKVM{PLqMBp10JXqNdUP$W5N2+o-ZcpHZQ?3_h zvhKtJYb_R7e>HCDzoeI#8SYWg69oEKY_v0$_|lHDuz!k26fGrZHJOj%-bC!hFj|la z12#hYnlrRuEtmuZ9uY7QN(z(o`kS5jnTs)@d{Ucgd^lBntayWus9*B6^0x@8W7}+H z^Wy}K_e(B|mhWcczQ&Jy#xCFK%-{F}A=7a(ul#kt>6wJ{I3u)>)RND;FWeO@Ag!-`fj?>&VP~T z)wdFITVG9nFBNP!ZRhW_^VihmzdN@kf2-B{J66i>ou}P9OWZrF+&gExcP>tqx;nr> z*z_hGza>&i{o*=?Eu&U+jVKefe^;E05|NsRZNF+*w0tvlEvYGggT@@fjcF78l1s`D z*3N%VjqZ>Aboq{G`D=a&O)KM997Lp=b^cB@XsqLOo)ffYP5CPm{i4g9juW)xZl~kp zJUZ|j(Q<6FPvwQSV`E*u!XM55P9@eVam(tyR zdFAWvwogqopP|DwZL@~f_$AqPd8abj9j9_r>Fs6jD0h&MWTEl6dmEKyx7kDd@R;&L z9Vc=-PUe0=X_oEQFVPI{HanY_;d;sS!3zP0!N|%FbKQDeIZQ1xk z+p7!Lcyl-|(q3wN4SQ?6x`U`+z3QVi-pmux{10t!=4sANX5}BZJ!e-m|FzoC$^5Qp z{@eL)Tdf@A?FXqeKGzQCT2OYl^Wk8(Za6G&!-%QdLcPlay>>9R2DQN>Q5k83rpGfX zqn^K=fKoW6H{!l)&OdY7XIsXQ*6@sb4{1mru?mOZU&C&K*^2P)HlrFbqi|Fsp*$~b z;2BFKn|c4jJl@Y5=*58G(2bAc+i^RSvg8q-EP14;GXKX|e|~8li=$bS7At%U67rX@ zpPx0UN}oIR$+BpcAzYGuX{*v+H(S|u==BNFGJ^7nBi76_q@LX)8TN=ZTkF=D>k;7h z7&*L*CEu(Lvd!F}R44S)P7Df+1N)9xU*dn(f)eFX=7T~{Wv?Ol0S#Ei^e9s&nO@aP zuYhgkYZryQsrdIvyhfor_?gW*WY%7SXT77J&19LmR{2WU!LZ7b~iuZ%NtVpdO_&a&mN_iEM!OA_ndG8#Ni_>5vq{s!TtXUbxVD;nqUcoK3v!sP)1fpS51N@hf6Bc#aO!97&gz#|yW9o1Yt} zM)O(2zcBYkerDXNb~>H^dNe;7)$eYc3~aVq%OF$=`N3)Zl<22QKPvbKi~0F=3YA|Q zeEEI@Jd*NQHn`s_6C|90Krq2pKQzUr+{GNbV)JW#9-q|*`Dr*on|D$9!kMSzp-x^* zmq7r9)hvU0Oy65G_tTW!qLbT|TT6~-W?lu+a3Zm@XPhJ5BWwVkY}lpMfAm z2>?$~f~W@KQCHV;%r$fxvIwYSpQrKl!&nez)A{R>dJ!Sk zo3GHBlmLauHFBz7_2-b!Bx}{Rqq3HLASoywdOH?+TQ(I>hD5w>vTN&xqd$Mw8OZ`$v+&=!8e+{D}P7+sr)@w>jh$SiS|ND3gkth zocq6saETS-h~iaeb3}2tOpds%@?7~Xy&ii$5Bk);>r*_jLNE-^n_+k(d-k)jd`awW zj=MY0;*LKhv5xs+ugbm5EIwjL0BnVZ6K8T7_cCzqx{x3Hvy7+t8f3Rk#W59&l^c1# z>(>1BykAYg%4=wc{n7km`7a?6^x>bCMKQtStKfV*e-sS-cP@mPKC6Lb_^XjnwDg+a ze%Y0xz>W8DYZgg<0GCDazVhx82j0X0z)p%ge`@RZ)z0s0`U*+w;c^?kjhPU1-zig< z`Rz|*H4_h=tet=6u4fg#?~f&-%Y%f)=l7qyOa=7kT%)ia!kiGEb)OrOMYB2OT-V$( zEO_1Ibo3X9>=gl_>d|qc00QR!RDpZXX?NjlcS4Cfy$Y{et-2pVR#p;S;(lOU8mqqn zOS&mKBwiY;|KZ-+`X3&(-M4D%r=N(`Phh?F66axJ_0xCR`TJ|~_s2u)Yx1|*`RlC~ zi|%I7su?g?y^t1B!_?0INR_5aswziWnH+{WII{?vV4&`Y;`2XJ-I)%8x>HZWjs$hz zsk%F=`yofO&Es?t;yadW9Uosb-VeW;l~tM*EUr3wE{0f3O4>flBOGphm%U~Zn@8@#tvY;4$^8R9>z_a)$*^Tj#>Y7>h|{$fC~|eDqMCO<`6ci7*1pH7^}!hSL$l zZMU4ssx&!qU|!N8s;~|g6iAq^M=KNam{i1u3rmEF# zW90Nnufk@uuo>HC87!}(2hwS{5c7BJ|A~FFPg8|5Zg~4n7 zu>hHkLMDZY_`-uwa0;1|1IU=gyFuo`3xt8)#uc&wGIm=v2UzItK~nrH3|Z>Zbci`j zHTQ@k4sZm8M%DT20e#z9bT|kxtM^yIdiuQaZK32T=(y)|oVv)+1*Yj0ZJGm%rla7a zA!}ter(;E>s8P@b(Z4xnpjoRP&Q?_%FEqZbC<`=^KSb}|qk-*@v1oHwJVP4qQJM3& zE5vZm>pvmo%q4AURE7hCIkcnqfIvyKz;phif)w+o6-#19qCxt?rI9cBtGpY9l;oab z*_V>kaCR6V*_yJ-kGNwam0PVzJEHCmPB~24jxTmC>^OzWm2Iu_D9Mt-!5GL~~zl*U_No46duT|ySUFJX%d9XR! znatA&8w9^X?eDlF=!_O6G5z6mk&kvy_wRS6d#i&U`V?m~mdj?FLk}@`D^_9nb68`0 z_qCB8za99Qugb=CgO!jUa=aB{k-Og6%&HG>0Di&k$p2&THDFsm>2NCd$hm=?m$X`b zX%e5f)Vlv?2KFHsSz`CWp!@~l5c+I%+H?4y*N&@$@tAGGO%Y0Bl^soQidm969@@xB z<;nPouv)$W7;Dvtw!${9rts@P={4*A%S_0ZVpld7`(X;s%|8~clL!N6hRj&2r2gJ3)<=~ZmYY5pkf7a1@_exTijOnDS|$&pvwpv-d6YNwz|&{ zRHC2@2?C3fwz^Bz-nRE2>S{E7oKIeFJygQD*TKs)eORlY2y2JuzPQyxHRbv3uA~?7>{_ z?-A&u?q+|<84lPw_|+T+9du&h9jn{`0p@Ms9&VB(`Y*KZ|7X4I9~pNyU>`YVW5@n5 z6q};IJoa&B>KLpMgA<)>x?q1~&0{xH+c|hsuxRAIzk6LMClqI^|^4$4>S@${abbXc-eEr5gk` zG>{e*vXe8AHdjtsT5^N5IYC-MG8jxALfY^^+M$Vl?u?SI-2@xBf)u1>0(5c*(&i`n z!&b|0gS5E;TtN!bs%k?9(q540&$U{X1!;!_X$2`rTR_^O18IjR`nj&@J3-o^L0Uly z(lS~cwMx)pR-&Klm&${*c|lr13es|Iy^}wXc0{6|wf`A2#0fTa8*JZ^q#ZVp_M$|8 zzSXihNINV@D@Xy{BGO(kkakp}f0)(s&q3M?g0zAZq(zu<3I@_%lIXvn@m>>T$`_O% zT`_^f2hx2i(O=N`9TQ~I2||$W(*#~PknS^y{^5<6n;?@;5Q20iTpMbohvoQ72Pd2w zcS~((^E5wPhfK~=ZB5AS^b4x_u={PewI2j@R}X-XJ&_3LawqyK~2U}1wZ@;$>+L_qz$K5 zcTlgP<|B~Z4&r6m7}!egi2C!+Ji`FNx$}2(dWV{Nu|dgYj#4C4W&1_fgm6(5^BcdN z*U<;S#_B$rVQA`I%kvOt8!NXrF$2#2VYVN>hT`%lt}O@QR+hPXpFk^}2{m0V*%3!t zT`ZE<>k`|%Xyr3OOIxsybW5|%BL4S0m8RA~6SSUTHc%6sNS;WoYurulq2A?#{TsAz z%>7tR9CKeyEnHA9Ju3Oksh=2*dzIFz=dybMtP_XkM4;`SR#5<|G~ksu6}GfeYHQjW^ksR1`|g%I-V9VXYb>p@ox$>k=R5-QI1kenid< zZu6aNZu1T8aLP}HUJrJl$#v%@%FDxmdTDty2WiplpygCWYASyhw66}DoFfTp(Oqo& zQ@OMEn0z$Vc%CXDXH)deI*whQ>Y0hyEq85&25MXouM8kQnEOeHZuWR{N8?wCnyc5o zt!M4eU%L;9eeA!wN!#6Hqunv+`Qhvs zuIiXh6P-W^B)u+Y^8wb(lJxG5`z7BtF1vn0D*RymWKB)p>sHGjO=3xU@^>0@PX>}+ zCjBf34`F)ylk(olK;FYmo8&zlf(7#4#RKvlospLJW@N~FCODAyW@N~FCODAyW@N~F zCODAyW@N~FCODAyW@N~FCODAyW@N~FCODAyW@N~FCb*f7=Bnfjd5>VpdowcRJq01} z&B&1V6okAtBSYR(5c1xP40%sMml2d9?SK~csdKB@-eugfA^7cgCZJ1!^T#aplCcql~W;7K>R z;cs-p%`E;j=sBm9Fn+B<+!3NMZy`Hz|0;zxjJ@^P(k~`GvZT*N`MDwX9&nh{H&3pp zP{|_z<9g!@K`A=#Z`8J&3w)}TH067frc5xo|w`c&@ za3PiAICjGH^R;N@hfQChS`Sby6=F(Dm$dY6Y1*?-$07Gl@VT|?VBV+y(N_a?sHru0EmeS-pR+^J@O^5NB1V zxbePuliFIo-9y9#p5o}KLnh6<%KLr+hnR{DxRHQ+G2QCPtHEFeAugm~3P@fx$hQc$ zIrSNYXYe!o+Gn-xVk#6U12}So-dIcY{=&gHt(K(~&}U&xw&1ExvqvsPZpjkq1n7u4!v+-49D=9!qg(OK4!oEyS? z&*0|%nm;h9&=Axe+=3qNrv!vUZT6WdUU+>hCyciEL}5mFpPkeAJTe1H z^i|<8Z8k#Oo~GZ@4W~JT%@*wUXy$X|l}!0g#{#E2^>>c*UQl}=QS3F3El{MpSLj^2l?fK z@GxscSX(yutlZeNpPjR>PWB5bqLtv^c#rxcu{d&c2@cgP#*28*#af8fP~%YEhhSl3({u9E620=;NRQPz;_TKB=zR>9PdM_(-GsnHP~E5-B$@_mpRAeha%R>_o^2z!#;wo!MrqF zBk#8jb3%t5{Me!cYsU%X`lgrC*ws|-X!?%~s>slGrR@KZPB9pAUt?_Afy@Y5ESb)n zF%9ZRa;YAaM`GSER9&7nmGYPp*kRsGhZKWM3;m{gjzIj*G5V0Y{Wt!dTyQcGP>wuz+n2Cx^W&#%xUHFcYTeAvnHj zrjS9;WU^-UrdJ`81lnGlrsY0CvAUT&aVqD|B?&wcK2S@SSgq=S#69ECiQLQgzhO7$nNL9$NG(`aN}rb$={$Z z!v(3?>SwLVmK|!)Wh&M2A0Ba#=V1GG@g+Rk=Q#KwI+VPICeb?4n=%gnXUntrOx3n^ zB=4#6g$<2{zQ(-JP+Du@x6x|NCROj4f$>CLa;(<>1iR#Vep30F;Ypp_cr~sZIYuko z{oE1A8>)iwQkNc&LE(+_)Xc4qkuYcg0Z2Z|C$2SI(?F^FVSqEsoJM|Ipn86LoPxP) zfjR}_oA}2Nc#xG$ys!8hGvWtZo0Lx&H_Tu(=#SRE?wKrF|JgpK<^S&E&7Sd};DU?v zn0qF*3@c77ZD3&j(wy3^>9!tjx1ui@a>N&f%}7OVourwzzapV|C3PvxUB{BC&+&>8!G>WGBf@pu;zTlp_7(OU zuRj#p81wHp;q@owaRe6*9nf2iyQ8M^^?Sc%`wi@re#30-n5j)(jmkUNjg{h}I!kM2 zcZ1D-$+8Yr*MPwDXSA|=@w;5og`el~ZQ;*I@e^D2v6`mo7hsCO-t!%9?miN!;hSAnG$yN{vzFs7T&Cj)mYutJ+OP4(cTT}%=qkN(=q%}pE3Iqk|fn^tDb zRDr&k{TS{p0UtPWMce}s2Z6S((0f4G;mGI*OjL92@6cmdT~*8bfi4XA2ubJlxhp1n z(Kk_+k9~tF69-<*Pf|llbJB?g)`(W>Xvxr z&Zhqiuv+uU`Rj=Qvk4UvBX{Ae67dox1pQnDBa&8Z>cKnEB)hVjzZv0l*5r@EAY1 zK$j0E*+|w~Z8n+hlC)|(JWmzpBo7eP$ zU+|cFnhDHG!E0O!sHY4Al?&%{QbtWlNtiG28nOajsoeNpK=&k!8fT{5JorDzt_^XU z?2?B#ATrro{B8q#oMT8c%+dq z>(u^2+n>h7_Vuz$uu!SrC|BQHDcG?)KWS5L(2wG$CtXS8A$Lcp9Sa7`ELd-JAmf#H zTWzBS*`%4oKFq}I^CmhDxKtuGRVL<~H&N$cB6dh7hR>VGA4~+FnV5UtMCK?^fD?Nc z6Nj8P(Vq=MVl!gm(DNqRpPErlx|7&pn3#9oL~>!As$D6G^3R*7WiU~MM8nRTNEa2R zAeE8mg7YSlf6i2*(IhH3Zz3)7Qi&=^H2l1Yo*qnuE^p$6=Sj3^X$s0X5?JR;Fg2Bc zdxO`rN8VK(tHht;Sde5bc%BTF`zvYnj&C>lj&DysA#;&|8>I&$djHk%>A{3|GD21i z#v9|E%x|p^Gr!+p3}t@*@|^G6&-wn=Ip2Bbd~XHOOn5&(=X?G+-(%1D?uTz==HJBk zn0EXat*hf^601d5d{4uHx~wW-3Wfn$4;2ua?19M`Ii$DyEOwu=-@1m`Lk1Q;yX4aa~v$jga!TR&~ zb~&lL78#6rmskWP|IUyT!s1%~H5-0vexZKxjDG{}^5F5wEiWPvZi{~JMI-!r9 zoNLKVs>xo->qM4L_C~+ndaP-x=JOKV@vRBXbuWmbxG7oscR+d=5ed}bKjx)0&vwm( zpvfOo3o2^0UIhig@G~8_YR9OWHEV6^+ zfv-lT2k~jWDD-4{qMe~mClrpPnlgDw5U*yL>O}@x0QH7Cx8)f5wTPfu%XBx46WVI@ z9N6DY!&2)oBQ<-XAJ0o6%x$(O!%?imFyKd`M0*o1$jXkoctP(>A-x_?Zr|W=-k4Aa z3Fo@g`arr+c`COyJ!LNFPRbtOECS6sOWx2PP+337g>U|3ecP}BC6 zYnrwJxj?&@tQzuCVp&Z*e&x;h2x!%PW)MzUhFGRM4e;g8-8D58G4CpsUJ#k;UHefT zSAt+XbR1FgQ**iBX?;-seb%a>lpYTquyewk2&DXQP8Nc62NLqerq?75MiBsum;N?+ zo9TN)e?j{``%_vCr%+~o&)@`3;1J94zZJ$s0K(Y5k8o8O$Wq~$Ys7x-cQ6)Nq<`xL zV)fa@l@bj=)b__Z-s|+vMQ4ReF2X63N;HxTB$O98qegWZn66IrtswY@cmpa7Su5RylBYDzm$Krn-3~cTB_aLiCE+Ag*H;u z&4f~i{fopd_UgVzqnNP)(MH{Qqx-jT4`?6_N8NV_v@Bt`^{1!u!_#M{p%PIi#aFbUlSUW+ShR&zY^7rtL@Ry zhw;$II&oXrm>*l#uHt)ts!EOXo;FRud|8SHnqM{#^JJZuPmgJW3hJ(Eb0_`0GRIw1 zN+b3x#Stf6*^u2>4L5W$xS=6swY=#CeB--Lg*UC*b;d$$WTlU8qhYn_% z)2zS}DmCFbX0i5EZJ@S7J3b$v(-=>oPq*a+dI&Nnm2JY;Q42;CQ`Rx+9l0cJyT< zvn|3GYsaY^G|>QmB-!3 zBhAd#gX=%59NUgg?2~si9hLllGso&;-rqh+8yoBH*_shs!Xbh5t`JqsG$aCT=>rTT zK6`hYMGWH4-K-I~yTb9Gix@Qcn4^%=fUhAQSJShsZt21TvkGz0YqM{hQ@#n-UKL_% zd3L0({3Lbu3t};s{krQpgt0M>JRW1r$kV=G6r)Ye{g^t|SP}Q1tpM-1Z`?h_{a@=W zW8DA8ZUi4q9ffgx*-E~n;TjzO*9WCU@&B$cm&dZsIuvF!d$8F0Y0T}UsP35VwOAAu z)@3;856At7nrV}`|9}Lq_?3nC4vD*k93jC9_X_9Ay1aX7fx5hE4hP0j313-PXaY!a zTQ(b<1QeTqVghnFM)_5zvaWQA@{|$+_^M0dm5a)_9MN4=Mo4aL=;ip8iz@C_Km`Fq zYC~NFj57h_2pAgYz|EC))dp-e0UVz*KpX?aAtYZwDi_t6fI0$(1wdvRATtTLARc-L zAae|mIRq4>fXp*_<`FVHz@)+CX&~Uj0LUT}u!sOlM}Mwdq4v2KZM}IRnE4cZu6#!G z%DorFUGqZt2m|mLO&KOwF9eSi*ve-lSuas)y%2m67JE+RiYHAl!1Y3KQGn+&PnmF% z>xJ-9rpnJeoetIu!515xpOJWA%G3+NmjtWY$`$Q=bA7vOUWh0rGO{JC0MCRgN$)KRJv&XBvdQj4wD8<=gi{!YsigwC{D7cuQJ`W7)}7DL!v z5I;LIFY(Ta#O~8ND>DbNTC4^ZFEMF|1H<>nuF)7^h($QDaLb5lSjdQG5Qy_^H_wMh zm?7amIHKANyOt5n!pVPbM7y5e#SFa)EF3-7$POgi;^3;n`tT12dwDx-G0P z>^_69A^Hk)DCbL=S##6TCM#A88CelWGqUPD&!;o9=BJ}g)?w){Q|bljFH>p(2%nX8 zcskl-y)gY{vRdgcleLhnBU2%!t|QXXCTlt>sOv@PIFq%AtZA%F)=}wbll9{Cmnrp< z^q0w6OxA43DivsQe=42A_V4)P_w6IY$G zR&9uNd^jYr>vOd^Rh%?lT{USg){C~pV~%H5x81|G;NGTx*O)9s@5ZlQi(w87QmeHI zDFEp?^9JldKDJhEF)}RnniAl87Nasyb~a-Wysg#YNlepi69nCAod%TN$1@Z{DgW=+ zA?l?q$T*&}Y_Ir}<2@uDLEQU$bCxf4(@flp)j8f>%#LB(ES%+@s@zD|1jM>Gdh)^k!Cj)s8Z^@hJ+}Nu7ulezC50 z^tjmTAuaPXFBQm7{qdaVf`W-A6g@t4S+k|0~NQTri_0j7`-Pz$p0U7&BCd8ubf>RFt67U`M%Z+_;kuvSw#*PmFcIn4-K z*6PMcK|BWm%5KYcei~;&L3qNc0*PkY_~C$`*Ac)0p72n@itO@NCivH0o>jii)~X=X z5$XSJS{qQ#fD-Ly!hECj^sj~f>vf#sn@luz&e&xgr#J|_o{0xl=xB|wNg-5nt|U8D9JqWZJYvGL zJNj~n`WuCQNW#%M9sSwljn{K6(+5N1Ib%EABtC0c_A@k!CeCHMv-Q{XI9E7vhtyAL zVI37+gym(V*?i27unlQ0af0*od`@<|)Oe0uB`k{5%_bGIWP^bx_2<0gEC3Fy2UDbA zy31OPLNun;Q7AB@H!Yhc1cz(2M9GZYfR6LjzM>_C(nE9I=^S87k$-EBX7FWeHBvKJ z=?X*4OsiS;Gf2EyMuDfW3Ro_7s?f8j%n&m}Fe^C`Fj_Z@G_i_W0D+&yA25!Xl=tju zMBrerGT51xPyYqE6-RQi{!_&4_$y8uk@@N8^l+!w;d6gPv%-{a(Z@MxE1M-%>+`PQ zvq0+%KJN}bcco(Q2|i0wv5SMx?o{l(!6!!pP2MHJXFIVee(b*NKDeTaXeY5heEe;9 zNto-kSnDJ{46$fToGNX4)8)9`t(&Z%^6j>wEn-?x#m*PpWcVP9WH#ucbF8oMTm z@ybNCpOP=@0<4Wca|BP53gQ5_X{`h651b)dS zDA8eHqaHY!LxVB%NbT&^V40BJc!g|`#=-hpMN6M7C&>B!Cv!Hf_gclIWAKFPL_4QE zM^|gRo@w%Hm;&_Nm&>J)Y$4QTHD0B9II2hQ-=zB8Y_3y@(Z~+TD^xPu>)@8&=@0Z# zFbub=_umQc`7;Q=cl8Q8bFVI5KLjnMHC!@DC)i*$R7ikQY;u`3T+ z{zkP;JW z;J=gtUo^mfQt(Hd2YzjRhr8dM7naJjn*ymCdXly3g8Cg&j)r!!pdJ#d@4<=BXLK6) z!5;~X7f!}QL3M8Z-^%;WdCH5r4i$<=Ua^)R)tF*Kh8?9|On&jjxQp)ovMHmBIP86P zF8Id%s+R#piT2bOu ze{@i*_fsX(fvA>xDqp>~IJuTE@kPp`U#ctjSP%U>L30!1vKqNZ*L06l80GNM^6LnX z*S{wCST)y%P*w@{MW#08pMYJG%rmfCzzroz3jV9sgNGRO8Sra#&+yw+rAUMoMV*7s zf*T$Xbs{+umD{T9te?rOZ72@hj(+fU0td;xlF8ZcY$dRSBawk4haG0Vc z-9gN6iVb#QFaZ{xkUDDoABJM}hvT94+WPfT7Z0rqzP^Bda{OpVp1V2mK58~Bp-@!I z?S{J-s?WtX1w90AG_k3YUk$lrX-A&UXP9Ba#jZ$452tf5>hkN@nh+o6bQ#UhhRgrQ z+`GU>Rh@hPnPdV1gF9%@SW!cbO1zSaN)&7cCNLudVgbeC9ZS7SVFFkY5+@fAH-hy8CcX$Q5o9Ce$v9v8e4$}`3Mt}Pz zjHBPS1; zZiT*vzw&aa`rPe>4{|zsH7-3|SzmW*` zK=LrZ8S76+%0IOdvuO@aH=SBh;Ubm9M4}8XOa7T)c@{m+#{LTCf!S@Xb~4heS6#PSN<4etV)H zhvWgf%^sB>A6;mVDvbBCbK(e2A%8cz01rs<@o2VPiRIjr?N@`P@Vhr7R&Yoy2f!?q ziJ?n_@$rR0`_w5ejiPm?DaFf|?cPxJ67^ZjLaeL=6myPoaY| z=qMOB4n8c1&+vm)^5yxLs|9}Gg!YGH>)^p%@C72%mX~f~9m3O^*_f>urUEVDoGB6A zmsh%WbYl1`oKDE`ZD3-|#UCp#p=qB5WfW>hZe=3mM<50x(BD8Q*Z9{OKG(3Q6T^SO zh^0p~5IZN|V6T_HM@DWIAjw`M;U|z!{9vlx*Ctd*sKVVp;JG63T)y?74BId=M0jSl60{F^bdU9HFP=WK`w=DEmU zn#wJ`5SRIX$-I(VqBo6;|ED%bve2L@*(_N*znARA(6|T8PV!vHw2_IzJWK`yWNkcR zjV?4mR*?J&NrCdtdF?^pTN%lICFdmPlFFnHMRzA+zZ$UrD0D_t6BgsMM@Qw&lAhzri(;%^S z<&ch}y!FR^I!iK;1u|Ko_{r*C)ncpiG(bBi)reFPa3M#RibeO&K#c$7Oqw5m z-NZ7&Vv4~KiEd4+kbB(}DQ~VjP`^CfRG5K;d>iOGjZkq#cYVpbP!09E_S?*^8Ry{U z9^<_i-vD5_Hl$iB%tgVTFd?lkIXPm#f}+nxX}|~KzW6cWM1B*OHWk7*d#p0c7t7(` z(iJK5_9lAJJs-jd3~Wdr4)F(7G6X{POioAQHx@_Yw;~&V58M2E!vyu6q4?3E_}Ojl z3pOf~?6C29VKx+>_VV?J{79O-_7%-9XlW0kN}vxXwa**#&xf~o0k?$Zy(&?k#OY#! zyOO_^r|Wg_I`U^pd9sqNf{jrrZ1I_NG95(nDFkm(+3aFOq8_ zPRTd4Ec9?i!})IOqtG|$n^F}Wm7TFcGuNZbZVOz=(S>47Wg_5{W=%N$Q`GB8n4Yx|Fs>LgYw@9rr1c|M2`2m&K+72Y*};Y!f<7Pq5V!%Y@#04LBsbVF7Iy@V z<~i93`dS$Su@^TS6#!t!OYy##M?p5CSLk8Y)zAaZG8kg6KBsHggcH^v{=ukg2mu7* z{cjG%{ih9P9D;@-d}fY?_uR%4a2vu$MwuW!c0z2wZ}u(RxhK3pA<)J#r3fJvmXs&0 z(MhFU#{p)N*d~UA07*@z#`n7>76p7~m&8YfN^hS4rsbgvRHZ2`>V98ArZXk?C_O0nmJ z51iAtAM)-22LDa!KL64>_c+D1jf+*+XK@tHdYA@Xo{o?_M-%J&w3&t23$mJk+-tBT zV$~M%9VSPGa&SOSF=aVy_Uag5oJx74SKRBGJ@sW75iSf>%RDDKK zmeM(06DHt*I8VjMtDi6NM|I8`HnM1svb|jet<}}a$UhyjnMbT^k1&KLWOlw0`eA75Iko)VLwF75|;x$U)c`ahMby)7brux8XoI`Cq~R;rt)Q|DoJBCX_WfTR=KY>aYx# zJ)!u&=~*Tu#k9Fp5dY(21SR_@zYFCxza(Tma2?-vt0cwt(d#|QO2S_MhRw3-ZYPMr z!0t{U6=ixxcapc!XwUr;n8Xuk8x?1u^IEe<;9m_g!0X@vnDOfvNb8t+Byt{fiuu3RJOjY^mOfvowZ2+u{L`BNqRQuJBFKi+)POY; za(U3`tssV?`)!~~a-raVd2#C)10x~Z*dS;%iWv7&3l(bi^^ecT%m?$`e@sCpyvhFx z&bZSm&Gu(N0JDQf-r(FgZB`RymB?+88T0h8br*IT?`TGHUb>1!Fzzy_Nf%x)@POU>0S|qyo^k|@OMI7+ z6s}#8wf5(iL`vI{G!I#$+o-$a4DE{ugI(Vdjvbyhhf5R3bUe3)va+9Kj~v`}OxS)8 z#|o#L@O#eTEkFfZ8T#iJn%J?4{EI@oX<+`h)l6=vwIWX+Av;tM<(Y*?UUj=QWc!vD z5$`HQ(?>5h_{uGA{3$H7+xOfgTwBv^j#Rg@c;V{gC1gnRw1dJQIe5?S&>!8fzMT(hTCNo1Xta+P|ya{x$py{WE#~dH(?Q$h1#WSAXE# zF!2^XsTR`nBF#Qeex86$XSxb?*+ zp3QdpUh61#*%Gsc(YLONp-_D4kWk&*Ra-*wU$`r69_!Q_qNAm$^C~{-Y~VZm56ZV1 z3Qz@;;#a5lv8msxyO(Zt{G86X=XI*xCqfzJq&b*z-c2^R91QBnG6Nu4w%3`YuXq*g zkDbqHU7Xna%tvcwo*E|d+T?N~y!Y4?>WWO;0qnm%QBZ#b>iYBU6zW3AJ(R$3MhbPI zJ?#Wg_?^xE&%|A903okL75XkaoxiEp^-TrMv^jM_&*y`hJC;!9o0B;${BjnzZLh*;p#)2rTJsCnCUA3~e_3By8Y_ryg_yas6L%cv% z?S>l;Gn{9=bs^tN9C!K(`_^@Aj$f7^AE|_99_V^=>5h+7q6vjzgvY-{H5;O!nTx5W zqm9jLEjo$wG!#z=2qW^OCa!(p1)X@#??6Klxc(2w`YC(gLl;#A9d~>5vDvrL8$+>6 zsF3SqUVIi@`ce5|bOs|>KZ6by9WIf;#Bo#-w8!$Eu-v1+K6Jij_H0hP?lBFsb(E2Q z;(@Yt)L7tBh!f~vZ{J%e+|EV7$>!__EiwZb%PG_hW$F!nWjSXZ zG~y9unrV&wCUY%&MHSb5gNWo*bGmb1arX-xv&`2kLy!&T(Ta&jUQ4`*^3i!S`;?C_ zuwrKdYiS+6><*Ub8mt*T~SERftY+c?&bY2)6apeM&CaIJ! zT0!ne;`U*zUB{(n|3rAqr|;zDO>a-g8oy^8&Q9#*<4RYD%XfvX@w-%w8={&PQ_Vb8 zgJoLuv$=dA9D~9YX5jW19iFa|Mz-ft@t`rWdV}JTfLZabR*A<ecPjJjJ>DN{`F~sj&l-w~>Rl=dit(&VO#E?^$yG>(eKQbEj{6$0(OxiP-Cc@u>qN z7#l0!G>&&XYy778tYV(MPz~Xt9VvYe>u@ZGH;G_z*stgQ-`cM-$Z^De)olLj zQ*^riCi8YrFA47#sUv5e; zVoRh`0o#G5Vq3RV9~f8F8=p!JbVcfi#+01#_HmYb)^kVFL_6(Rh=Fwu2{|B_n$6tn zo|JqLz;?d%QtJK(iJJ72H^qNY__b9%!`oq(Wv2hRM|w~GvU`szV~t$*AxJH<`IN-aZl>6d6f z5z^JABrka1x0aK*s@=wzs%a8>kQWX9MgJnBNY!d!-lO=JE^F#|+&w?lADGn$*$%Mx za#7fm{D?*BKF`$m?vM-b$*VSLGOAUxw4K)hTff_yld@@uvAh>olEiHjQ}P?&rS2k> zu{UZ<93lh&ca#)sq3UT8LdGl*@H^vjr%I5L=ywCPn!4O1=Q^VGzGNeG>!5f#p$(Dl zKGwotQ(q|7S!~rBspVMv7A(>Sh&jPpsAt6xG}Hc=1^JDnFGg2d+4fYNVpR^8Fs(KRbI?y{!zjiqwS69;nHP9!KFL zYW)nzx8Hp6n>2MC=KK)|-J)=0;r0uqinezCL zg0=!4JdTYW&RcLyMZ>dITtPg(6om1o6F>!bYy%ZM_%fi_4SnhT7dwzQ=R#d$S>nUJ z=Ujps-#3=z(ThkT_ueEsy>u6o#l3e7db&I_V_u;pxrdAU^u^C9TgU1&y}N{&>&n=W z+7A-}TKgc^?=I)i%0pdtY!dy`3k&=|G~yX1UM#mD(R zaBd;H$-Av;Nyi3vAMah67yVJXNcWtX{u*w>-_%<+qnHdmHe&-3?g)(N;5QhG)p&IE z{<7#v{p5mFjsUZ4GsNos=SKV1a_y1l4CLn!ASv+?Y1Kx_WOCbenhWK5iaaJqcJ=-X zqhHTRRf)Q9lT9{sjSYL#hRK{`s+)9Vbw(CEoWRwYB;R299nyPDkU{TD?~ zI5MNLyGzCarm|kOYobSGWI0Wvbx|y6beQ(F<|bob%Si5zS@@EZz$$RFo) zAg=qoFgSndBaFfe>LlL_421KyU9p{(h%&~JGw z`2;Dh5H2WonL;~TYfFNBnNuF|x#5Z>4lU-atYf~P<&0k=$VaJz3)@FL!a47PA&}IB zpo%dm0(MAUmhGSxgk_XILp$K~F10r|-=MkQS7-c~ai+;7x`s@1<9%@ME4_0KA;Ezv{$XQ5wp zU;*U!-C4gC>ksYbB05Q#CiskD(u{?d=YKX$0m+O)B#T(S&Tj{WDMbamnOU#9R z+?;+*s-BYSP3*%?+A7^&)2u?S&l-gJp_uYSFLBPN@mnO`8#Y7qX58=|zMjl;N<*!^ z)pf99#BOz#{1s|ewSXW$rfXi~=fOz}(|*`}1j4gRYmer`rJaF9LwD=KsG$9BT$RS} zjPDe1QS@ut)F)vky6TjD>jy3Rf-X>|T3t!~_Hko%WYn-@oNGA6Gpcmu33UB_oC(b^ z#BNw(NJStky->K>ehrbYx$z&V4e%r$HUjp#L9j>nMyKyxSrNT4wjajE?*R$!n|EMh zxw7mNI9>Bk_xf{L9Oq1c5n{E-q_+-p&VS`lSMZYC?+C?b&7CLG#u-G6*Ffv2xf%qm zKp4!4Ek}{?&pyn(EI#y7=V#h8@tCQ~-bu%Y6*zUo1-t9AsKJ!#V-lU!>O06)Y} zIe#e3cZI$mPFJLhnpV^WEOl`w*uVd%VFvP<8(37yQ#k=L>U(B06|0&nOqI_#UT~xv z+@)Y^OqukLPi4?QP3Y+A=lAQ|o6-t2y@q<8OnpukHCT-?WuQl@C|K?+cvo$GAjIDq zQ=I;#r$Jrj`Z}nMJyQD)-2CKGOaXX>3W~Lel>Lp$#-ADN1%FO3U0xHQI+m#puBs}- zwyU*ORRL8o&pRo+m_}9CwV8!=hwZj$Jg9AY&>r=5?cUmvDt-^e;aAV%*0Iwmpt5ytCSDUTp!lhRa%m zMx|HC#B2kr_HRr=u1ef?sc`Hx#}M8SDy!9 z=@^Avid!e2j=-BE@zZ5^`I=B`FIA~KG?%&^(8-*NkL#)kWq{b$`>YekU%1s@qI_ft za~`Kp#-3-Q4n!7=vo|?Impg)duSo5uukN4mLsc(qM8;}0l6ju0vk3S+Ytl0gr__0u zY;EdszNZDtV;>h}P)}F0esVIF15}G*`Lipu6lGfx?97Kntg^?B6%4k z>oeqK5Ml|WuLr<|)i^$f2fE=W&skSJ-+%m^)z$NJFPXEvdVa6rbN(9PVxGgJ3pA5` z$Pku@89>Eyo$D<%B~Usue8ryy(l4IGHxmZc;Vf%p!g&0`>f@X~El_gBQu(tQM{q7ZXh38=Tbuv%eOBymBQ zHYw|z{=5sxUWN=9H1uR5x9YVVfo_E>KbXkPreHdpJfkOk!Vb*OOy`+J+qqUc`xrBk zQ`GtbzRCBCH*>P$`AhhkrLUn&WP}m9s6hVi!$fkpQD*ZJ1L`{a-l1?xPRkTe^)1(SqpH!DF~HaF6!!1 z18`C1U5v~>%AGUbCSu0kJpQcV&rQ44w%;`KwG1|OO(I+EyZtEuC4UoWuk61 zz1>LE;f>0MhU{VPy!6ic?pjr_-s&G}*T)+E+`2&-)gRM@y5P1&GfWxL&C0c2Ev!!E zx)sga8(|>Rp2=Xny^_jTQ|~S;{8@Dk><7UG&bO?mTg&%bwK5zTnbvwa7JSBI)+o?` zV-1u(@M#rHT<-Jj3YG(A2{MgOM6z>wCS%>%B;VyF_v)FP<0Z@XyGr-znT#1}Q(9!5 zlJk2e=X%Ngy=1FraxX7gUh!1=n4ZbKz2uEv@_?Snd0z6Lz2u^v$$h-!hrHwydnWfa z$@9Ojc2Dk^bd;NPy^;p?Ov-nYf=VjsnbglsDpk@MvDTyUf!n+m z>1JTzXht^1a>}}rK~_^tlUlmz^3!xaepA%p#qkGaGo-8u_lZN$x6J~HUI^|0O>yP4h1eK8-D#LDsBj_KL-^ zmfo?$eXROl66UStl@0JaruqNGkS>*ww{T?tm-RMLuOi5oz`;Bs{H-IxPZ}xO?))bo zk^aR?J?ne@i14#VgsYAShcm+(PhgU+#}Fem2Vx9k_KA`5CvIVBW>zfGFhyNJA+e;) z2M669xiUt*Rr+ku55r5G%^&j46vs}uxGS!kX%oZHDmfc zdA7-R8*d3O(S;)Xtyzs>U-Q-HC;C)Gx(v>UBDQOcnu+(tKvybqO+3R<;(-TM>$ikKd8rBhQ{w?k8^5c5ixVAYT6pHcm> zrut*N>aPxbYm8N!q|%xL#Usaj%c@(&cOdowp4pG30V+UeZB)OE3M^B>(Ov~Jqj%kD z)vAA1{cPB5c-R+Bpu|EJk<_UoA7 zmW(Q1A!@2AZ8h38{4}?l-M-pt{DIl7`nX^5Y}eIL1AKC$z@ZvOTh%NQM(7?^L=q$Z zLc5W~FYnj=U9yxw=!*PE`8KPzo*2|oSvxK$V{@&>S$){gT1N1Sc6Cnk4)-J5tRyjh z`aye*V|$ywz1-#-$L2M^U*zK`nst=<+qZc~o^N-#GiQ|jX=zLOx|x?enG>y#*!$f} ziF)9y+R9axZq$iMz+C6K0O4_bGvw2h=9Zhv)VHt=(s`2ARATV+RkE(kqg18+ig2|n zz#l}~7=$Up{0;UvJ|+UjqJ-5@KrmST&^3N$;QkmJpi-C0hqb#KUgmGG{Dm7#+M@&z zZ7y(~lm>8Lk+|SO?DKHl3mExL=at`ciHUu9Fo2IytM+{@glw`%&Xc?)ZeHgJoEdH#~t!h27~9LD?slzoPwcDM5#Y5?6$5Z6F>Y;WB;{DtSE z?#B~FbXOXd^4rS&cM6XHwf~E6>UqA!)Z?5=4XILf@49JkdueC;Aqh4x>&Fu6K{q2yVM2Dmw1Ft{l-OHYt5`E^pz4>q|t zB;0}$AMAM5&;b{e_b4-qGFq3qTeOE07u2rGoR7(>@kTeLv`4v1lrn~t)OmctcYBmP zk@VC8$0W1Y@mJwB$%4~LHhI0J-Say#LL=p;KqV$6q~t_~;r91Nw_Rrq8Ob+=_t>(% zby^C13EWT3D7H+gu~KF6f2+pbZk<+UO9zZOjumC=k=$fG2QOo(bM zLj?P5jJ;H0zm*(rk~FT<%!pR^r?6GomP#M!rSDxn+^UoR?buqs=QF&T%Ck(or3&9l z?lO~It7z(D=u814ry~zFY4qx!J8^y9immk-`GC}U@B-kI^}PNhB`~?z4Xdu?+X@Tc zdC%_BG8^23%9qF$LPZ48^#W&vhS8S=o8))A@0|98FhtO$_XAf=w+65Fbl!|sg?UZ7MX#PcJ2XXC8TYJN zqCP-Gj>dS_szgO@n49hWKVnMuy(typrL2to|sUIRpReP}l94pBcwX=>*e}oqOq&^wNyDSUh(m zvCRkakS-rSJ%U=9)i42etW`IHCqr_c^U=TO=yyb4Q+n{bn56IO7?4`;s=H|MU3>R3 zc7R5?ZB8%#zBGG|Ek8i_wAUPdg=L>N1&3PZh}?%&uEDMR$HJG^1M3q0J=WE2{BK&{ zS+xrRsAxXPtM*ve!BQA3HqCjhAfesO^gO z!n(t7do4A*lo$z{>AY9S)jacf!7Y)k_VPr9qF2q@tx>~Ziyb&T(*n+htIB=20eP)# z17kjE-K#n99H8Gf4Mu%+WMW$;}}vMF!}X=2lO)Cc)@A zcm3@1kP1JW;LbICoQZqw!Rz-}%iEZyNw4p*u7P(l7%OIzVfb9B?`Ard+p^BBghfQH z-dcDejo_ois{MqIKkKvTJT>88CfAaQk(!Dt$%8hTwQ!T*qjksd`BdRx1w7d@%uh+O(4gO%m=sqp} zqqCBmP*;O)skFDYzf%NRX05|hb`l-fse=kVnW$BU*+zYT_hUh)D0HAg+JXRpm6HpU3Hkjvlv3c4$H zAm2p=VS5*o-4N3m!E{KCKMST7TZwIO9B<(^>jaiA=i*m z@MDBHmugO9otz-QWlrtg0TV&-S3}K7irW<56l*bkJ0{l2DbkDLFA8a5CTfG5ecxV= z5W9sYjx__kRbAQV&WXK;fgb!48ZLDEGK1!23q$6wJ#$3ja@k{XV=lu^=<1ngCN4kJ z9hI%9;}e&2NThP*C<-+GEq|~S&pyG6eI0%2cS|pbjnTdqfD8=Utpi}y{f0h4{tkBe z^JN=adY!ZHP5GxwL*sOi%yGs*Aaly$$I~AS>!yxBr3a@i>`q6rhz+Q0bKZ4RD}2ky zp0(5reLrLdL*HO;0)w^qhYTrSJM%Lxi2)v|>TjSV5539HHEpWl5x0g3zGY@NzDvCG zG9oqxn&d+gXfoTv-j`lU15a-xt`a!n8ARatH<}m2=3~=IRRx&Me%xM1q0cg4*oF0D zM;Icd{v;MGV0tYV6~``<$V8waD{&QuID!S7hRj6$Q*=qB8AkZCjfq&Wz@ISr=j1+0 zH$@V?Mh?u0zCl~=wl(`|Ut*2{co;H6n7e?n5||>7R;oyg8`raoZ7y{6Pf z%QW4|;{d*li5E<{Ew@r*p_%xPHE;W0G;JTC<#pYN#v>H*MWdD{QJ3aD!f#-yaEU+yxs-T<6>RY=8SjqE;C2bLK@3JnOX{iGBrNNG5gKL1dSCBH)?U1T5K|O zDI#^Nlk#I}2C2q1NHf0l_7wt84rd~DpVN5;jgb5A(9;~#0|qYF@08rA8$L0aKBnT zrSAA7Y?M9*#7>XRh00ow=NuHQ*F5L;J!!joY2kN!LR5vfBeE8+$N;4;bZ@JMw#GY7u7FzAI z3Sq!4+D>g!Bw0|p+&EhNNa))1H1ML^Rcnz$oY&o;Oh1^N?Axo6)>TlJRxt0g+jK%E znElQUjtB7>#pA~O0~xT*>}GJ*dTG6sHfkX9kiq!9#p=r=nSFV~dhkEh7hfwtw&;n> zE_7NCtPz&6_VEP3|lSyW7U=zHMdH)RY8TcX_%Y$24<6I@q&~fSp;arp5W0d?yDR;`afAcDmZa=$bo0A#F+$jb zF-^t;*HKBbACXqA6oAuJykRA-C+q>sG675S3X^R*f73OzS`Q3V4VpHq_BZJyGt-Hm z5Y7a*q-1;CgVGyQr|HC-py#Ac0q3{>_9cAeA>Z7*zq&a47V~@Nt8DUVX)7R@Fu9V;k$&ED#2dIgCSPTuT=7^yqd#q?lB6E$_Gdqbh||I4}0wU$~&zG z^$NxY_i8;wp?eDf;|3W_ENzB8^I%^^jxDO$@78q?Br1y&9G!k^(I|LFs|g7IS<{$}soeT^N1Aq+&xLek{;$lFyo0aMmoWoa}SjA8|81OeTnO zY@FPI+nA>L^An5dLv;WLs}IamgQcs?9?45pf7Zmpvt|`IkD2n(YuI0@%Bj|^--)@2 z-&DnHE!BIqTW|UL`=+wvwI%bG3M{ca&fl6>V8E& zaBtd2!is3VTcmvbf?t(3rz%&yUvO5#S6U*rP5G#S_dRVo>+c?kCd1j}=K7(AdA^s% zK+GtgGihut;lu91l%@xBme*c>dNB1ANsc7H^NU4?x-vTVdb)Gq+mD>^TClv`da#k5S=Llp`Z4thF)sR*_I33KFw`F5i}lHipKp+}Uf@FcGT=tNo}X#>+~ zpFZr4jEAMJ7gd1NVnEqs01#Aut((Wi;rEl#s?}+Rr}o4{EX{&o`Bv+J?+~Aqf}T|y z=P&D^B(1}uxrAAS`2_}a1AjG$x5i{Wk5U=29Zz}kQYfazJ`VLjJ;QkFTGmITZ`En> z`c76dWFO+H?8~Ye%1?DxmH)|#s?yfFzT_Ep;t!_kT0Jb|Rp|^BiLDH|0>%vVFHb_` zXwwxq`v4;z1D3<3)ZQ$n=-IrXAO#Ujl=ws;a1iDLDD!`V+V8K-;Tg2we~xCeod5c% z*-;PHaH1+=PMzeMfXD_T8=+mD&O6`awQ8?tcF3Qn{0M3hqD;QZhzY0qS!J*O%e*pY zDHqFMv)?UsqQa9n#o5V;q1nE5HHUqw?!jylq7^lVl`UFq#1_hz&%Yd8Fv_#2R&#xRMCCzUFzG-%;a}G zU*5c6mv0yIlGpL{5$8wE&Z1d9q#$d$3eKQIKh1nE#uge2A;P;!_T5^rBxbKd=;N=t z>rBSEAA)k9;X{G-=j1x=&Kg9j@sD9Hn5DR*hqD*h_`y=W|B2Na;K8SKy%@i%0vmTQ zXB&4&s%HpJEpj+U+u@FK6gXG@1g;>=Jfo{30~W>T`nh~=@d{r=Zx*|-_zZL+%ytk# z9E4Ap*y79Vft^7TaM01^6nHD~fja=hZ|2axy5AUNyHTmreT*&yv24ol3}ZHLW4q7c z_CV-ro^hQ!8xFxuy*l?KN-(|wcbeZRxvQQr;S0Q9Jx^MbcoI8z&+JQ5R|UPujkuXCbXh_5~U&uUfN4|VJT)3b@cjLlk z1sAfz12!`l!rYt=_q(Q6-!peHo|(J(V>}p*P>J}o? zo2&kqyoNsN)$x6g9<=vt-0J%XHyP~(rEMr8`E~{NeLmgx&oYkF0d_`K#lz*xuAE8_ z`+JDz-h_1Sbt$^*$v?T1zsvl(bXUZDUzfV=ar<*=u(OHJq`~H#%sltI(8Q()sv(4C zjW-09)~5S*{q%gZ9DnzA?cVE>e^f5-UbnR4DKnpjE`v`fdJG;;&4EJz-RwSgrzfYX zv9L*)Q9+t+t5^4Hq9VRq>3i`Ii4-|x#Lj|0U_)6cQ^)K_uc!b+keDL|4IL|Ot;+rfAI(U|4py|I|*pFeADay zPu=iI`u%^>|5N^Z{g*xLefFk6^%AK|=S7c7Uic71y^B9s1Lutx=!H2kqA?kF6OTV* zuHo@#+jZX92c0*$5rpE;I10AL6sv!dAHTwoS_VO$6<#KQ5X5>RfCFsQS|V+OD|PnBw%0@#m>I20iI3+c+zujo$2o%=#a8 z>sJNo`fJ_#6{mkfV!-fM@I#EK%dk*vnVER2b{xZn6TwOM=%aw#Ul&SM3w_6W#Mk04 zw2@jF|I5q#1pew$R2&bup><9LlXH+1L3_^U%Dc}whKQhjm``Zb(|$xME@L51V+Rqd zyG<4Bt-G5aM8_oJjbVd_#4`!R|1y+dVq{m%jx2wcpVO;gIEqE9iG(1ioxrKg$u%&G z1Jb-#1YWFQfG>2xR3tuMyv65rcoHz9=eIx%(187rKnPE=&Kw5g3SrV8C(KE1+!S%X zh3%HGT_=8yaiQ@j0HdSW^kpw zud=*l)0?JdG;=xP6d{7taJqjb#DA9phsWa&!F_0KcTX`wd%dV zzB;W$b=D1>k>Y@{r86B?vto4xS}|6xKflA4TO->Pc}yyhJkOk=%gpZMS|+0SS^h{2 zvA_sWm9|xi_jnn#5BFOOCEsi;x)>_WY=mKL_Gi`@1bEv@*F)hHY}_VF)T4hewz6@D z-E41`G0DVTU1pGo_ip?YP#g&8IQca%v{LYi!$fqu7qSl zp=Fp67ZI+~{MHX~}5SLqkV&^c*%niYlfP@vkkn3Bj>Vx#`7E=rWE2J_P z$*yufdBCkn!n?+RXBkdGCIF#;w@|xIo1Y?rMaU=$Io0G%9tS+~*14zS9gWl*=W$=z zuRk+&TEop8n<*H1$Ne@i((Zm67}@TA8yIoiZv!JAyWa*zcDdgMM*il08yM*{-)R`x z?*>yaa=;Bf=B@KVH<*HvFWg|0mwLzzreNf-8*KMdyWF5)Bzd7XxP$Y$2iN6(o5AIn zyp?8fz1?p!xTD-}GdRorHiJ9X{WgO;-u*U%JJEcn2RG0SrUrMC8+^>`;K^<g4ZoC&eH|TNtOF}lAbca>yFHxAoz-Sqj@}ck~-Tuz9O8IrhacIl3 zTHao2^dU#fHdzV@5JK{we@R`<&Hk10(oSc5&7rQ2ZO$9CdIvSlTmUagnmVcD#jA3Z17o)`|#nMnBa>{ zYcg3eb{6)nc1vtwNZlo51FNzDqV+QzPSQv)F@BlJy1#tREd;1|f9~w-@T3xG;K5*M ze`egOm3C%JuZt0(Fg~vDUqx8%XdVugzR}_@E0&rOzI zDm%zLm5fr)CSUVmKM$Kz5nbQ&E3TIE%oW>aG0>sBXb<)2qbM;lTmICLJ00ndEzb!} z+tA|ge=Yq=b;>wMY3YTHv&CM0I8l zN5H;UOCX2-Z@{D3ap?RuT;Y4p&on0Ug_FK~f8hOHz&-*4%NRpJxAZ);2x~V)2je3i zq5YQGr-VwIB~`+FDrg+pG)(G^F_J4MitVsux_=q}WZ4uoOCFT4rR z2~3ux-6zP7p@6fIVW0ZToUHI)^<1uhI2t;qjF^eflh?@Iw4f)C#KoC}$4>MA%oX*Y zzW90J5D2|6GI+eO`x!PHI9H+?;FVX&ax(RmZk5T+8(BGc;9w} zrEnzR|DimQmNrvOKWbj@))Z}Y$1@In+NI2iRcHL^d}cj(6I-_9*QxneZ5cJ$YfWX# zVMtcx3cnmfwF3}$b9}DQ9JN!#KBz*Hyh`RIgH%Xkwe*(_gO&ZG0xcC?$p1RNj%u2& zI#J;v3V(S#FNzdTu47>t>Iwwn#;UgNHP(8VeWiDc>Pt_>=wZCx;X5RP1o5COso7R! zRnPYoOJK;V{YV+-XDfvI<2xplqfm}3ErB@Sfjb(u8^| z)Z424i3#N?lxNj8m{1>u`b6hf&+n_RzR_s){G;@BRP?s$`T6?FkKRx{zn{MPMX#)$ zf3&`ijz&@=h_zT6Mcu^=86Qz6?MnKY+})n&R9m4YAM;ZG`^9A_EI(yHS;9m02yZ2Wh)m~&; zv#aY7`}l~5w6dliZPl%rduhtXX9Pnejd#;Q~{f#Y)!@)UhBDxilCCx)$uiV zd=375;|5*oLN)uBQ4A5r#_U@Bunn&;&YPp}SdAlnwM|vQB^4xhyyD^|dk3c1TKxH0 z&ed}?9Jlri2E9B*V>nJd$)GQWmqkm5euX>Nt*~uZ4 zHhdRZ^NJ*JQ0?2*v2=-$S;xnQIO_PoNTYVVXGBpu-Y}xC9c@M&wPTI5a+Uzj2=d9 zNI%!4hmJ`9=kRsPk?>WA>1+?a4u~A>az5k7<1f4I70}*)fN3T;4YwcJA3f7oM~}sv z;r!E+Hi#vC9wJ|!pS%ca*Mo=TSVJ3UB_~pqSAV=-TI#1|RikEShF%aY0)+a;e=6`t zpXM9MO0#_g*Q}&Tt2b#)RYyBvVXV~rI32f{dXt}VN_h28n1cJ-nvXk~ZCzKx|DMxx z-wDuIr6tqvxO-0Vt#=h03+4v@!hRfF))WE$ilov-`+oWhXp z0=nJV@n~wkLiQ#-n&mkgSyZvZFlmwQ*Ha<;QPq;XQ$&dwKd%_H+4ytXT%W=pQra*^ z*b%kEE1%gT_OrVvX!Wme=O?58-h9a6TD@|l&ZkWKCN4kxQ6pwKt*zpV{?p6C<9lN5&B)DE0k)<`7mubJb zY2)DXiKyuYa~9+Mh>ZRc=NI2|F{r%%BFq5l$f@Lo4ZEkhm9jj5jj41(LDweXMptVv z!0C=B7@X>1v$G0Z3DP8>yTIwP;>TeiAn!gd27+HTzp|Rf5>#ZFrFX`E7u>ndIsVS{ zeod_xzWVA1`?Vn4*1Fo$`%Sjwp9I`f@TB~3yiXJ;AE$ety(_d2TPZCwa+8lyE$ci1 z0DAplR${R?*pz())Cyfs^N{QRVI0c*czIr%>sMG(7!CFG7~2Q-OA&h&PXkrC#4e~x z3np%!7r@2wsaz8GeV`W4ch03n`KPDTr;nTV1^!SDQKae{p=le(CgzR6`6>dtuRB-W z#jx`Xd~?TPAEEx^WV~~-pK$01hdgArIzOP-9WOG5b2NsRAp$eVrL;Yr<8@v*zrO>> zrSW{-?yKoNct-oDfT9B6MLkP<_{yLOXDdk4vpg#sGIW*3pE3h#;;xYKej$)I?SZz3 zdoA|$_z7-%zyGP*-pOCto=bC_q#lEq3Y<=DEA^V0DDdi0ufOfqBJ`N&JVQ@J@8)&9 zdF1#Z6akBI)BsChZ!|yoUBo}U@n_1CrS^;Izj7V}kPY#G>}dC1lbW~WwC?jrR+!t# z){|Hv!X3!fw7=vL=2{f9I6W=c?!y{!xZ8FwabYMCis+w=CvvG1i7Z=*n~COLCj-tb z(O8jN{Ql@xjTfTIG@NpH3YoZ4UAcCJvy}`k{`hKqSWGtXp*GRq!H3F`8gB|8#>W(~ zfzP>gHWt_0c*~i6wDEnAJ`dt!2A=cp5Vgda zdm-T*!T`ibcA7mZ*s-17y+=>g@{7dv=pZJUEA3ZhQ2emWmq?Puez|PTWc%}ph6>=B ztT&tJhCqBqVa47Szx7ZvH>cQ+?5goW%%?oGyt4e`3hSYkK4@NSfVoK1R{fpu45TGo z+na92I=S;74V}cpY%~;(Lw{ay9Fv8cUgtczlfpY2I+`?Ju}**0%kUPl<+LJbxAPnD zt;FcB`QWjm(|oiB;uXA2HY0x%dw&pozCi)&$4wR1k6W8R&B4=r6Fuaes?M~#pAJY3 zH`bmLj$c^>ab!L1;CT8r)5jI2Yj7L>%k3l5VN4)R2Wq-xN@~s-2-<v;!-04LIt!LYVzMal@iIr%T zp6TRxtcV0BwjcJ&ORyd^5z^j9i7?)8AozhPEZuCkoTi~Pe+qxAuuPgP@c|1+w4NP0 zv)RGyoYnY_y8y^JXJ#H=rYz`Wd%0HfChIOxu++)Sm`}z+GBztC8aQNJrFH8l;v6x( zyU38wR^560DuoTPJoe$BSl1wyvc>vwGfM^!jTK{Z_r|tnvvA>@yNb-hiDm>^tXiq0 z0$f(@V}P60xF*YLO{?_ zZND|-?dFg2N;f7ZR@m$9jm^p9nmc;Ke2e#cdy_w_W}BwYYRvC%J^dzeW8Tob6<*QY zk?-5cGi~!$xYApK(#(4|V82tdd_grc{ZRpCf{Z?!=-)(T4&w}2!Bs(Y?%TNVH?BdX z0j??@Gae2$+>x85f%qD(8F1ua3_X;n>?OEY1v~){OF`>x#+J}~%mnbdlm8zE(Pj)J z>eOR78*TmoPP~3BegcWw5;tLGxcQUw5YZr!&+R0x3?%B6hA3IM`Q!6K&D#KYbk4Q` z@ceX~XYUfo)8`-xcj`2*+v&<3JjMp?oA1j;aO;}NBl}*~#Hg`D5^R{4n`MO5-Ti@} zvGzd$n;@SpkmsyG*;SiH@LZr*bv=S7n~mBK_!n~+C$JLMvjeA$ww^7yfj?*8l12~7 zcX&YZ?gN@78l+G2Dp9*M6;$8{H59+VdY#R%HLvt7`;D5d8f)`Tc0>N9IF4jhzelR| z?C^V7ry*Qc4W zHm6Yht)O@&794*RpvD(Cb`X2VTx^zhvC)Xjj$RgyV|w_4)4iU3lb)sU{TkT;`NLwe z`Ky-Mn~fv@(hZFDt5LtY8n9Q`t%2A!F#bVd{N?;_Zr&-3zajQvHa8Kg?nLcixivZF z@1p!xWfA6h+I)aH)`68Vvq0<7Q&`ED6E*2wk+~zZ4`^%6^wIXsBgmS{k=q1 z)^MGf&an$-d>es&u+L*UJUDQvGBeID7=knRuDg^C58Aq|0&|vxdGlk=;D1l z&jZ@)LGnrdzmEd?e+$>U0RQ(1s7GJg- z`Ia|-)SJH9>zy}2d^LwYWEWL6i+yR(H&#n1dYkV>#Xn~d`V#Z^h4YCByeM{!vkZ@k zS6^2N&kOe)E`6m6?2jZtXFIp~>|~{#q@LKS^8>M!K4%dHrhL2Rkod<{uOSWxER*Dk zKQ~TYBB?J=ILN(cNyvVk+#I0{su!@Jy=r36ekpc16uw6+dEyhI7Iq_$%blUB0>F{c=h1wb{#En)oA80nm0z zxt$b4+j&In3f$pDe_`CeCocH4Src>WPP<-bn_E3Q5&nm25BS=+4|AkJBiT%OL87)G ztC~a3DR9RZzp4TTav$e4oIVEPlPefl)rlMgfp}F=M+G#$&Ba~VKUo4ku@*_6D8@5< z-CRD>S0v9CoOw@3@vGb?f!N1$L-B8B@FIdGw}|D|I~e~iELTKYxS5K%XEjz!zSGbH zfxRm^ACKph=be5U{fT|(BWr%ucX(bbX5NjsruRF9Qp|x2;XXKn@9O;pQPyO52|Qkc z4?>_1?`740yMSDY3;I5o1L@ornpXIekZ;eWU0V&FQ16BG>BQZ4x-k?j?!XnJL$p!d!8$PJ;jg&0%%HCd#I4M+F_x?l- zw9j)bZ<9oimhOewDzhwXg0^Q=r`n*fCKXav6bhK5SP2^ z5ex?XRXZf`0>p)@w-908%Jx2Y!&F`H(N6<81ge*574oe5NS?+3{aij}pmo1Y5!h2u zJUqnSiC}ktFBbXx?iUo(6!!}O-*fpA@wf0BimLhIu$rqoO|kZ!Ays)xnpbPpT>=k= z`_^3Z0GV;~HTM)X&m_kyXc+yp+H2|h2w@UjmLEeorsJ=|G0r!@boPoP#`6lhs(U>1 zSR+@8(ORg@ptWXYZ>Wd&vTdr_f95?ezGMm$z@9Nn7qZcRF{V75h}HXe1?|Z%gEBv- z2{j9EJ^SztWGLTgZ??v~b;lw5J8jg76H z_De)mWg9=4&D-*PFBx;4m2Wz`xe+N}o|}(cM=Ph#ZmV(-q4otYxw&Mp6&rvt3`l^ZgXK4ul*~S= z8b&_=A=^r-jc!a9_N5v!Rb~?&=esS(d6ep=e7oam1A{<7^?rcz2>`%I;cVPizS+9} z*#79=3LeTfBxYfuV&7i0s(Ng^+TGmI1F`KsR<4MQTG%ItPz(02u`p?Tfo)HnKb7Sl zShY`pw<@(R`?+9gsK%6uK#h@A`t~_H@TLoVS8>e~-orM&5J_)q;qUPyXnL7P72R9s zN04r89o@GMnv)u|ST$7Om&RGA(>vK-aq*S=o2PLRpReEKTg?4p5UZ~WUuTnxd4aHM z+rdp%5ly7T`Jnt}*k@$$ot0;DjcHISQ`MkaJmEf)IFO#PI!CZxixwT0V z1cp+TbRzS$6e3?T6SY6lNMVzPa&H!XP`gGPpYE0{MjxOu%X*rE_IvD!>5QWoVd{~I z{NhC6upHrMdv(qGx-JIb6t#+w3^XS#Lr9FV8VB|s!w5#hSb!9HsW}Nb*=#kwLLqxS za(soBTh@Ad?I@@WjIaoV$mUzmWeDcNH^~fZfo}NcGqa)@AxAekCA(z68q0K6-PIxp zf+Z!r7(@vxJ(NKH`979Bm~(SUh?pS+@~xtmJ>0Z8@-HDWm9m zPJcWhg)PqinsTVC`gu_>oZbT%>-5<3-pMUKv^J}A*A>#Y2EAmCYbQuVovmJC3P<~< zj{ImDdcfUW`BO(F{EdOcywOLn<(FP-WajJUGOB+vKX>6?6t zQ#F0DCNcw|);|r((wQ#eWbu{EzDLF-e?kKI$32YXV-38_vJ9(Ce8)FI#ybYVB*Y>IgX?Bda3^UtM+lPEq&74N}?#536KO-2;c)md8sgm6nUsg z2$1~0Ywt5N0qwo_|Kp>XvtMh!)?Rz9wbx$TD%a)NWh-F&LEU1t+fIp(obS(O`}JqD zA6sh#bCq3$dQz9IS7K!6{T4%FwyJ%XHU*q)nXu_AOhf9?b5~ERWufQdv}9Y-$A4`~82zZ*y$~abI?Q5kKL#5AIjn zmSV8qXPgzoP0LlpiZsU!C$1Upf0GHzh{FdFho!M@EeV@zlw6E+;bc88Gfck=+L`ki z>C(_V=9P9H@Wf|yR$xMLV)S-B``k9$ifnqH!~JSd^m$cUFdu*~IE^ zR0E-+jVa31q-d_9Sc-NjvZX1NrYOl?KUH4E!bnpXO{p#+iosOOo_m!dUPBR;V89_? z**q2R#-!5$Gp^3^WQ`W5v4vKrv8AwjiDEqZ;tS8lnmw8E>nopq4PV|&{tx(4Sj;pR zo{TT78igfHE5vaer(-wCBG0TgbC0YZ_xI6C7~wxdh6Gh$lJd+%{N?&5n5}p?C_m7> z;>71UJUt(O%2e@V=5rk)?wT8SmBq)n%QzI9-6R<4&8{dkmLFjnz1e}nWL@P68NU&v z2>UrkkWyI1xe#+fPOsw0sCEpiDn6~#11kluwbc`!b%L>y<`zLFD$K(QN7cm9oeIaN z$@|&CBpo5-u(?AelOi+V4!yld$hDG#k~=R0hs&19OUPgoen!iEt7I7? z=E5TX2p5|C;cmtVV(1yKSRAp9Cr_bcd+4o2+;`x{{}`kwA>qU-3wN95YzshhKA`_L zpQ5ny6{SD$v~sXiXuS<`QLEJdhRC&2@YSpgdXZKYb@`>n<8|_cW^k)*ted z=a2P!j|&g#EV`r%CieQ*2&HvLP~p6Mn7P|fAVJxgKXv^1rP;~`Q_}h`GZv|g=6YCg z4ogec3qQF@cuCD7dd&6EdzXR?FWIV?M7Tq%1*V@_v(F#QU7#^~hEv6!5%a!$&27$t@m>Q-ZM19ONz-RR>0vnUOI|}WQVgdoSKgq6S$U0l&aw_N zz-o~xNkff3t+>y5^4fZo8qv&FzT(Q7ewSA!-YQ`B%of&)JvFl%Tv;Vu_c@sqJwx9# zD{IK~FK6W}Dw%e>o|8YY{AE=t;LxzMFXx_`>zM?gDU;RjNPofF5DrGa(+|TVbP@+nlncLyt&LezvCVb&TgfAzY^m@{n zDx^?hCevS}P);U%rWES(rt`lf;iMf-K64XTQ3;i@t288aeJ1y>B)l>czE;A2%!Gd= zwf!O!?v(J8neax*zfi)gxWB{LS>K|vJ_bc8|3@;oy*0R_IZ$z;_jU~4)`<1hrL|Ed zTV{ye}&`UaAlARG_AJ zw*4nAi2x)vUt$Wcp0L7TPhT1mL&v3X8tr3{HY z&YGxd`HQrtPg}(1ZHWz}7$727$oRW&RzkQwZoq6fhW=!RoIE9WjF+ioEO#b{K%l*` z&~e&lH2gyZbFW!}YU^1UH=h5KEx~MSOTyJT8atX$O#g!Q=FkQgT7JXR+|lHy zxmChBW}tv8wZmeeF5vwk$Ziyv`UgQIlf_*gRq!#{1Wn$uAySYH+>1~ro--3omKF4gR$ex=x1KXdd`ew+3g@13hsPe<_=;9Qis!CDLX>dB#&lrV{We(&mPGagaX(wG`v+h7w|3+vdzB56-VjF zMe6A-ueu3aCJ~@oxRPGSmWo>rPWcALBBEi8G(LQqz-L`QeKpftA6Y;wH;jvigd2^> zA1NDMDpBK>&XsH2X-sBgUMUl4UBy!6o z+3wYQ#9CL;OBts8jwU20ad~J@xR?nHl3f>hP_*~qy8tL8BO)#jgJRebBSw3;4tC=L zTpo23T$e}C*jM_jkp`HxDwkU%%Z9nm>O>-^I?=@c&3Myu9EpyIdL7ZZu4q+1ZVY>H zyRyL&mM63RQYgrc%(;%_0k&@2xI7d?K4ZQ})_K zAc%)oJ$}o$?V3Ze_6@0UV2y?c9v@^kZeOA3g`DCJkYnQTheQhWzq9rIwf&cNeao@~ zPw8?_qfP`HYaye{dnJ_1=7^j3`*b-YJf8%%k?;fjTGM3?p!*DJ&6RHm@~iPIq)9TK z`TUOF3|-_(qfzg5;PuDrt&Pj7@o})xY}ZiTIQ%QJVz=XG3H{I%*J2~^o8TmCiNpjU(AZ3*@0AK>+a#E6| zY$ZxI3w?Hs-YTsO*`dI1&~Is+qh>)0mLVNOaiPEr6K6q@KNIDR-J}n^o+5w*F#>uw z$-&B_BBOqu)2JWJ4F@gf91=lkg#OM5LTTaW(qt=^RH|p~S0nxuI8@Tv9kqM29H^z5 zMb2ZCxt|#NY^P8V7$$}x`5;4@YQHKT`V0fiBOY^y4Bbpp=~aHsAU#7P)f9hvF!b3$ zqKi~C?p3n|Ekd8}1hlAa3&hqh@_Qm7S&>f4s43+dmR`!e$+v*3-U(4N#O2HTAd|@z z#EKxqQ8JHs(TjZO`E!&(n+VC11|7LVA>=K?(_9gDny`6fLb)REibn3GJ{IiyGMZdw zR5ZDRj}_+!P#3z~vFBu)!1QGu)Y5?>yLJzZp`0vGQ&=2u%kkqMXn3f#Nc@~eE(Vx? z=FEKQl^4hAH^d8yBkTM|#U7}~Pr3Rc8+BDaxW=mw?|Mt#ljeKPACK~zGsg)U{S}}# z{NZYpK6gAk*^3RL+3w|zla%+wW^n`TK+X3u^wQj+rpWL3Bw5AU7KfMtmfGizdAdq( z?E9P^s$zl7+I6*n>gyWy5o%+PLNTzbkM)73j}@pe-+*TIDibU8fjkwm0fuceN`Uv( zD+D?pB6J}HEFv#(*qxB~r{O=XUl1h|at~<7;gNM`CQAq8PLjUMTv--@WZrf5VzD+r z?PUCm1Q(eA7=U8$%An8+h`(2^i_1TU@1o~~KlGNaHzE%K8ro+->;$X| z7A~FLra5^!yNws6d3@|l)b3t$;t08(Ci;cs9wE~$6O~d?7ZioZ+f;4+*dC!@$zJuA zUCU-@kyVO@Ce;M%DN+~=2nQ6U*ZQ?8rCP9eRJsK*is=?4Xtvz~^;F{jFnD2l)oale zwLj715qiMR0iYsZGB}@5r?f{#-pbL9D`dd3G)1&5qGU*JVb@VK!uo(1hU4aHJtdEp z%J7d}Y6pKpFc}@A;v9C|bmG$Zt>hzYu+!I(W_e@hdreV1aUn9s{hAp$I1raD2oK}@ z+!<3$Fv84?EF&zhpezd-k!Aea4AM%_a01j~F;TIb3gp?+e(VKCxS9x z#B~B#P)0Oep2m-CX#V12#Ui~!HpL?Sm;`m56Vl_wGaffM9~z~d(8eAbXKo4Yxqz)h zJpSBSTqb_R64teR-t2W8_HII9%P|%t<4#VuL)~JO-3(Q)baW8##)sv)F~O8Ou6GuX zm=Z6}ir?!ZMn@uC7Un~ z9j zj+;ksAKgKrg82!5e55Lr<8^eHA4~6x{APQld7{$n^v33nNYAI4g!hH~$eI`h<%$0dBAMRT4v;RBXr6?HZb?{naiwjuuA2u3pa~cf>gskQh>|qksyyX^HX|8X# z-{mB(sXBDDx8@?FVUqy&#Ger8ezQrS`yKLQsGk&cKvPZL2&$1P&NLdPP{mo*+}QoE z(VN>pRD30;s#TaB6c}~lZ@1Fyk%6x?52~?`go%R^&r);NhZd`elo1c@6{Az8a#L5R z)3NEOvHZ}MU26V4C5bKj%wy_tES5)A=o8pir?FV5ZG2KM^DZ_DRhFMHj1!wxRwt-G zK+wSYl2xy8n0I@WX|TfK*d5~p@kTNGGNU5|YgrNDpECa`c{zm+sEbE;5GWGdu&1vK zmW73MK(g1DIsCCRfA=5a)ge)V1#h`nMim&L{-n~gJBi~Yk2B{AbDzgNz%@D%ZOgb` z%#SyXKQ?F{CuCK`ra_~+6he*i(vcCMp~5WMjot?wPEHu7v8hnfy}r`5w4#Vs%zqRn zpeV%S%@H36o`%os=y0Wbc=pe4)L&^H!Q8B-99NV$pA_Cg!nTRv5o zQIb%P>xss<2&`hshxUPZ#}!72lX{I&U6OLrWJiXOXwU3OIwmu#CPL5SIP4pgRsnLR zZtnYI4>N_k^c4Ed9=RGtjzT6fI~kO%nvg79hRs-9D+C}lZKA2;{cWRuii6p@laKG| z>6*gqT>TqSJC8FvWYW-UFT^ct$;Q;&-S%slyN&;1?p~GDugx7EwAI`_Ek;4iogi=B zw}mnC(B*HypGijjc(YsZr%ZSc!Ji2W1%KW%mLKH~K`)9ymNosTY~WcSoa2z)W@E9JcBV#ZA0OB1 zhKWjk2z8;($wH2xeVBC@l*<#EC9Skl=$>ln#s8|MaS|A-bW7XozD8S2p)K*TV{X^- z=p%3#1Yf^P2k+NGhn@O;9o#uxr%u+vH|^lHI+$f=9!2mJ{vaj4;?BV7kBy+K>HT~R zBu^GmDZh-?IN8r*lk%Z-Vw3VTk>l;;j&cqxA~&(1%=K>dQs62XTYJT9692b3 zqc{76#&9mxK3n$TR`Ub3bWYueMFaXjEz1ddA0A0oSb=e+*q~vZPnBx5u;qKHlcT%OjXpV#9gnd;C)Z6J3YP%_l$V9_ zu%kOV${jk+ZX#gQ=v)UtI657xfjH?) z1`c+%z@hEe)6{PQmv>bPoZL+jaH5Nm!KnL!MK5|B4;y;E8gip<332K9iBH5 zFZba;tFC>dIH!N$V|VSFZ?ne4*gv2&wK*7P%ISE`W$lfSa1T3*WOW7p-Z$$@Y8jH1 zW0I`EbColz^L?=ga{7q%W%;xMv3`xWWUbG9U{s}9jm7){b|u7dT)WAp7n_zJ*d}5$>+a=uBzP;XqVjcph)DVf>EkO;5}Pt53Rw(q_2Q(56%7y)3V<)B1nm_ z>Bj+CeC)638Q!}`pgl<5%aHh5u2a&das-7az9u;ta?t*g4B47XML1t;Jta5>UK{lj zhfm0^$q|kEZ;1;sEJhgpP_OkY!SsHo#tUNkIFWtEj6*XbQsXA)^jHoOW8Er+GwR|~ z^^Z#Vc$Ua_U=0*}6cl{1NFXASaiv>P@CW&Yf=^HsT*iys@TacWygXiph|Li?4w@|( z<&7{HZtmY5vEu)JBZT4 z2D;`iPvM1dKf;O^33_x2e`JeHBQoq!4q{Vw@*bvCMwp#`tG<*XTb1z)qAv=J6Ohgi zsFE*dz~?JnGhf+vzQGLg47MXMS>wB~2rHSBUUzU&Zx*gCjr!Yqg55oa$L3inx!}Xh zgk_H`W`99fF2|)-hs>s0H~&2x2Oi|tEZCkdEbnz%uTmI$+7qt8AEkLO$$kVwUUQqZ zTkyrUlQ!zlivRn+JwZ&OJ13q8*{{FN(I=*05;0Sp@q!y|Bd^5KoOr=h&2ZBy#Jx4f zVtH0a@@3Z^T@9!O%T{hBCUo@L`R@~bmbodkyDZF0W)+O!%5CI;rF?y*989B#Z~uFy z|B|~;?f-w;qxdo1oO-(6w>f`EH|K+sn)B^G%~_Rh&Og9o)vGyxNsZe0_C>O8-@we5 zew{u4TPd42d+@9r95Tem_~JG5_Hc1l#1RGKGToH3q&eJLX>rybm2S_kpS^jXbbo&k zD>-rE7$$`OhfHiwSrpFvkb?3V8-=v|6etVY-b}S;^Eb9W!^#1=1w&JyczS8;_ zfNDL2*98hz?q$HNd2}X&KP!(&oNV{HUPW&dcZmg4=#Uo0J`pv|XNpSM+czBNDEF3K zrVBH{T>~mOH5b|bujtlNd$_CE`V~P{r`Tu5s6tn^PFJSq&(;>DME`MC35CF?Z{k#h z#tPB0p6gaS|AUidd+kiVGF-M-4bMJLH^Q>4wEf6&4({LMDCrAjB81zghs0Ufcg0tk zxemc@gWxGQc=-QHgc>%hee$|T@@FI1qDnvJ9g|Snd}E2Yjk=Pe?IyPSBR4Fej1Wdj ztj>6^27sd7cfxYLD6FzUjPQo$9ZV{wZe= z9ZDC;3BNLvNgwb(O@`o`vR7pV?v|6s2Zd+hOh3Z80e*vfAHRwt5a>0(QieD7fnZ_svu|m;o1ajv zz9fRFj_hdu_~ncJphbLakRR?ZV5-tOQk1{16$wOh4W3oRhNos&ZA=*}6%kw8E9OEq z^Y~EqL$h%zWrUY8biAM7r!&`syXNElp`iEE$Za=W|ri>0+s0XC9$obLu$|?^1NRAtLb!_Su-(J*;UGgopOPcd=^j$BfKNWm02}p ziF5k4^(Nq0AL^>Wzf@1#+Fw)cKgC|g2!A3&Egr#Q-;q;dnXef{VUr_RYrdZ>r$SrB z{yjcz5BjnYww^DH%8GF=VdwFOFN-d=LJZ!eXiG#Av}ldK1q;&$$mN|E1e>FR7yLO2Z;Q1isVr#nZ)JK}4pP_H-t26iA+a z774_aR^!nd12{bHmF4q)(HF+!RA3B+9X1AKDVh7^S5mod8d_8IebkF`cEkyJesT$m zSB?VFjc^BLo?vNw?8fW0>S=WW3-Hj1)WObXnw>=un8s!oYzKa^i0>Ihc{Et<1>^ zl9}C#0(isU2l~3dZ@mvHYPy-($iQk3S>r3BcEzJHf>Boygg=n#XRxTW(+2U+xi2}2 z)o7ij@m#`<&{Ru~QNVi%&t(R!ZJBTz8?e=w2^UHE-)F+VW+7QmXTnPa-qB3BO2WG` z;j$vaEtzm5y|VtA3D0G?tfiT7o0NZ4hg0-47QkX=pFB^Q+|5|VZgF`{HJq#sxTHy( zDrGCv-qG8Wzh*>3@#73n8L9U8#RB=f3W7t4)sD*e$j0RV1xo4nUG}8-SP~1iTeGRu zE~#9`fY(DN3G=oud5n#-4?^4cS~DfID93?6&-mCU$Y`w{BrG2DWAkyin(e5$!5g|Z ztLAd@^!Q|vuyT^WB%@kV*kMd$a`W*}Ec7bn-%{tQhsjjA+P9|oGqM8cV*uS@-KJ^- zali-B6?K#H$-7d7TAo+VC&_+?^(#=bPum4gl>RquDhel4bGPcrS%4TtPc$kjL(#(+ zSHYijD#PZm)D<5)XCTZ|4tQakSU>6wJ%&1HI!WiKJ|0Z2q!^tWDudSpQ4okc=c34R z8SSm0jq-fl6{^9wa{aApu(?0z9pRMBLezzS()bQxUIshe{%3nW<71~%k##d@o!m)P zI3OD#BosplA?d04(Y=!S*(}+Ilk;oyGg0{LYh;p?A9v=9b9b-I6xU9_Fl3^*OW}=8 zD5gKxr6xFSoPziEe6*s zLgcl#_niQUEyxk2!6l*z>FZQONGkO`%or?@&M*mw&JezIN&(lIc(xcPIG=Fq!((n3 zy*acuoBNHO9kJW;N}G(j+h{9Z<}gk2aEoZYyYoYj;oT$ytL@XhSh(cy&3SN^yL9us zg`U{mDEBx?mxzSrlp3((bBA_2-0=qi%y;Jzcj;=UY+y3IrKkYlu#aOc9o|VEi=g3o@62U(pgjIbzlOM51k@CFF4hpRf zsw}ZHH-%hT?XRTdVEY%X&>-d6;}gYw;%seEewkt=HWT5#&Bwu}ZJZNxGU4wE+t$i! z8%9L*7xLN;5nGkXjIg=l+ND)Ak?-=XNPk9n^`y8d(MGjJ?5v@WCic|#B0tu z?u+}+>G6ZOhurAdsZ;1m7pkYLx_yaHT>g^nSWIa;h~3A-Jx0T<4sp#LIyj2(+~Y>W zv@dyU38h&Q3)O~M1Np-RjgTeD)13VA=Ht%or*R>T>|E={``6TQk9iI|2;sm zE|PXF5P(wz;2Z(?BLL0;;N1f7?*4wrUL;Fs!kx?va^oTK8=4f_(`D`m?d_7o#e}zW zTV*`Y=Z)t@6wZ{iGHGR{Ul`#Ppj^opydjFOGF-_nK0rFJ6^SAnEw>b;&B;*Z~%-JkgEYGduz>>HTI<5S{yGHs4c)o$}!66@sSj&Awl?N9TLFXbys zzCKq#sy$MY?i8voCtuUL)u%%~zf_;%TXmY9-&ot2U2Qr5)99==-2%DM!G{2D5#E=N9EJq>yDO*LX@Xw z%6d`}C+vvhsfc3?QR(XWk4U&D)a)d4w|w)!T^Wb(MDo#rG0H|}%{CI>p^a4P0dD&}Bn|HU^>KBmNj+Iikv_`MW8C=2#tr~OxY#%n%< zLmQoC(S`Z(xm@)dz0O$PToyeXU0ZEV8a!dZ{9)-k4Xk{xS#DpwQi`f2`m%#0*!NaW z$pD`tB)L__j|FC%GBEe*yKkEv7 zVtrR=yv<*&RmAc>N$%t1Z5@51RYpd1bPnGXZGXEvGM(?9W{F zmkALh=_en80IpO_b}EKrYMlp#eQV$i%SSC~{)zX|uow43cjGmXQ^z6YJk?7U-M_oi z{X2uc!H*_gQ7?U%?1<7uFYT8vhOsB`k-BoqL-(UQtg@6IJEaoDzU!8ojQZ>HG0EMX z9mF^7nRjp;sl+=q({?@3qvZo3%KSFu@yi=?uVpbJv1=yA{bR+OP*=%YW((C03hi^1 zMIS9r>iJ?rs*J77f%aF*MTn0WLtkuVmf8y*Ej|QiuibvJb#%%1BM^KH(vDZ~M11|7 z#YrFj);a1+a_np#Zy%PzZ(eum@56EiMXDP=ykW5dp=}uEVKm>c(1mwFxtoF|0>6#i zQ)$Vm#?~+*r^40ZQKwxsgXidUdp+OBi-XV zj$1xT6M_EKZk}d*Q6De2|6H#hyL(s!ZBRq8hN$&ink7Sl&io%q3PG zV;)o;*ZzxW5LAhWp2Pj6L1jEcS)DkTvxTj+msdi3u`!*Lc-&ZCQ+!<5vO|tTs>z3{ z@y;N*8s#mKSRT1t?!N0t)^3+tvkRFyHBv_Sd`3yeix>JBC4bztFufjVIJARCGCPbHf2XE=;T^R z#Ro=M{LAq;8}uC>rT%uuxYn8$Fugbn&snZQ$VwiFzx*>Mu32M~D~rj~2%&I_EG|d; zGNo5!ZAs%Q%(qixWPOmKcOdOb8)^2j zczmB!A`AAv$K$7MJYKBv_$2gL=!crm26l-zg^jaUQwo@4|XvP%LGQfo&uwu8~o$8 z*1VaS2fl`lNX-M*P}}h;-)AB`4ql3thew%-Ut#a4C;+r2;nY2*qm8Wg z0D{|oER`br<)9Ny6x{%C?DDiU;rN&3DF{2biGjENsWt-U6Z_s?YcC-^z67=rNXa8c zSey+ZvKNMW;2SpV$6gK#9*^I}JEJ{c8SU$K#;@uz^3+J|o%G z7NSAW|32WIeZZ&b2cpt%uFB3rKENChmB*j^iyS$j7)CfR13vS%t3|Rl=%E z!&CYj>?yGsmR;)^+7navRXUo`xh^JXzF)gRmYvxktrg|=PuRnGcXRJfk69N4zhVt? z+85kV=7~P@C}C4yc!}Z4qzpalb7A7D&AO-fq2Rf-_^n#hTe~6Xz`Rry?eiWDi9ISY zE1jtMruf)xr6`u}AE@;Xj6*KtVEwt@*X2{&r?A_6Pq_;qYxnqUIVq6mg>sU!k>5qo z^_Yj#H|=pwZnFy3Bo`1NVtPJP`mJ+P_pyh1U&&%L_~-KGDl}n;%S41NmG-@z`}OuP zvNc~T?_w-ZE`Jn#z4g@pwmjo=O8Hl%y#Jfaga1sCzO#Ol#<68(fg6Kwm*I5T+@dj! zD+V>U)ppO|)+YK^Y;4p$+uH8GO<-|`Zv;U6iL|@C`B&Vb^@{(+G>8gua}GUUVn<$1 zTO@K7k!t>46Qj0RWUJr+TS=j`CUl(jrz|<25eZvPG)EyRDRr~?!rNpebo!0VUA3`2 zflCsVqE4LB_^V72BWD3FRZ_~FN12w0KoBRveM^ttY(@lUtIef?kNWO5=Tw5D^3QB* zjtCArgP-=)?g>hay02qIn)uEO>X3cv#d_72kI#`7i_7}Z0CnqwpY5z&&%&Sq577Jv z5aEA-I|AJeYo08_C3;9+`*W33#wC)3rg5TL4Gx-Wu+$($wiEpg@ZTxIIGeR(!`}@2 zrZoJ)3cl!aMuM1f;Pz{v%DVZU4*rawqL02 z)~~fBo8SC1XOM^Aa~la)8zWk)jhok38{ghG|H>m?V`O8sac~{U!>4yRNxr3x$Vdm zvRMz&9Z@yS1GAF1I#cONzkc%lE4XZVYX`f1ampi9?f)_{KC?Gv3K97QVZDsY=%V>n zC3oQTT7;V`68t<<*l<)qBiyAsjHkuE)F*GraVn?ouHOuEFII_foFrw)Y%$z~_rSCn-@EVhxuo@P?TmXs3n|m8ONPSh{-A&5_2(tNb(DMsHSrK`Ubl zlrKJk>ljVkFRmX3v-h1!b1P0phfS}pC>=KYp?pttfG_rpKrV}p95i~JuXJ-@Ethx( zD437`S=wDhbBypt5ZM=NkgSpIkMoGCT#lZ(n#(?Lm`x6L(HbB7_R!L;j~W6SVEpAsJ$VH?!%E4ZF9?|}J`Vj(^c)xM?g-}e=@ByP1ajUKlW=i& zNjFD{zvv>uByp9j$o4FBrRk4JAOd!czKv1=e7_z(|EB^aC}X+oih#CVq7?xqB;n6TFH82+`M z(#GrJ1;~Gujqb!J{W^Ex6eo9Ey8%DvFWD{X zR`9u_{d6zg13k0-rOh>uR_f(Jsl3sp+aCQy@Oow|%c&rjOX$4X8?unLKYZ+f(Qqj` zkVW2XW*xs(-4rj^R>Q$i*-$ATjy58+azstm+Fn5Vf;2Oq#ZMJyZ{yk_J?Vssk$niK7IUrD6AxdVth$_ z8rg)_?tUYuP}7SJh=;;Gh!gkO+r9C>i6%z~K%uvvrfv#UE#~PIyYYji*-wMqJn8wCdvu zv(s(9-<~hBuNtqf*q2DB?~fskPdrf~iqyv(Vv*MQ5$Acki0mopGFv)#8a@;n^^ZAu zDv!wCOe9a|aZ7RJqCdVNH=YHv+4H6)>%KgWP{0@5Itok%SyF}WRL=a=+;2BwQhdTL zb)4OQG|zQ)Mc=JPQ{Xkf=PCUPLl34-jzMmwgV_9Ki*Ct}XHDJHr^G;-?)ap}FC?v0 zv?hh^r!o6Eg5Trh#M2PT|9~|wMR=J!*$b==&S^8HSulm|Lo&uVYjeDyMp?}TJmQG# z`f1Ilm~B_&G?tGqwp>=L-?5fO z@xv_lxGw`2ma~E8pwzI_pt%aNoyDjhlV4H#Wxyzl2FRk)B+dsz;8zU6pV;)JY4{R% z6_!WGNG=K6P2>d{7haOa4E01^qig`4C;)V>>!JmPy5CQ~toohHkmJ&YZ>RycG<0j? zu6&=l83Kqg>xPQb!;ig12Yk7cy=wVudkDpoJpxjs1QG3*?IxrVWt5wbAfhD_9(~mE2yaE@wuX>P7S#4A`D9M0 z2l-?JcwO70<&!49yAE;Pa{J zf%Wl_h+%O13H_ev3QK(VWb#F}FGAlwHkhvSyQwN23vYL>@pCKot6R`}}btHy{Zd+>X4k`-lfYVAy_VmIw}8ISm`Jny98k|LO|k z<^+dDcWy;^_y`DZi4<}pP^tGVoS4#X5j@7}mh3j_o+XB~7KDjS^M{InQJ~XW=jVt- zafWVDGq6%pjJ04GB~~xEgTK2L+(OAiRxi)=+2hq$!Wp~3I$6T8kZ_VB;e3vS^A14i z)2&VI+?k(%m)7=w^=1o@K#$jqV>V=iTSmLwaO_eg6>wu68|`8=kjY}5~$O-l5$ znmTBk!sps&M4ye?7VY{brs)xE2~3S#OhD&hvl6j|oWMIZ6s zXq}B;vXkgn>dY`@7c=4{3obDdz8Ftyp4dx5-=Vi{)o$Z~HKJS*F>;{{xTtYl#qglU z)4wH?Sm_qn4tw?>c7B%u5OvNqr-4LDe`LNOZT6T7X7KGIvq`i|E;c9>i3rEfk*ak| zJjRv04tj076>JQg<$a}hCsQLzQ>E_lUZ50VolRL;GqQ|`C31CrM6il2+z6YnD7@}D zuvR$>#X}oX_X=@$Hi0`49x^X;1un0BNwif0mmB^#<6hKjszoBME+ci^T&&%*2t}-^ zd>cxZEZ*^{Jt}|E5(C6+8y=*ht3{b+gl}O`Xpbw)RWn#pfPHn4DKx_4sUJ6fqF=+3 z^l8c65E0c|wHf(2KON0QMq~&1Q{547UmZ;OChU@=$9w% z6|tnzsNY^~x{BTUDF8y=_yUK|akzcBUPqqj1)k_^hbQ`=Q%pBQ2_(=B*qaC>L_(u} z0Gs)T6MAcQ!*O+WT!0W)QPRbE$m)uCn63#z-WEYAz23xu-87& zh?J31M#`XS9OZh!DQFp)jdYelmEq{-PiQQ~r=qC_QaPH+=*wfP1kaNZsH*7E{vx<3 zbjYYzUPMI=xouwxxz)r?VjjhL*$hy*1H?;BV!hJCBD?elb5Rsu0Vu)XZct79Bs_rw zD^F~NG~c~SNG2{clBZLzM{X3YNjmv7SIZKO$YV)j{%Gj6AZSrNeuZEK?^RHx%JhVt z=~8~R4%lHUbK8dJAYO&KxM2JOjZlJA9~YX}s<}?N&{W0-nemXN6D*UZBY%y^gQD_i zi0dZARTCoL7iMmJTw!OVia=)NR-18IE7ny~OvVvk+OvzHrmstnSy0k_>uPuldtXb9 zUPSmdxl9tC#CX|jD|`*#8gE&osZK>MBWq|+=PQf^t7es`<@CD8nP)z0!Ax+|_$V*! zEhmTQQ_q5|y~;3U#TWFJ;B028EG3Z+aC7d*jwL(Oe}n;)pV?cuj5+s&zqB#%IhZgA zpsF??A6AfW0h)qXa@gvnmNdN%u9^#My78h25DgI-ILKLQMa$rriNx+4JWHW!%c)H) z3S#MXC}HLIlP{xT9ZxZ0&(WY3zuBDFn^V%vvXQ*ak^@guiO=)BcJ7Yh5XD|^?jfV0 zGv%#NIci63r0TYYDnW)<s-z#^Th#ZTz|1!{FpD6vLGKnGOql{C=1SH0d)vaK|@3lQgC~temDup zvW_ApXF71whS4@$c8aUjb`jY`J~k+|1z?Zo&5j7ZAdCV}%_pW(qDm%c*DtM+`o)O( zSxPfFx-p9h$jCp=Z+tRx)KVGz(9tuD#s5V|pKE{j<9m?( z-JkD%>RXc?>la;|Uz_W#$N5dKhuA9FaFZ3BnrqspBk)_8oQgytE)u?!2}{XqHa$MG zPktfLlK%ob|C*EY3q?t;Me-2_rh+uPIkTi0+z(tK^Z~4wIb;>o_)rh9o9>cWAp!A6 zM}2+$qrn(06u_vTi>6b3^E(%`P~TV|w*=nhL|M}v>n;|VrcnRB)A?{jtgT*>rTj zQyj>1K(~I%9}UkNdqD;O?&2jG580r2Bw9A6@N|2lI!wInoAu4q{`3>OvP$x>Bn11} z%KxItS^WyZ`>3lJ8@J>{JLgPtl4Yr#Rc{$Or)*o{Z&NGOZ5AbE!`;nt@RaVtUfBJb zkSDh>WercTn2j(qP1WcvMVFqC5A6Nwo8{w-c6VldD9h-507LIo?1|pzh&u6On@NwB z3z~~{hUm-PrLD%(v#Bz5{m+3_)-~8>_6F)f5y1(g{t6~}R9Tdtc`S4Jlwa`)>l!68 zvMf1JXKd}a^tt4=&yM4{fsqz{2#T44C?RCe2vHfWi#SnhxmGng2)|LW+vOUW<$ z`i1=JT{yF;mpeyyAV=XdNu98;m3K$0PLy^o!ryZTTV;Ig#rC|pvA$Vi)2El1!;|S# zOY*;%Me(nS44R=&Qth9B^R;Tld9bQ?lv@r@(>w$|xfktcd&~6UkaVrCIt}Eob)DjR z6<*oBwflcQ3DyL1rs<ERTnC1eQM* zKSWl|UV9x~JPN~FadQ&f@7rmqD8r$_wHdZCyS!eS&n@w-`EVAQ1lsMq)Rot*b?bHpL z{xmFAi>`hG7Yyo0%1PCjd~(W2mPIEN6E2XHJPeh`|&0_>#qwh2=&E5^jx%i@7{z5RU76FAl{*>Fa$v!14F$>BRhy+S{q5JG zkZq%rO2mFUQc7BAFMQ-R@{w>5Plfq#Yxfg@mvuR7NAS&#mKPH$Q6VEdh2Lm-NyiV0 zV*{h*m-1}H;wqxjwyFt?@3}}-=cRqN{>rGIKip_|W)?BJS$9wXm!&mlP+^v{W&n?e zu%Qgch7`ZI0~X{;Zxk^Z-BE4MyO2=}uSY!c#u~H=;_tte@oZ=is$OmW{f~r{M}suI zoHu+~8Kx7Ikr4^)I>s9ku)%K#kkFfAYCt#tMo5iiM2=mW%ZF#bAqjH!@?WZC!XC@! z@)B+h5&e-w%jpp(?z@ihOk=csI2RNy>{vq!-;~6T#uFG=^A)6w^bTI)cajilbxCeL z!jTt=%IwG3iuN7PI%$};?M*;4)k_?G2X%?Sb=9ajS5LsNM!=ULvsUr}y~U@jL&9hC z91oLzoYS327lsm?>S{BN=%nE_6V><%K1%aq&nSF+Qt;8LQBc5R#!k=IVd;UH0A{{D zB-Zc9c{{ao!o<^D<^6PizQCAZX={KkVQc8ThwhnxQ>iGAhyM z_ve7cn*-x-gfG>Pm2g_Qej7L9c)0|2SyL7K@KcO~aE#!WD$;_p z<(E~|O@lFmj}3`V93r&kAH=0;3vZxLo<7=}`iWFoyGC#7>WuuD} zLc!eTI=6b0p`s+gF5rFz0ATD>#Y_0*@{%B{QUAi(WHmQ8%) zD{u~Zen|jhJXh)AMFpfwQ2wd$T243g5I%b;ZLK@KP=%4+{$qstV#M#EJ2BmvH$hwY zzKJx9<{YawX7PaTj2?2vBO7-9=d9LEC%K>(1tklyow0l|PNxzhZJZM{<#4 zHt^?gk~(`QVIWA{cFab91cdGH7=yg%L=G8|AHyp9(RrX5@j9A(rHx2ltOV`}Z0Wk7 zE9&&d%ejJp+f{XshZ_qjx*YviIev(V7k?n^PC9$J|@_qsF**bqV@%Wr0zZlOD z@6z$;ZOZ$p_{}=LpN{WGe18?cQpfk#@m$R;AE4rYtK$dgcy9lf=cxE6b$pJF$C#l! zm-zYfsWVr{ba%Omb|iNhA6{B#|6 zI&o)69PcodpP}Q7=d0XpA(qmWh4W4el zz{bQ&!@;rv#S7L79IjyqosQl#MCcw5ud6D`L}Pw0m@DR?(W{BWm`McN z&pt%vzFhLu-^7C=wCOK!r$PX10uj4XU4x6WE)~2c6==?%HQ^YfN6Q*`Zba6z6QoQE7*{8g`I>Kcs?_S0!nXx||%&#RPo1C zmCs*)6^cJW_U%VN_(R0Fs!$|t%Ap|3?ZGxaX0Sef#0s0kdYHx9n1RXiQR4hq#+XcmNE0Q5C72+TrKHh8$a*5$F^U{sIyKFpSE4l9w!sf$Buiny)_?G~CpzesV zlX#^e5we2jMsa++(Ho!SO!OAI9bKL%ubpf#7SGUG%O!92sd-(gyk%HMlUd%M18%vC z%>7Qy+&`V!sWSJsGjsKI(tuMl=cF@dtIXRVI0Bh1bYU)MWub#X-ge!cUve~Yw9w;7 zaNm@+4^(;oV&~-!)}+%;1)P@#+)rheQ%(V#N9NN{&3r~WbAOfjCOh*PWHwICoS)7- zKxMwz&WyS7q(P@<9-PjMp&TQ3l;tkXfXYl7a%$#+bmm-@`E5IM0h!M{HS^GPW<46e zvNI1Q^I4~6E=*@W4aoE7OB1kEn{@W68P7>)%#)0jlJOiee(ThX!_pZ~myE>-t;5K7 zE@wnw8Sf_Nm#j~87xGG56=YQNXEq)E8ud$2KE?ZnT^aqxBZFXlCJ%vtu&pcU;nh;c z&t~In{y4k~{UW3b!uh`X5{~z6zPzy;U?Mda7{56OD&}ISnjR`iwTJd1CPK|ZNhkM~ zqfAlLy!}$FPfNXyb&zTpt{ZY-DBxDDxhZ{Sir6tj3qH*sdm)FPSiF_E*m$?P zUH@yOC8O>_&Q&V#ml1Z0gd%%TL6m*k*G zjs^Vj`{xd5_b=JfwWWt^$um2)V1(&PcxU#iTe{H;qp%Y(*I@}&MStLo!Y#yHMn_Qs`8e6{ z>}kUl4r(61U<@Lr&vDcb{S5t``N6i*ThauYU^DQ(chl#bQO$L7a5@U=w$XSt;V;GB z_gQwm1bz+AWdK9n=NpT+$(Ol_J>kr1rU{4nm;-su4LIv^rR5d1)j8BwH^|=V6nV!u zCtpCRM5jVit6-*xdsW8`j827ltAcSN?j;?U7o7^@Rt1wp z+|P8}8PTaQZB_Xy?lB#gADzk|Rt+X@{!eJf;OJDCwWKTO3lkn*rMV=RR8=8OUvub0f zoy1=yY~D&s*Tc?WaiplnZ+Vp5YLPRnB@m{3?rBdzu9!@0YDLHAI+#Chdi}C3%{Wz5`zDN`ggiAxz8eO)71#HBQ6i|vq$&W1M}sN6{4_Z}<~%>k z96M{SMNNs1Jg;^iRZ{0x7N@$Gx44025D(&Fkdc?lE>S*qte_^8K3SD zuQyfxc-{gW;nX`SOW&%%nGzmJUQBpPJK+GEJvo@u_(usuaVcD`zc|ZSg2n}t8dUIj zA*UH0WP1f$?DEB8AFBX257EjI*EDbLVYl1@;a=DbN$@3hK_Tufp6kse_x;5WOQhHQ zWwG>t%wnorCUNqX#w;><%-4&bk~GOjy81afDgNjcC+w(6c=Cbn-^M3 zs8B-V_$c6JSuwx)M#BSV7!7xc_n*7aX*b-8TEAg(fBszOA_S>zs0QksVL0W1t2BQk zb=_USpWE{JGbN8d*Hh7LF7J45@gPS-6+N+Es!0*IO6*9CrNIrbX&!T%T&S2KS32f~ zc6Z79LJxb%E5mPY^u+XFdys;BW|yyX>y-GI>u!kGL?E32a+kgZPJqB%LE$ABx7cd2 z-!k^1C@>ap2a4cCnOuUX@^b+put9~kG>L$lM15ZrGGN9L+eKQ!WC)A&-690#g z>Wa95OUOLn;Kx|onq6ICo~?oozNU+0pxpuazLanmhnJp(N4cg==C*9^zQM1rZF8Ck z1ZEZT{n|E%=voQD>91|eay!;b;7dq!Cy(`w`MED%aH}A1e(A=VTg7@jKYCrSC;B*t zJGb>lZ$-ay4+^gC1(3R2aj**HttlLgRZ#~M-@#w8xq&nTD@6JCndR-@} z9Yi0C-ue|k-O*dWjQzX4G(W72-@i1=9j)kfzv?W?$|{e$gj{D;L?7$%=))tX`i8+G zSX!6-Q?|Y`VGMY7cPMm2GX^h1GGGjN9&RmHIQVI*2)}29e~4NMcLYZGPCn%9?^BeO zp@RwtZ~XP;C?oo$8TC?idq~D1 zMc|cK&6eUw-u^0wt7uP-2<_EuW^*J5p_gkyD0#C)$(vOM+1vy##b*(W$6j&nhOgJ- zPIml*$$hPIIuw*iNW<4G;i@e{_4Og%Klb<4=iQJmwa0LUgF5kd)Ezv^9uy&uH~Xd> zJxRYB$RyCTITG8sl`Ec4z(#>giidSEM%?O{$C2U{(Mb-zoTz34go#_v(iZdadu zZkRM)^T=wCQ@YZZ*Jbv(V@WBd`FC+!a?{|H%C@djAgcGLVUP6jg*B15G(JQp4zl{G zYVGpc@Kp>0w*%I$mx&b3#j0KO8`A_~bTw;>+Fyo6ZEJON!B%w_2q#C;%?G>DnrtPu!rY^`Rkqy0JlRU~ z3vQhhA9IcozNA<-#p90o_f^F2EEWaj3xXkjbEm&#qd4ioAazM}iijf|-yF>GM6Z{1 zfOH+5(oa4(RhokD9TCo>Q{?U=ZdjsIgr`Qdk4};GG0+n=W&^@Ricxm!Ww{u1ZUZPP!k z`lpdhPWw}Syt!Ta2lsK{_NKtEES&VpSsW9QOU-3Q{YGgwWMI%4+v3EPfWbOm9XdE_+rVl{nlE2P!@ND5lvz zTRX4MT0qh#@uFdU+^&Y&Bga%6*hp^MQ-@` z4QZuJ@)GYZ-4ghynVUttDjB3_?9^?xCnkBzG;%t9w;tk8r7WTYEI8Q=J|H7r6^(`! zVznril!$c$t4j|X;V{Gzz)0KNL04<2JMankVB^=x=Vg($Pt_a-Id&B;JhW;S2*;4W zLOc^WhtM*p;U5TE3CWQ@e?-a3%DW2+!lOGlrhuOpZI%PnakP48 zZU{9yVoyCKhZ|eEJf+Ri3*AQLVVa2i$};bs*Jce-#EQv3=|FEbypeUOv{EU6tI1^L z@rU!6Q;vE*L9kFq7qbK}Ge5XhJnEwsj#&-tW z+{VRx2!hGI$WyqDSNgS&lyh(4Grog{13p99kf}Z06CKQCx>DT4bAX|xLLqO=7K&qY z6HU^5B2VTfY_>qZSCHDbW2@ACZ=M$r3`Y+x3U{?C=TUjEo6UMOeN)@g?FUdoaWWm5 z%7>ix`S^wYbGS@1lolNu8zbrk)!G6FtV>CTBlbI*eU3vZVeH31Q@g|%C0UK$Txo9d zb#6-SzwW5NiY4*r&|Y`+(W)MqDTLra($~3pO59b2!@pklDkqAdiE-=!)7;;WHTPG- zeH2JN^yeG<$B8CAw9W=CQuT3Hm>zQBM9Y(x@WnYtzCPO+!HJ%+_*Q);2QofSm=qYx z-d%J}NX4+>LW~x2O&kUYR?!}L*>pMC>ErN@=_v1x{-7&b4*Oev>}zSqqd(}5mLDVS z#7Sw<9~@WH{XyVA{pPXM_O*!mHNGK)MlO*M3kw3PS&tF_Shb@hrEETZj~QXry|V{-^l|VNctLP#nORa^MLY zHAxWF2~#Qz>HC5G)_o{=)%YkR*%(jHm)oN_AMYsqLc{f_lm zMhAA-CdOy|$+pV@fRHX8I z1va>#I~R@cqIg^^UF$iBoCGDAhd!~Z8Vkult5JWndi*L;aRy$8hv^|8I?cfHlpN*c zLn$+bXHuHX_TPg?xVJ%AOH{HdRJmXlIhx_lce?7BOsn#qgp=+A*EOFO?8vr%AiV5*+pqwxkTqV+nZ%Q ze7$}B;0#pzj(2J{SStD0BB7WRK$mSqU}^I5%6tqYs1m z|8|6CnA)vq_C1arpgQ1xgS^D@lNrj0^6+2LAM}7^fwk6Fh=anA)9hO2PzzQ3MXG?h zz9Ia$`*rpAH3RzAetsIC0qfA|m^pgn0Q5vYp<0CruS3YXQ!tcXmOS#4Wv094mQj~s)2IYwu^gML|)M0DNP#T zsj7h+;;snLaZbLMb{@)YP3-QU+e%rr02`AWu{Lhmm5WE^E4Y`O9!DlXN$NxFGX89#i~^2((LYJ5Ip$au;yl5hcXn&!j$ z4Ajez)3pEh^ghUT{ONY~!HYpu>cc~e+2ZYN!__*>J68LS_2%KuZOA^((Cz_|j=*`= zW~gv_erc8FdD@Kdt3saZF&v>yQD^ArfWU5+kRa(t>HG@*rh^&SJfVPYTezBq6sKmX zs{NeQ{Jbhym9F8oObv$A;0o+a)nKn*1wV0+cYJl@U&VO1x8$$`Tg?7a$(emB8A5+q zXKCn1KTfwlTcG#M!C&wG9QT$UJgRQ4oY^rYHs(tKbgR_# z|FQNq@KIIQ{&yyXkU-!B#DaIy~*1mZAdM~!O0)lA5TLLH&P+nCK1 z&cfNuk%lg^SpyN-*xsdapGe4D*vqrq`OH1xQ;(rKd9iG)SldZDu1zByWfB|Gu`xve zCmUEne7rYwTl_%B5x2cloAFca`<+URpCrG&McMrJ*DsTJ+t6>*SO=irpxh$otcjqp zjxrHExn^~-9R`TXG5zV=PwwZNMV=i@mXHfB9EXfwzG;pn2>pKoh|TWypPWSu?;{bb z>uU2G>V?%DPM!<`!{hrbtIzWH8Z}Jw;Ns?Tol0EXz~4GppoSZeF(t#C`3;<^+z{{u#QsId=8D~rkG{em7xJ8%Nt6$fvcap~H4#Dv zjX$HYRcwMs1#Gwu?hvHx#B(pR5q<^&(fKnGy=+7mKZjBJGZCL`RSl!E{0O7t!nTS8zh;Dv_QT#IzKd})xeuUBdGZC|GM6MrU)c;Jx9X6u7 zA7OL=O~e=*(Zi20ihw5KDjSjKM;L8D6Vca3^z=C5`K} zl@JV_;n0A6^lk{ztC@i*cGGE$1;T7%GA$Qt9u~lsitWkg&D026GNKNC0N7z=D-i0< zxtNBwSE#L!;|tUo>h6Nu(Un4BBtf7*tEB?@3G0Z&CuM==@?{dBl)t0(oX{?2-P2hT zzOv}EP{DGDvjF!1$7Nxf9bp?ANjLy8gJJ7MYeFWVxg@ZSh0z#jVBa8e0p|G@Y#*C= z<{Yhzx_`wLZc>%F>v-!Qu9Ha8Ts{glwqgSF+gQh3uy#!1@m@-glO!&2hXd z`b$&+6H)3JDh8u{I4f9i*iVeq+sh9i>TdM<6I(Zmg|cfhmwgsEi?A6_r-9q65=n7< z;CypY$9n6NB?f*#iDL|hf>~?_K*_+vhtif5lxR29H&6<>$3q3Ws*cJTeX(4oML4T~ z*kU9XG$tMos4t&wp4RQwCp*_WDb`pqQZifhTDm{&lzE85xX$g112FYiSKQHk7W0;- z3ZEQ{7~ifZ;$OtS_l9VA!wpRKHJbz5m2Dv;t07gB-kO#dpSgZ6e7?a;kCU@IHs$GF6_g6%s8f)%=CKz6w9T!WEmrHI=2|5*y6 z+yx1d4Z=CMStaV+cs^oLdo9pyqyaiAg2x!8KbC`ESZt`A{jqR@fnAuFoy_6GhxZ8t z3pXQLl7y$`1$M;1Mg}X3Z88&u62q(yLg+(+7+z7L*xcbszR6q`d?VO0&^|#sNE6Y< z%!bsIQpN00k_!ix*G*zkSUu~la-74Nk&q37ryUg2;exX9_cMGz-`n@bu@LjfG)31J}T|QlIdd7fg^4s1y?q+&r zdy`eM)$h$)DfpQ?*H3e9#CD$H^O*yAsr#;!ItCj>6kKay;_=hK^@-cA4miKc3dV}w zEp~pky14t0pi?uP^QBc~8EoHBWjO>73{@7ec8mD8(q>^Nm-33yLqW5|YMDrdC5neA zskDrb<+ezRMfDCdDk!K2pyy)LS!URP+k&%66(hoE!$^lkbB9DyYcYy2Qi8dcL?%Nn z3N0hf)vH3jNR?$xX@OCD_@o>2V%1w&sPOCx`$|0uc^#{uZyK#2eZ7NmK-5{XF*Yj2 z6|3_SkamX@b)>CFs8xL7mU&9$g+s%DU<%&OqOpgaMR!2TB?mGV(kZ+{Dk_r@1RWU2 z%eRpGEgFlLs!3VSqUk88gm|KVB8?YZTS-af7OAV;AWfC1G*v=*W$q0qs*D+^gjDZJ zuVoDSF_@F&>jC1&pdXVZk5rXPsH~5o))EW$XR!oVq_=Xfj7%DxmMO|P9=lD_X_+it zmKoLi&}jku>Z?E=a!#XQGdiHbe2*gWSK+nGC1_CIK-?c*8Gax-Z;R`*(Y3Nb( z4*&FHqqkC;7;>{wB{4cXMeECNHxT3Y9Sq@#%(t82376nlW8!Jf_Nls`yT2~AYP;!PfK+in zh4Kx;Qz(Z?0c5CAYFTAOxBjvz&al6=FVP-;#%9s5pEjFqBKaZ>6X`OagMuabNNiZ2 zt>>BbE=9NK^kO-g%Oz5PG~t@=ZtPR-lXolSJ+4d5n)3BBkF%F8pJ{B2dxYK91*^5u zE?9r`qSPiEq7eeRoQU{zVBJM-^U=FFdoRGSB%T%i!h39}crT6W3pAHq6E_U^ zb%Zjo!=CGh zGjEK7gty8nNF;YRnUgb|>VIaj*cnx$$8%ZYC9)e$D%p?_{MqKZ<46vuqHx*_w-g5H zoLz^A(9Jrr9UG5lMV^LXs$+HJ?llr{!ZYO%o7>DZ3>6)o^>VTd!MQ2=)0G`l7^2}Z z&N#EXrTS^*G8(_sY&NnPAUf(_$^H~~+6n-9Yd<5OT?TZ@`hD_!W`L>x3Fc(y60*3f z^nDpzvxsn!&59%KA|k1xT|}NIx9~2x)8HKk6{{p~6^L5&Ad8IF#cBB_XE7mWq|WX3CPR;!cGi^i#^*n=GRAV03WC zCekc?|F(($g66D)Yl*9tQg>yv?XA+ls@A?*KaKq0L*xg0oSHJj*R-@Jj%vb*A*LT3 zC9_J<>&IA@3xSe93kBn4C-sy?h-0kC;Ah0{I(WIPcw{N zO%tG7nxbuQmIhX~p3||O8T#`e3o{$_yRev{=X>IQVme|);suW?#hjgI`;H12^(zrT)}vnt;7Yi{|x#JS_v z^XlaPVci;?7=p17T<>ixFBQ5P&xKp;zOWEN3OdthXyirdUM!c3D-1T=LRLZ(5HODT zIs)=?jYqx{72K(QC~2$uBoDHxL*J$dVWV_>V;6BQi3u{v)u4?)bdC z2+G!%7sWLkDR~jj2ay*UI9qv<3LlloGblg>kocjNk5Z+N`)uh@`&Fzi;8Rvd`In@Z z@0jwlI^|KUUL1+fhwpCM`xh-}R>3dQMf2P2pqA-}d}%Fu7h9O3ChfEa&M%_tqV8t= zO9+qY$Jeoy8p8Yl#x(X~`The8+Pt5KErbS|RpRa&(fk?$17|Sk|}_sS=}UNLbE83-1tMY<-A{# z3oGS#HXbEt4c_vY5m}_pb3)bcHI(Ew(?F(_iO>DGac^cgcRhCc0UMqb?nYU7$Tx}` z4rGUN50xM^Ea4VT?FH>-hZ>ElrHI+8V<;u`;SwotoN|B3DTz1KsTLx%Nd5$&TZGG> z&cbC{?^tV%F*%;kY7OI(F&aTH7&u;WN^txba+wobUF)Un!*%2XQzg`dZZh}@nwsqx zWYqEWyq9QAd-3pxPgiUV4@|s_zm5n@0>!tJEgS6$e%W^Q-`dzKJZhzMOO2FniILLv z)jnr}fniY__s-yh(qXK$pw=JSgj5v=uJ}$^Q*j|G@f@8{Dcp3D*b7&R91#%)`-M>q zBPwhte?hXhe`xRcPYUvB7Aq%}klXT)KSQGA`Q@ZIRwDi?wk21>6Hq}@O^Z6Z0J3L< zmYUxsMiOefpa8!M^D@g{bD(p zz~A5Ma#O7~q=Kf|-ehkwL_rDR+I5Ku3B%84T*jCYL!6w&aX?;4aa>x;vQd&*f?a;D zi@_J&2{S%rAfsmI%b?>vel&I#7Z*J%$_*zQs7i$0?aso@Ay>N+!W$u{E{?fx3VTED zX^W{^O`V!KU^_VaqGl`@i{Z9dK_da$t9U5w_QH z*4gQ}E?76CQSv#q*z* z&BG(eoZV6;nsdU~35joAN@pKmr%8D{r(&>a^`#Pd*flMugDy0Xw(A;vBdu%gpf|ag zz@PAzY~nUs3Wo8a%k2l4;l%rMwn{!lMgGY?<{q#HBHR%{junQ9!MHG|9|=bA%r|Ad zXd0-!y(Q8Rj|Gc~HNGqGv%w)-{#g_}EcuBpI$>veeP)LD-Y>8mof!I--rwTgJM^Rp zIR3houQU<{3q@~Z{<`sc56J|1)`FLrdOk;K0rD%@CjG}3qw^~R<^ z>inZC<@tCxo{pwAGlpB$%R6sXpPsoZ(zq{+1{QIh8bcA0qEDI2!kvOoZJj5wD+@{k zTPfkutZT61rx!H+b|1rL1okH>kAo1#CnH6h%4dy2Wh*}eMgN;w0b45XiMY!n1)%Va zfsFC&-Z$$$U*!#?nvkEFF&=Tu&6r?lsl3*NbjcWx9Oh=-@2kAZgk)umM*wp(W*1s2 z&!hF(CbVnDctSp|%r#%x8RN5YchI3Pi?T`&!I{Xs{0w`upF`{+;}Ri^87D3%7NV`! zoV=9P+1mGx)IXNPWWgP$5!=atgl?ck7y+zqMhb8^asn{p@Bq*s1N3czQ1vmwx+%;( zfo@s#?n8Ebr)LEWyi>3iOO#uV%PT(UkY+VTxk0DmCDd9$VY*aQ&`_E{T*=s0USYt^ zt;t7o4S=1^+)G2U!o?)Cd;@DEf%Ujyb!x=5au)W=Kp+I?wdjq?hcV0*$Pi%^VO@Qr z@_T$|W}x7dh(Nu+QTc7YyJU<5&fGEQdmP_c8RLL*ge&B4RKjd%U^TeDYsNUfn<_77 zHOtNzm5tc}|2&PIWwWj`LHY(V`l@qchE^P0K_77DL9YrMk|P9LlTP>^aa-UgU_(b> zK2*KD8&ccI-G?IuZCbK60K%ATIJ(PY1G!I=~lyoLgE0eQ#Xv6++Mjs$g zFcQp>HW+6{3coQx1m47m2>KD3HX@S<6yAvF;YW0_5nYJLG7*Ov9BQ~B%SOPO9N*PM zZ1W?!+K8@1;7^{S8vKZC8<9;!Hxuy(KcbtB=te}2iIDw7)sbT(a)`(!qVoF+%(a2J z1a?>8R0Vdof!zu0p}=n`u!jxoL13N&hbu782IdjiQ-PN#uqQ(IUN(Zj)s^`Kh6wP& z8KbxZUkuswF_gWTM=XP85CwiN^DvayPJ)pBIhf3_{(O0;rUk#$q>3e?cKFxY0l$Z^ zs1Y5Xf8|;uI=v^oH2u0hyo;J*4!1OVnHg;kSa(tGnIg8Ig@Egg5RbR z==MmoODX~LbSCqZ1andebU!AVl}fCGmJxe zQ$$wpaA38D5vwo|&EhY7Kn}?-O+J&v;JrZ~5^P2<0;f6Y-cU$y_j|#-Pb@J8zeRWC za02HJEe`UI*Y)C-QMBmLL*Kti7&R_2;M`X1uZV6AY>;}3)ZJr6>&kB^akn$m&T$qJ z+!%0iwDxY8i#`RL-6pA%Ig#~v<%%2&9CBB;z3W6*7rpU=t}d5^w--roF5}S`s4uO+ ziUl3}VOi%~O3^3sQp;`#ozyb%rpTNR?KU&(tm@U>8c(xwAB`rm3el@^s=tXQU5rby zG3>IiT*nHwM5^0av5#`-U@Eg!erVqaJD0Smh8AwD-Z!|jPHmND0Uv>RfRmUR=$+LY zfXn1d#rskBFbdCyxN6oL4pHxzyPbsy|IlCw_VZ!|n<9z(*&|M6S6+H#6a-3d?VCNK z?sjrMlLA`j31OYzP&r;9nS@~e z;70OnsQjivx)9QZ5LWgLl~*bxix3E>8(GpfR7$QpsVgB}31KbYPzh!ISaxy7!`ZBd zrClP{;?reFSB;%A$h%UJcZYF?2KS4*Y;X&EM+#0y#SDSYD|UX4T7J8pC=YJG5OI@P zF^g+9LlJTtrYA)i>dL20PO(MC+|Ab~vd)nZ04i2?zDi`&i=Q2zfp`89jPPXjV^JIe z)G_aa1)yX6+`AG`O_6Oc^Eu@tk?-+^iLQ{1yz_mh;E~{DrPxX2XoZAO_T}ksgcURl(?j|#aqc{#pG_(S4`2lof{XdSuT{l-s+4u) zN%A$F)toGg`TbB8Ve)ADJ|*}gFRMs!Vh=y}{!<2wE}$U9R77l6IY(4~GjCMG+h%?a zzOJ|Zs_IkTPGH`M22(6Hj>xZ|X+dr&P|Q|+Ot76$PiRDh$HCW3YiBD&WlzTe8?AYo z@9DZuuB@Id%(T{IRQ`jA3ktY(u7uM}dYhlEDAjTe#Pqc$t=?LcGzKInLyljjBbWeC zIjN=|G^3|fHd-y=3VBE6Z>c0RI{THzGxZPRmHPi^nyy;j>L_kQM@dk678=t%k{r|z zfTs+>D-39yvM?1<5?$S)-tBB9<~DjBc3K(oG6_?i)6+DJr>D|eX9xDGjCCm?)J{mm zR)jnBPUfG=)MuHG+o8_zQ{wEz#MMs4QgfRMJxpr#J>;}Ao6z&Sz8P9deNXps}S z-%ceWy-e2OG*{_ch(1D$n&-5>OT;JiZ|?;d>^cBi@lQ&?wgWnIr|DfQNLPlFAOJOt zaF0@U^4Y4O56QbndH0Z)f6_!qjb83_B(bKue z&W^4x{!nDqeUL+UuCsAFdj7_Q8OvKuDXK`Krg-zGGQG!=lA?^bfm?pN-KW@Ahp;W- zGq*7Soz%C#yWc%hfJ4|V1#Ku)yvuC{Cvq6KvUree3Y>7a$a~}#^yDASMz9ug_ZJ<0 zXP(lX?3#Bb@bP}_DIx)E)a5W2B#TSHEC zL#XJ)4`?jTZQd{1^60NpHSDJ))KKxOq%q6mpN}}UV@;=Xy^TUVSoupJl=(2eTUp?d zXnD!^kBcF|qTQU_!K>U>x^Ivb4n(QD4!>xYU*Nk)H+~4m*Z+JNL|U5ZSyrR^T7_|t zinjo;`gjBEp;yr4$iRtsF){j!B$ny5DK3kNCZH)U^SJtJ^fH@_X;pookzakR%VNDc zC5N2(@!62SM~!!<%<>W5wLg`W>XrDin(RKSYD)?~koTELn*GwbIb|0(W_E% zFU?SR;_UiY;FfIpajKmBYU8Cmv%~Jb^}*%E6DQkSe-C`3?gx=X&oSg$!WNhDN-;k% zcc0UY6D052s*@n*UMaKoB|}qOZPH)zpQkZmJ*8S^`o(YIOnWn8(*Bt2l3UuFyO`h1 z#@#uA4YLC)#>2)ruaSoJs>Akg=iqhFZ^)r0rRASw@=vn)SEOaI`~-CN|A+L28%NT@ zDkr>L^rUT{pPtsFm)1d#rTmG5#|tVLkxN z{W&Mwt40JfX5Z*;oAZ9du7-xi-{x=5dpp~A?woU^n7_nNUVY`2R|=YQx94v7(=Prh zhBw6ps*u14Ugvb+bp`w<`G~VP4Is8IwVitW-(mcfW3fb5U$Q<@Gkb+6{A(_FA8FU!l=25Ph+2-uF9wPO zow#Q2(Ur)XCX&ShV-7(+La3qMx4{N3a0Xe{`Udeu)VRC9X48bAnG_R(c2-;ypFoKi zg`gZ;Sw|hNse|k8dI4-JmRL}R9tJ;5sjU#&LO!=)^$%UO+eA1BNenXmB1s2n8aNtP;R?wjDC4&g4s9@U>*H!;UA&HWpi=Rj^vv$T!lPa;NPnw=x83clRIX|% zdbjd2OtY;Wvij4p<DvJ3_}@%em$MXDj}dj49;bgxmjjpLr@^yHeoF`ZbyK=2Dy@1Z*J zaGXW8Q)oibhM98_Jdf0!SEqJ1Xu`|~0lijMS+vZazn4U;L$~*J46Tos^T%@7@|fBJ5u@oh*+geUO`RTmvp#~2W+)VIO7ZXz3Eh7 zuu!#>x$~97pP5u()(Faxgi8xZrm0q;T?v)EOQBh*#z@Z9=|>pJm`Xz^%DzMkV~IFU zJn^*0Plh)J6iUuxrp+^gZf_y;1&ps-Xh)(O2$6h{=rZEHU)ad+_>ud+Pvit5y}=Ba zonLIA1`(=19F&FyoObGKH5&M;$gOV9am|Oeo!(1eZh-j*y=ieKvH{`MRD+)*d4_MO z7|w2Tmb%)emx3Fo~z zS}#p|KZCzFu{IQ+(e7dOwNsgY%!Kn~?xf~dbOP-L*Mypo-xFe|>K|E|d+~*Z&Zo%} zO57FCJc4{u+h0y0rsN^A?`^$YbDG+@12b~~r;xe9I8u&2A&b>M- z2oduGoFAamRz)}@V^g5&+Kh@ewy+}j4hI{WvVx#jyEDH*j$8+oMV$v$MVip0HOT`_ zWtcoe>2n$!T*2!shB4yqHfU{8Bmx}!d$-OqZ7`tJg;DHE4!z4wDEjj*02zFP*8iY+QFoOVquUUp z2}PQ`gN$IzHDHdo29`ty)+TLs$K`?L~pW}&FJNM zrIpYsytHEUs7e56imS9A|IIJ4b&>Zlefvy*pqI~F(KRDDq}1CrScvi284-b@cIJ$@ zoRC=kvd_6inf`7m?fv;h8H79N{OLFICwf1z|{3}r*;?t++>7Vd0l29h_j~DeSJg@D@cDz zEq3NN#R`rWZcL0=ruDd>xlQ7=_<3Zazk@KHudQ=Pl`LFhNa!e9_*vdZGj#`$RTsn* zSO#Kfhkm2dFi6VYvM=#OHqEYjB-kGn8u{ytB!2cA%9po8#C3B{$mNbR_Xornw}+wu zTzp4OA9};gOy^Lp1<}as!<9fNVilFs+ z8~2=kM>UY|J>`1=uE~R&auj%%IF=7?6hlcy*ZIZbI=^q`C^H$hDZ>W;qeUOP{Es*I zSTe&*%?G!L*>sN>JrBLd*Q*@h$-TS-LplpFQmfmQTB%^*w5RfPm0!O$hpUu za)+&SuSd`)Dt*c>!cU1a`rtovRL6GJA!gl_t$d!^3t{gn+~(+-mOmW`v8`y0d6bB!drUq2p~{4XJ)ml8rhw;& z+)5;@Co(mV{;)DBr)@6%JN35H`v#t3JKft%0VJEE@11-fOJ(_3Spe867*eO+AjdAJ zcl3~M{Ka=bnYwKleMdBx$ona#sBoMi?KwYfhlxQ= z=X*u0c2YPSsEL0igp+lvWY1qZMrw0OQGah~->hC4;f`Hue+k`@PQRw_Ct6C<_mek7 zxmX7YQ>iqHWq~vHlV6u>KQT*IYCpLT-ktUn*46*~PrDi9R+tqjc_-+h`@nzp!#^fB zD^)UT(57?0G3yz5NP76!wupr@Y|<~=q+zWJLvMHiqWrHE;_pF)em%#vVW##k3H9YF zE>Vu=9qmFoH4%~SDinSjx|g}*k1F6(USvpj;z?dk=;ahIC-s6U-i4*@V%(tDJN|U6 z=s?BG$*I&psV+tjZ_4w}y`)v)6{vBpvS>k`!{jkFsPu~CDn>!3F4a@lIHXKLAI)!@vY6JhZ@oD9mD-<^76LGRtf7pXPvN^?y?Sr2ON? zO_s!}{%}~Veu1`|Gd8M0?7r8SBbZZL3-YkB83HUMM7rkJmH_(_9~}f(NnyLUhh1m% z>hL8gdj5GDqAf^Q#OPFs_Bwon)*4+OD7*oHE;x|w8|n=5#Fz{=#1;i-Ky(e@k>UM# zx-ebaLIZY32oZJu4Cco$%%y+v{74M#>t`<{d+VzydV+iHHeB8RlA>TA7Q+RtO{dSA zYCDLtABse>lc^s==M!g_br5GaKKMD}>=%YOtD+a8&zKjgYaClBo!at@?bQGIH;xlV zx5%8QDb7MwfXV5AWC;yq>gL6+nF`o}K~8x;3i;ljO(81wCYAFp6`l#i^1dXSXp?zg zRhlKFVMv)piPAu6z_Y|}=v8wtx*g&u`7|lKo2b#}H|nU%3CG=R&-v9Ka=b_*jo`pl zy{cm_W{RW_!$P>=AwHdjzn;NEr{HyUTk(JJUjMqc;iz)mG~9Ad8HK;z7$%-|Nor=$0H{?HA0bQ$k5}H|l0oLV$*=V8++f?}= zAzjL`us$K!tp*!{!?w@*P9cWJKCWBqwl(hUU$-7tBG?hhJ&}9(s4>%+S#i5-oRHVW z`vT!e!hHC2?;GFq&uqz_ER1ISmx?88PpL`c!6Y&C9sl(4;QazjayO&XNx#;`GmIh=-r zeQiGk4u?_acq;zhd;MibHXQttIDO{rY#mn3TRsT_%N5(lKFm3GxpxWM!2f)DT|w_t z_-OdsQ3Ns*Cc1Ckl(?O({6px^MVh%Ciyt_zF3J*EjqyjBTKwc6z_0~aySxwCbPC~Y zAN2kX!l(M^#NPx!vA`!W_sHrJ2Bhkn84SDD2QJ52y4&?41!yT9%X6M^v|25^Nphoq z&qNLc5+FPX1)89~v+P6W7I~}L_b~fCw)mIsr68&;Os8N{^B4WxE)}`v!qs^Crcb9KKdTepJK)cx zQyrX2`r|+X3&62pKW(D=nrff=Glh=TG$t*}wsEVpq%<$jUC z>Np#VN=lRj%7>-KIpUrZDSGFjvy(ptlBs=z@sAX(D1S^yaG2Hkdu7E z<`_k-DmL4e^9Dpn+Ug;=_~(DSew<`O_(XH>jQya$J^wr2Ja#(Gt$p6jAW&*^YDtmuG0P3&d;Dt(liNVlI%bb;40!m)M@oD99Ei~ca<)qxJL_-z0jrdsbDwF;)1vI0` zc-M-?y&C6m@CsdUR$X5u7dmMVa6p^Z$g^3oLr60rc(Jm*N4Awa1A5(nlI2c-uJ^Sn zZByWo>iY)AF!`>(3(bRRwD;gf8~$|;V-zX(U-!v~3OWym$ad%2z#(2g=5@w~_VKE3 zSef%E2fXPUR9sP+^F2;@Gqz2nqDPxmq4OwBoUvgdtykDKTmCinF7 zJ)B4T2K~1gE$z~)8Jvm$wNtNRl$ulJ_gbWFGuUMFMlxmun{RYfiY?kyuN>_3uK%NG znBLX$4tXZauc8}>6uI^G72a3Ad&c&f+MnPio%UsLpSYW)5{LeJI+^gY&u;wF)XM)*;#S&A)+&1AHWtjD5 znQr6YlIaZq_nn0`CY7`B$zV598&)y?7)nla9kJqdP02QI1vs9<(Tc0#gqq3I=KbYP zfAX}RuX&-QPm`48WFm(-eJ1ZR8;N9H6y8CjRlt&2seY!mmld8f^)uk{*N=%tK8Tb+ zbfsBD#Blo@RcUBDZyfuwT}AR~2fXp?g+W}xtpRK64(i1^?x{n9_h|9fJhf_5>CxZttTmZ6J4XOPu{XB#quaiEQ$+-CEp>BXA>aG-Xq4PX6iouV$&l?!{w858H zVf}K$Mk=G;4rdP0)}|lZw$@MK1R@O?yU+Riji};IdiC>|0+;(Dog0iK#iQm9)Sjqi z5p03-Pf@E@44ooVyLFJM*&SpmqG6v*?P9kkBYRrz{TCzCv9oj@Pbws2>2HKA0|0f} zmYLFDfI#{m+b>lFZ;A+f(}PRXdvK|G&{cz5?W ze6YzWT_NTPl@z_LSa7KSagm{HP531t99~1T7CTR_E^)$dnF8MLU+gSA8VamX&ddDg zr6!XJDhSQ_RGFM`8+qO_d3@rT-Of_5?gNnE+H0M}n`c)?Vdl1`=iu@|O%mWSn z$5%`y6FxXJ=XhtP*L`AzU28({Ys!Ms;$5rkx^uNzcN8;Zq@N|^gjb1d;TXi$8`Hk| zK(l@QI*h`=TH9^ic0r;X7#CipVgfoEVc z{I{p=N)))wLXy>{gB`n%ma5eVP>dvgh4!dEe*Wj!pX~fCqa@aCaA>|5BSNu0#z*@{ zs(yDScZbCqsd!L#wQI%kg5_Ye(L@lP>82+R9DwrUhIIv8YxPD;jYsRKbmV&GD&N2i+DMu8|z0sAAPm_+R|=g$lgFPhYqZ z-WnbYq|-o!$wGi5dPkr+D_Kh_?*@Qo*KdD+Pw`)&=LR7%a~A$wgPVqIHNpOb`!fH` zinEaWPmd*r202x=_O$Kia~$n4$S@uy05fnt1H719s+Jq)#cu(XkTgGOO6;JqoOnOo zikP!f^{42pGvonBmuF(nkJ!+hlSUb;_F+DlA4~u8=Rf~h6*&vujWo7in8>;n1=WHT z*uNuzY0quE(7uZKnHg=hlEx0q$UwM%3!qu7+_A*VL9v)XcS<=FX*_UYqHiS(=9qih z`yE?W;l`?Eh7m{#Yz3jK^KaX9zgSB`^~p>;+Qa5Wp~{FvLQV5T{&;X8_3-j!P&y`!UY1!`M7R%>y82+FgK&>c^GvYVzWhEo-oE@bIE5Fd01s+T z!PMY*snAc6XSJFkHo-rFGwjRD!77uoJUD~e{t=vKz6b>|oC3aiqT%Y)e9B0Z;^p9T zHsdqF7wpULgAIP3=S&_V%#(1Q_;hz_UbT7u8r)#B)C70gm&b#LOkQG49wN+>aFe$y zY)G5;$zTQ~1P%CWQ0io+B?EbJ3W#B(oB|@u^X1?`p1O8gGuGy<2@bYd9uF4VmnVbc zOaFe&2Q`5udeI_`?X8C^zC+5YJ`-@$3uOW%3eZ@(^L3 zgqys1PR&jRi&{WGn+5c4`8;!og8@ zoteee?;m2_DB6bcAK+EMRduE|K7Divc?6OReM(%%edT_!!17pquSh-Dzw0aWV{Z3| zJ2OAxKAhvO<+c?TT>`KZIO!VYBDc}q&X(vbd^|6o>Qsia@E=3;UKi_|&voTgRB>H- z-#&!(M(=@J%3&@XRNtmiP0N~?0lA!>J1Z5NmOC>M$u_xlkuepoiW4)qjg_7oZEM@C zwA@`1k=&3j;qGDpQ}H%8#?sPrvzdJ^cUB^jXLA4cbGgy(O3#g~;d8mWCL#{GEALIk z*?N0duRw1-J#&64L1)7weL|>7ekBz_&RZ>j&#G>KF0ggMK*;hz-@7i{w@-CKGzKOP zVYx2%&x$M9O)UrWX09G|&|~Z$}G-s)EumAjceMwI$M^)PDSf|8V!_v0$a1egA)t5zoW@_*}j$YoYP@a~+i<|O| z>eLe2C@Sy*Ha%3#y+8BqEV|8b(;mPK3PjVz{90b#BSCn14>ZGm)`97=vc?r~rS57( zx=%nXh!W&&!Cst=F~q?YPPpN0AB}3Oaf7IZW~t!DC!3k>T{w%N!@_m*rvcdFx@7~j z^0|iSEZkVPytwYg$!0Cw96w3Ex_5~~%SN)_5#1_p>M*m!HF~kGeU0zXB(!1kNd|;& z^3I(^{~&qKl)P5lP1rCql<9N`^rd_RQC@?w``Y>+{&_#pfC?@Ye9Wh_aK}``{ZZFmNbZtwB6t0~?&|;9KT_VIVT}3_fs+t&n>a>{t)H)c)|(`SN8N_N;aI?PO<<&G>&z7hqR`+~ zz2wy?8sT&?r)P{HdFwcem}1IbvIW?}D4@Jcv>+Q@@DX8b!oc(oF{7n_tj?w#dETN2 zqBsft0{)TVo)zS`;w7w#gg}YAq;xF56^jdDHjdBrYj~k>DstjtUjsDFeK0eb+op)?6|AGRHO3+`jI|I$w_s679=v8QX7*+-Yl6`si zW_*iG>ErKi($#HyfjMpb!}9H0D}`3BVmUuNM;lbZ2Chs*-PaKSVw1Cs3hT}Jt$x06 zBwW92ASmiIOQY@<6Dcb3v-hlGi5G=G|9AJSoVW$A+0h#T;)NYqfU+FCAlf6obZXWsZ~V+$GVT|cg48@QMv zI~(hZ-7J5*4p<3L&rx2qz7%dhppeS=Z8=Clu;&xA=8u2?56h?2XH_3+r)ORuNtNP(Q8UFD&9h= zl*ZH>>1}*R#kXTtkgJ|seytgbdP)kTb#kRz;nd_&8fWUQfSZIS#WsL!ns|tH^%YR1 z-8(u_)$296hrmdE-yj1X29^+lfGpw;33_u_+{0)GVS`vf^+STm?<@1R>rUEY)Xl$k zmh=-!N;{8prnTY&Q~=n%?mc6|PX3Gn`!bO6Om*EAgh(7<_4A$hCI-K>{vSb&5E=#1 zYn};O6?REjj1s{ILJxwUBZX7@-+cL61pB=Ipp}+MIt>izvPHhu`iP2s0Z!}l&u|(HxPiRK3mIPvY)N%!| z(wxQ;Sgwgyz4G3)Db_jOTssK4wwKBCfo>EZt?Huwz%oizh`OXd?^&?QNR#$?S2GML zTwe&TcL@FOi%IBjAr(c4qRh#U4GtD(xUK5O+#;%??M>LyOk)pWjG~B=bBuk9W3{}AnaN=6I#gD08(WU4eXYOXRYB9$Ghh)~am<}5t&ix$` zfH354N!%EyNQThs3>Tep<~~a}+f|s0i)1;wqyALBsWzY6qHOya6&mEkbuodV`Qcuk z1#e;B$(_b*No0LxbyiNsVzOk2(a9}>2Uf%a5W@$I5S5z->j5NldLZ9xbkU$iJh6d> z&r#;Q*{E`gb?+deYYD5RDL0J5I5kegycV>k_rVxeszleu%1l;QC*A{aTI#x&0c-~M zPJ`VZ*sZt-_%kKOuM(~7^-E2uuPQ~l`?TeNr}XX-=SRf018W?DNuou8OaSa z-EB$!ng`>PoWe6T!&=v)D3Oetn4QTnJiXmC%GXay5#}8Xx6er@J~O?aqAh1m?LAJ(x-S(^VRtaBYx`ySoctI4DQ zJGb!_Rz<$l{KgWvQ?r$CJHeCK3ic~745#KI%GApD z!;;iw7c0N7e;Z6F#bh6!n(V22pSoUT@0*CU>BJAHp|t5vx#{}B3vM*CUA2XQzMbvm zk95rR$0FK3%?6Ru4}PDa()@z~ZYH|;rnLXvA2QL$*!Mx0UNTg@(t)41m{luzwc4fo zR8hXk^7T2EH~q`7!Pm2h248(v=p{DI-_avf>nd%UgQoH-AeezGU|}kU79GNbra2VQ z?r!%k$4;k^G>@%KIGS8QE}ycAAWDD0Xr#JZHBHT77UNBnzkSa6V; z!J47yByhzD_J%4~b%XVym|@ zs~Iey9JO8{MZ13_joO=qD4eX*(Ts~oPMkX|8T0Cwi7*a9V8q)iE(sMig`Kg-!Ue}d z5DO(-GKpVDGQXbHj@|86dUk7pXrh2EU}X8{fj|uetLTRd`gFIn2Q!aMb(d z1WOH#B8Cirtl~%YsUoU6@BYi6pUB3qfsQ%u>J&nT?noZv#Ff(Ts)u#sw|C7Kws$GL z`b>LGqp0>$s%KX%I$U{H#0-Q+m@6sWmzb9?Xub|S+u;HTTtB2>+kPirNrqG(ocO(b zCBMcG@c)8>lNQHo$S)Y4@EIP<>6PG~{1xNWv7dCt|27r>6-w@irvduO6Vx3em=Gt%&ngsyVZ0<8Bd7(O7x^4u%K*F1H#%Ew-i;y6 zqt=J1It)mm;m2bnV#y73B2@k14PvLXvxA7P9|1SMd*$Mod#v!Il%JGUhAyc-HNJeR zNRoqz5@yl$vnGWhhGL1UzVTRQ#;B@C28_=rpWxR&hXo4Qs41I^?OOGuX>;0gb+OJ$ zb5^Q*oe093MfJ5D?DHPE#3<}g*NaOa_3r{o2%0e)XiYh=uZhY_|IMb^N|0{AdTYl{pUcQ zp`y7uEjjUVloNrs8HpvP1xIjRQbQBJH*G+bkV~c!Hvj&m?te@seI)VMpqdqGnmdJu z{*aJ*eISP;)ff=9r-t%tO6&hi>yvzOj3BM5(qC)0RD>Pob6GPaL5u6YD*OLaJfz_x z05GU2m`T}3D@3PC%#%UUsFF@U8T`9qjAD#qi1+twRhW&KD+!Msrf*%-QA+s|wMmeU)<2;grw*z{L4^bvh6(}rQ?Ch1lbiS9 zdjFbzzlK8zCoWdk=rwcg)?A@%Kr4qGQDdTWi(*A=I<(p$f%ruauMpMI_90Wi?{n~%egllAmKN%p%+w)E4 zvNTiu8U{z3=BD;-Ue#;;d8c%srLw_F%vs9Jm%-lLYg57YT3$~1FsXy&8yM(dLJse5 zOj3c-95)BkKUHAi>Y5sof1)XAEjO4+Yp;a4nCvF>)m;vY4=KDGmI~}t@)dw z1sN(I;E}5Y;aI^gjV{JVwfuB|uYnR33~(a` zNDUqKfyz5NSE!X=ad}!7X#G_W)A}e!Z5Tlg?{r+#E?G)v{UI|P6qeFVqJ5a=dxu4l zn`+EF6b$pdgkTuoQGRFPnkD&EYBle?n<11^BjOz&>1RYA3h&~>%BR5}5Qdv6wC%|6 ztLsmaHQya=0W#;hoD9k$X>r=9r**;-6Tbq_QYdyGTTEI4AH|Yu>1A3loqzCqbbgX@ zCc5_derM+!>Acw|tbSGc?T%L^lSJTycQ2mad9RqIxW=#n6EDsX&bSBL=PMN>UMGIE z6Yt3{E~A_$9x*Q%BlsDa>*Kmb4l%|NgHI!Y?Lh)q9JwObO|*2H67yBA+2bkP`#HoY z)Z1*r7Bg$DlTSmV6M2G28`^1AqV@h1y%AqikzN1mW7>AygVmoRx!tImKg}$k=xtz< z@mA5Z!?eh)z|pTr1}n}|<-b(rokge8*1ShK1|hYPb=Y6@4)J9p9`iEJlk_XvEcrOJ9R6|$x?&K$$0o*_%USS^(F-e~AKX>z) zx-Wu#NB{OueXZ8fk=m_sO3DB^wSS`Z1Vrz4YMw9w+Vw`3Oo)wlYDyI_cM;ti86JDx zT~19ots7Z-W906Na*n$XY-?{f2Io8IrFtW3I@$=z%pz}yyJd-yZU4~)g5i?4%QZbW z;#oBdHI07V8}{?u7{|$ouK4{SnMUb2#vZ4bx_3AU85L;qE(~_*Y1@ zRP(oRjf+u57+&kW%x{1l#{!jGa-Tg$2Tby^c_YKumqeW!?lEMHyfGY!I&o=1)f+=9 zaBbd)aUqiu^yRmE@S-5*_s9s%P2nT$rR5jVay1(v&u#sBU}m#=w{u|&?or}8GvQAG z8|9MAymSGDFX6wcVB4ns7tdEioSMnRP)Hw4FD0!CWpT#H38ATFPR%N!u=Yxhk)hJi zJx(CCMp8rj-)=IUO<$db}%Id=33sGL0V zrt5FyLxS{?<&!5o?8LKF$a%JqDTgRT3O7_91`-~5tguE_2u7AgCx6$exm$UGa#_W_ zOLeeG>Jr?@QDbkU)_%6!lJbgsY14xcc}x3Kbg~;sd^%9=o8i=)B4yBOe+wW_m^MrM-Elj4$C((#RAAh5MZNX_~Xtv2hRMv@$u7>^_~{ zwE);Il`2v4S`%8uYsS*E_@Si7*OL0O&TxWWdWrPs5}kB9!7RLp^lj|5K0HYO zeHvqsHMz4he5r0=5c!A(wka)~@ltr!V!{`sg+qZW{I#uw|GYCi3RYtBw0=@f<9@WQ zHtKk|i=_CY%PHeZgi|)>L?Ea9LLQlzd6F3q)P)n5%+bmGn)#Mkn?rf2c@%2jpap+! zf-r;51>1DQtJ>6>{2f6{&*6i1tmF)rbUNFyGy@gi`5+43rAl{^_AlrIr;0(aJujTJnZCZg47)Z)Bb9)|Ep#h ze3|*Ebz}#hoL6o&{VQB^J4;3Aw&Yt^D>Q71F2JwA(q3xkwVma236NsXp$e1)YNrs9 z+zyue{A)~HOZtq)qEUQz7A|7Zg%@Q6A4^!vTJh??@u~Z3-;>r?{jVc@hTKi= zA!|c-ttgT6s!w-w=C0DXe2jabsIy>Aq-dQJ&m(QAoMK-@UXGbzXTe?+1X1mAX{yPj z-ON4G*s4t1BKT#D1y+QXX???)y|eI&qqScr1uOAmJVKlHRJ|%GGrloCteBWu-%LSY zB_2aK;;XL+U$}?g;<_tf75FzeL*GGd4Y(G5RJg-0xBS1u z^$T=Uk3&XV=;*4<^53E#)^*l1CGj0j{9?7CdY`z*Z7+sqiVat5)kx;YQ;;w(V$W&K^3$a{3^hP?0t3dBME!=|Fi8Ju*>QL;e?P zIe;Xpo<9fK>-+x1ZD_qPbal>!E&PP)tc~7tSihqMjZxUqGTrDNb~n3Q z8rSD=!H<@e@1VKe=g1LnM#W0SeBUq7B&cwlke}6Ty2)XV&s|&*PAiK*+Yc! zOn%iw0RB_JJ=tQuz&mH*Ry%4dNY;v1nbtsZB#|LeVevBawvVB^jkjboKWy~R(R1%s zwmIPb$8LBMMB#^F!vUQgIky=L9nkA(|Fjvk6V9x&@D>%xZPKO9>ODj>5D_a_OOdT%(MzGD z%TYBH9~TcFSov8f2os1x>lk*CDCRol@nY^0mP~xFmIj(>N@X^)p%ke=!CETLnYkoV zpA${YM!bYILc#G!!TN9j-?3eeM4oT`GjOmK$rEh|KRg(9 zcjit~6$NW;Ef`V`RBXp2cBn2RIkI!Twy`8Tvj7Uh^J4_t&}(PCo$T3}UeNs7zd|-) znnAc&Z;YRxJ&19t@B5?V<75|h_9`jd0eXg<`71(PKPk%X6i~^b`M+421 zMt;iRg>sLCj;;XX27_Wu8TWL!panNkxT#=rg-Ou1u|?LLuR8K=R@lTtvaowelUZ%2 zA@rjP386lTFzGP7ilJ+X1~Eo`ES3mu<|z1Gy*Cgm*b{O;iB_M+fcxxBS-cL{ z96&Ksh{SjoVDtKPo-?|C86E&6m;i__4UVJlx73n`!DVaq}aR|7p1;ViNr7v021qm6f>oGSSuY2NjM@{;}DFXDb|E zET^){Z&5gw_Q!(FGqB#`j>p`^sqFHQ!nx5lwmae770$(zQ#s`Y3hz#M9^rWk$AZPF z?y_AqwwJT$F$MSH0@!T4HGtrioCk&Ac#**-3Z7V;xzC#wVg_m|jWI+yIgx^oBlx1T zq-8{|cKE8CrTOJjr<_0!rWDYfc^Xj&x|?6NA-RO)5`so%o(<_v2rW8+p5=+-CRYza zdf-?nkHx}<_#Gb72Ye??1 z%i|%=%H9Yzc9zO@dLPVtsOo(VvtMJn;N2>O^Jx4|3!Q@yYtx@+QkTz3}l<}-w>h6qI?>!l9JeY~a{uhOH(SmmjZ!6?HiK^78eA#Ue)nKq@ zHu_$=aZ>6oj~1N3xl4{SH>q#Dgrs3KxP5}N#%E9(Tpq#AN{h?djnZ&g5h+}5$}cV2 zVsJSc*cu6JrQksKP==9g8^B7C86>d!tzS!>@4sJ z=W3wqSw!U37b`ALaUr)DalTX_HW+-%K4$PODql1#+iyB^+krS^Iyh99H(2vtKD`bm z-)%!c=NLH`uqoHwj;yY4lV?jewJ$ zXJlq#J`O8f!%5t!xt&RBe2q-dY^}e5jh^kj7i0~NX0Y?z8#DZ8;VU7OxUSt;L5ZaCP5om*=0uk-&_EHQ$$4Y?9rVMA&( zXwcmc6QdzEksXCVkhZrai*CY-0dd$QQjS1QXO*W-!`F9XZwv2DJj%Wo0s8l3iC zhZ>E#4QwV842!I!a7_pnd}6>Le?4P4aH@6Q#>|Da%g4y|feOi}3&4XKD6YErsUhrd z#{%z#ineiYz5bElphy6dT@lErYFdO{kbR`?TLcmHFcSwrdqe>1llL z6t;(6QG96WV~;_^89U5*!LW3NrlLvI9@=yqZ-xO0Wok$Uq23e->@V6`{#EFMu#2C> z*9uxTVU?=ah0XW`-Sj~?cUN6@sAyxwW@FLnKmZ47MLR26%z(fj&8g48)gcCc10P8@ z0)gSo#}(%+oPCziJ9(+;EINuG2JlANy4}a4mSoF*dQFePL$8Ql4lR}UMB7hbTnZhOlm0EgYz z=`aJ_odN!M)1F+fE>qpzVup9W-`!0bLg`%i!+TCiU{7jz6UhN)NNxF%>W|F0zE|SD zgLQpOYtuesfHly8;yNtV_)~!`?RyO~7c?WQYiC5P#Zb*42^fR}GpV=0=SR zA7JHQjoiIM2k`ouor+=2K)P}8R;?QCyUhN+GT(gpdb=E%#V~`d{k@<1ivTP6`gvwg zf1sK0zyHj>Bgkh_Tip%S&t{dJ==t>1#3139bDBig;lBVmde^E}i0z0ICPS?*op@7* zLJQDWR<#kqBFb@ArGHJu=x^Sp|?syudR=&We zY2^>i3wzez^@4tp0GGCtNa@;FLza9fF?8;onQ1cR7ch6WF(jO zL?N)7^U6Rf7Yh@RsvS=Jn-mW3ej{M|qo7c~P>ik8`u}*EN2G{z&01&dW^8JXSq@?5 zZozw#^TXfKOK$U*-x0m$DGBIiU15{~jBI}XRT#W0ctxcn6)vXu689CsBRR)RPBEL* z4H1uNLZ5U|Umx+I4ED*?i%sf1d$IO^|E9enjq<6tIq0XQGBr8snieJR2ZsRF{j@{f zcg{cAE=|HVZ{n4dQ@>DxFqI8D-01bbP=$O3@D)RSpr`NPiJ?dCuqD1T5IMpKxZdiSzZKtPxj+6U8bekCRi@6{8b>VVd}gEjndZU z#?`@+qK{|hmJ}Uy=AO-0;`&U~FuOW6y5Y>GmGm2Bnqi7Oqb(FU%(lnW@I|GspJhv5 zM1hIxyHGl0v-`hY`YopPEJ}yxaK-<2>7O#9iR-&kI>i6$eEhFM=2=sEHl+v3AEM+n z2Id2L2W{yDN8VnG`dxQ!axHJ@MJ8TCt1aqQmNzwAkm=tR- zL~NZWZ31_z`=XGh#k0wfMs|fkIO{^gz^h9LHN}%E935G~DX=j_&eIJzpo z{2ttNOHqY08i*m2#Kkpe$6dvX@p@8p%o){GR=w~ z=2>_qrBG(h4cgKg=#TrxoP8NpaD318@BG*JdtLRh+;bZ6CR*Jv@FsHux1GRBjF#0MF0 z&8m-aVr$}^^OLh+vslY=N0^x0O-!^EgW0*!ex1h_ffE*rLN8J)7`z$mQ?Jom{W7gz zY%65*9{sYm1giiF?tGawRy&>kKpDQY+33%k3eLQuRa`QYSwEL3+=<^uN%rPRF<6#^ z#iV(ut`!5o{oK6Pja8mizmQ*D(&W|T>pU-3@6W6{ zfmJ;j6R19Rp@wo-bwhDd{7#);RaN|24T|L_ruruhkHy9O7&8Q&en90RX#zV6z#y z^9KXYq@$i$lnnQ$c!^^f_JS+PBZu;m-LpZBV40Wc;_ zkw)*r)>rI&@or-3CnqqV_S^IwXum2LxXT&JGIyEao<5%6HI-D6!bkavfiDf_LwKNP znVay3DtW|jj|oqH$eGix#|V($<{QY0oH6((v`q}nKq9Qqd-+V?@5Ksw5|VtQ^JHUA zbH$hCZ|9syeP;FbIRhi^+}~2OvuG5473Rv8V!DSVOaG((&j!se8bP`b(5#>LtcjKf zum@2t1cTl{=|vWtd& zIDWQK%-WmyQEe()7TB7hOC}TcWUz|nnu;)H@W5Y#b@sDd*Rs;=wPM=GwyLu&*UOz4 z%^3svH;-I$YJ$co(7d|Q)pct8(qVv|??;09e2B;u z7f4F$S%v{uF@VWGnaMAFVp!grY=`AesJzxUz5V?l63_H6;NQtZD~aSQNS@kZB8QE} zb(u4$i8rja@ryYAJhiLpK=Xl_fAl z#_Rr6$lZ!fon&Z|clvA)|1(#CI$eIkC* zBIFl!OMa&rfTM)SJ8GKVCQbt6nyOM7aL$>$Hn0Ub*nXE~v^^6v-0a=n$nMJAb zW%47=dSDH+yirA*ts?Ss*Us)^vS%?_H;;)i9mBr;84CHU3V9>{3(sr5{by1wn`m(b z7--zhDhU2|>utuKxU2Ft3-t1 zM^AP)NxgFlRO~RVeEWcPahR`&zCH}Y`x;OG_LOP^(*i_Cof;`3Ko%n}bzg7vE(ix2 zLW>E?a2s2Wk7QpXa;r0@QAWM=zNQQe{pUFijmZl_fi*e+evH3vY<@{#A9BVvlsIG8 z5g9=Ht>t)UFj4Co4_pw~jOo0V(>l@HZR3N3LxA~uC+P)WcmaaV*| zKE)WBn&Z?yPV2xFMTP?0;$G1aH>*5EMicIZ-Bm58{5-R6WBr|6l6!LYLku!jG>ys7 z9do_~W^jE)`wYI^R&GZ6v+^B&Hs3Q9kgaSqCOy{?a2LpN7hXK&31{qtG>jDf7<)vF z^h(hF)|k7cgKwYwdoPVwD*jF4@rs&uAJfj?2NQ0=8gy+w<31c=PxPA-XSXtmdI?t3i)vP!q zylR?FINT=8A>oH4T;;8_3F)XU@siOt;UE&SM3L@&(yjEKvFQMUO*iyBo9=9rZZ+u+ zlWw(FZqorEn{MQh;ik`-s(1y-kV~`BmfB=J-%_kuzmDA~@ZEy8jG2&)-sL0-b3jC1 z<8LQ7X(1bAm$57V^)l8QAbr6y_WAvVq1ZEl;9;tVTrU_M;DW%c`15zSP)S3tQ#>#|Fw!>prrHpRZ<==BI5lY_mHZxxy4eGJFDVmu_fsqpSzf5WfY@f$*1r4^ zbk@#GtNjl*T8H3Qc8HDuvPBZ;L6;nhQtHxB^e%(eKHZkTz)A z&K%;nSV0{79g3~biS5XZ*2O25bzKvTPdo{CC&PN&ojilBJvwlmS;Yb#H zDlezw9Us4OVp+f}AsuT?|Hr46xtlxw(zE_*JkSn@t+&T$Yz);}tK}%Z?5{Kh^Sh>^d@wiXNuXY&>+{96iTi_%Ha*$~^)V6^8w)M- z!~LN$R7&YVa>lBu)x34_F`VAl52e22G9xLO+9pJgsEM@~)Sd%F zkA8bf;w-Mw*T0s|EbNk8%z0W+&i>tio``%?Hw>Zw4wDZ%YhmcRGLzPGz+Q9FDg23jIjI~=Djn+xd~`8^2h)AL z2FQ4$KWx7AS_aUl)3b$!;}xi#4YzZeq&_h&uVs?&EUzj`Mc4>4crtxu=vzrk_$I>@J5q!_-U zIK%&RB`EQsLfIbGx(x77;;~_r$J>!-`n=SXO)o1sO_Jv99i|$rTD;#QsF+W>yuVsv zY4Ln!TthEv=-dpE7OP5>Aa=15P3$m3SsM0t7wW{N+xrbY1NiSgxI$p!5fwtQ@4z0z z?Jh^&OahDJJwa-@vn+(>6P?2g!oa zmiY~G!&1b4og;=vWoiDH?6w(uNOQI93X-~i_B{rtiL{F~(i2gJ5YeU8n?Q7pyRBAs z4%oU#Ht}B4=7HJKOPO#Pb;{g+U-^~T3M#ec0yCl`B#^Fgs+z>jc>W4K=9XixhrZ(_ z@B2)V!{yl?t;1pJlW{!G_pI|X4V7wl12?l5Utfb44g9W9%TgKuNyXI4n@OKzNo@dI zXKxB9Q^|d%k{k-}_GAXHVrA@R>c3AVd)v%p=Kog+Ro{&@roIvk)Ai*N_Ebi=&dm=` zSoOUHdg^;qe!9N@a{X$gj;voT{Am4J$L}|-UuO1p5b0aA_sDim(*s}|7mv)r?iV4& zeKC3>doKp(g0rb1vXFMzBPfq8cUxs3prrbqAv+lmK9bYIb#Og6VE(Bau$)H~Y{*)onZIft)7@OT+x z-%78UWGG8&E(%jpKh976DLU3ykC_X3b!ce%4(5nc_ZUT&dj)o?=$JFERg`b+=i3`ap2f$2@gWahS~ zChQzIHu}!opns9mzrb1L&JR0-CXS=_y)QY~@tm$doqZ$Y-Mf|nkQz_#!!49%P)r~> z_K$WhBdqkE%O`5IB*)Is#NF}r@p0ICiadoiAEF}FMO?Y|B&D$EWXTk0jFpd2O2`A~|gCPBN3QWPwyOGZP1e)CPQ4hmvN`&4*6gGzm2 z%*-1|6iNisUEYa?a!HYS=+O2XCP?2X|EF8wL|P#_qNgo;8qVwJK0tFnV~nJ=o}^ne z^b~`)yZqyxPg2iN0@h>NEG_=^!2_{(^T7k%seIxLUw@R3mT+OGf&sduo=y)wZZLtp z=i;|z$&vxFmI6+u@CVzbYdv`1P=Ymx--|-)#?cRwa`qfhnKVqyqg2sTO}vqRkZY!3 zvTKJ@Xz7ZeBuU9uA?|O_OPwllwRaI;m_QL@4i$S%Kr1gu zPVm0<PL=Gkll#`j-{BiRW# z3Jza@SKYC{JrZI1R)(+mc;n5vM=specyr!43*T?NIe+}ZzjJ^kcCX3nE^DOHz4^V< zbc6vogQtzKA>xLx_&jf>z2ji@_%G0b=)l%ie*K&BIFbL31e!t2UW8 zu@etA?sFENY+8@E%tpSlodP#)t)GiQEnBvV^@|;feo?huJ)eT%)+F#<^D%p@yGRTw zrYU=|djM=A)z8dwCyww}=~A;w7p3Kzww0{WBiPMu@4@)%OXL3R`ahaHvn$pwSz$uC z7;N3XnBirhe4w8#0WwxmJ^CL1`==z8Xo3HWS(!~uv8A4Wer4A)x%Jm$M13sEiJ|c# z;OyuicNb~a4m~u>tt~pF{y4n6W*nLEUXvKAeITN+wP!AJchw|nhwjB}xrjgO!)5!E zwL{=8ubHjjA3N5B5<^|6LQoxq=wQday+)AHw=!PrJ8YKm8%KCXS0H_w)1+4eFx?fW z(LP0XiCRjF2q%73B1~e9fRH(B#}SS9pL@+5H(MC_P^d|)7J>HkD_H$%u4&e1HSPoE zvshAdsx;iXJr9%Fl*U9xKGoB8@oMz9Oc}nfO)g^7bjbS$Od#x5Qy9x5b+8&voPiS0 zyO|N4n9nw4&tv_-djE#h0V#~kyjD9mF%d>QA9c+$$P{g*ZuMRys74f6UL{|KmQE?i zDy1?pQ%0V`{wNR~6;7O^NyQD5Td<>Oo=vYa3WMicqcsnPExLN1?@LR2>HCOnVHO-! z{FmC%w^vi5%pu94^NgfTZ|+HtKP2s6?>W$&=6Lr*(eZY#4(pM3mePXiFE$Fkm~8c* zPLuA`hOc=8Q_Y_pZJODx%mWE0eq}bri8UIX?i)2OZv|7?Eboi11FSi+1H`^lA6XLZ z^;+M{s||E`uV@XpW|_VZE&Z9{g0Kec1C^Be4%2S&vT!u`po*1ewiEW4R zwA5FGEK6$C{f@B*Lw5T)jO9S%9n`}<>QOq350@JgmhJtcTio?~-aLLi)2&Iusa=1P zk?!L+`w^S#Kdnjps3;WI8p~upr-nsE+75cr6d3tnLum~b)13$kyche9(=5w^uk{xD z1l1VlI?eml9$NA3s5w&^*hP4kS3;RP?seC9xNS3_|BmS_o}CyQ;#zoG*PPn=MW!1o ziO_QL6u8tPvZfMEDxl%tQ{BzzDfVnecxLVG;wANs9Me=bZH(qI>gu`4gsrlU=qO*s zFVzE!KjNkd_ZM1s=Fz&*v$>0y^GkKao;Qwft=JU3vM2pyxEsUoR*SFyG=4#eO)Z^2 zrT#-DDu0fH!!EM!FgU8th9&Q!@x)c?QP28m$9C-FWx|dp+}4hDJ?U#ax}BOF17h3r z+~wLmu~48E<1gjy8Lvk$TGE0gu5QV`qmmE6{BExRJ z1FAOhpp-;aiKh>;Vz|$nhd|`>XF@XfoO93MpJPUie7G3nO?fbDl0TSo?jkm-y?Ld% zHo#p}@K=M!rK5e5-m49K(&5ZniNZE7T+!(?O(ZsPcEz~*kE`M{bGhA8@y1Q-&36|N zb76AK(S_$Q+@va0!wa_Nc$QJO+xtFieXaX|$i6mED=GMY$}vau{lnYj@gdX^AL*CUY{tpc zP6Q0o9CC5g-mGl&ujBru`_x{G-=mF7;bY3;@J+(tLkGH(V;WVI4=DXCrKbty_0i8*jeGcyirN)3%kgjNwC%Qzo@ueA`mFwoG9sps-b6ahNsbcggh{;P& z4$Xm|W>VMf86Uz*^l2ufcPEQMN)GUnV}7IZO}6Dr>A`t!O{A=k%SKhyAAiw-_|}$- z8LZ|#ei)ohitdTOIK5}onioAIoLDxRZVqc#(}ME5Vso?vNv4u7yhpVibpK-FS;zZm zyVjWQBoZcUGBCeA<6r)3riPP~_*6$#MPc2pUg9iY1>R?j^&=9?$B`>yUxdr2c?+&f zESC(!c*NJ9VFD}NwK6DA&*4h==Guo$L3PM^F+#bIdaH1ZJc0fPy9ga4TYCYFD_&cE zCB<&D@~yZc`~lEr+RNiSh+yWRDe_ubyT^tr68d2(V< zz1}tW-r3vq**11LziZjE&0Q`xB)tjj`LY#Txm_VKq?an&!@${2I5D zx0IU3n@0XJ?0)(*A-#2mRvkWqua}`bpBjsJ? z-4vvGq2>`;++m#9YQ5_CsXt!)GT0I~A7TufYGmH`b3ZdxGFbDzmYwG+bou+KD@e<% z3&1LWlk7GbYU9te8=Q|nXJ(HzL`{@js{r>J)|=EMMI{-T{9^oJt`j{)_hxzH{;AX{V-1!We|=)N%Z516dvNsDXZ3A-dLD@vMf2@CX32|s z#_N$bzR$veHYRuDa&FmY9X1(yr*}k}zTZ-lvCfi7xrhH8mB_aV6}ZcXz@VHplXBzB zHSCaL=L78cvpXNpgR#$$8>FIjP{qap@3`PwEWY%HF~#iPqWIH zDbwLS>G#AJd~>`%9!h(EoKC-SNs;EP)BK^@J+aVki{uB)@blQ-fzGn~`T)sc!RA@c zf@j0A9i8F87Sq3T;npn}pY6sxrm{0!(OTcZ<>0VPYm=>j`p4e0M8sl&k3bvB=#^;<^u9@p|+kX)3!|p7t%C|QEM>81* z&f3XEv(C*eh#tvb%*vkx2Rl&|l;>YG!74ZrSjxAVZmFO4&shEb6{?`$XwgTfOwYk7Kh(&v3Sg;!n@lz#$Mb~6|dax zlr;rWYiGean}TRAIZ3G8Dde~`lJOg9BXvIqO5@_QAdMVgk-J2> zSNu{L9a11(`H_%b8oApd(dRY=x22KWEwWR{O=;v7i~LMTOt;SQWA=P! zSs#QA#_U07`IoRzWA=T^*BGk>{9lAi>=mL@*AVi9APvc;yR1j!Gl7*#@~;$dWYjSd09dkOgU^ z^axOH6LK${!la48qL6P3>7|jK7HKN5Esfk^kxbGR!A)tTcqyMVA6Ep|rIBqG$<$jB zyf2NE?F*F5vK7I*(n#qYK{BCM7$bF4B>C_I$=s>M)Vv zpAk62fL8!MD==)p3jtpgIL?6M0eSQrdlmzp3iztP5(5qg7c6MUclTS z&<;VKiTo7s9|E@-a3^3&;3fmU0{F4Obq3r3_^H7A47eKb3xRhT@K1pI1jY?`C*YUi zikF<9T%dv8x+CAt``lT3>_j^gds0p8S$q7MKGGrzLD;EXY!O8u>|D;Vh++_S@_vS4 zD`}K~u(NfCMGOOBr{`viChA=Kc z6p+V4Ry$XZ)gJr8djWi6<;FeBz|R`EKX9>uA2o0x@K6KGWpHxd0N@e>{~9>fG7$La0;;#n z1qK*aKtGvRmkt-$j6ChEnLKEGpM__I@j@65d^SE1Egzp9J(rvMS95P^d~W@*NJaBY zOh2&0ljOnF48+-+;~C*&1RK_gOkx(K^%Sm!)nLMY;L3dj4k)mnz(EBL5cpDog9HvK@FfANv2o#3Va8l-8CUi` z$q6T`7Ua|Khmljbm`Pkqg*ph zW=$kS;k6;DO@23<3N)wk2)pmBLu?W*x3=Q%&a$0AwaJUvq-~p0_Qn)REsP#vJ-z)?Yi%%=*0D5}Rdt_S*m~|z?u1&f=hHQ_u0IYbwj=sW#rJ`T&rYq&3gJfiWp#n-;j7cK;wujl~; z`Vd`Yq9q;(TLjkRJ%~VGqKi%R*?x2}*nXlLLZCmFo5V`CR&Pr zVTXYosKBuV9HL82^gDiZDcB-KA5UNq(Locfc_C~N>|g~(5;%hBQ6~ELe)K4?#fmN? zFoft+Omw3keG1s2iawRVkwlLsdchBb84adHfpP*z5j93p7YH*3%+U&rC2$N;;}mt8 zFyp`sQ=o#tu|$nm6wg=A8y||#W5-;1F22K#GkgJEec4{-Pi~c+Kmjv>VE7?(AC-d( zZpc0(UtPKJ>O+7Nzl>L7Rr&XY?{}=n|59>tK$EA*4EDBlv^Mi)G81Ftf`yqV$$>vT%4?x7s2P5G_5ri-01mbTXg}?rLN{Xo{D3)^%sR&y*y2u@4mydaohO5 zyrrh~yffw&H%;MX5S`-iS#6-@qGawdG>Aqo z%|YoHb^!*t8Y!Db$_(WW7_zWtC_|fXXkYcQ`Os#@_0vAqjB9B78CtP?rO*%B%plkM zWWt(34(&igdz+6P2yJG>&-Srq#6vsS(AN3b!O&)g|2aO^41Z{c8rqRQb||!&xuDID z%3$UKv_~7-eF#*-9t~|~V!Y>L&BTCqxS@R!EW>9w!^cUr05BlnYzQ3qa*N}=3r_t} z>OVzg_uU+s-&&iz7&{EEan)3OI{!j>e0Ddb`5zf;T~OCC0xk0w&o|8fP@4JUeO1i= zC73^M0%88R;1usKVYH>Xkz`n8ng~l!Ilw}?m;%^!hrDxHm2!-q@YF4Ixy56W0NqhY zfN8qR7#SDm8`njtb8V8WThiw`Yc4Co(`NK!ln8QsV|<}49F%a-k`_ddTa7oHCo;Qi+cnVR2@&RN&)=TAWc+=v+wk*v~KD8ij<;JcRqi;*9EHn~&RR zaYo6o$;Z8BaR+BPi{B-U^`;&DxF>AfM$?Wy?jehN&a|VCyVv3ngBQO}8e3KWxF5H| z#=R!oA|Kaiac>GY$H&RNJKz4DG+yQxeGhwKKkiB!hh~S}uaApZ96B5}ygshV;&@wa zaXV=kUCbyy?i3qmv@Rt+PSz;U8U0Fuk1MvgL-1f8PGPphKIn8m!Wyd4g z$?1X0_&6M5#)6v9Ya+Qs2W*iQAZA#0-x|h9{>N5Hn0MKejQY#EghXMkJ^AC8ks{(`-zTm=ofW z6Oz;W5ffAlZ*{2Dyv(xbq<6LWez za(Z(50AfZf<|ABa5;KOFGvkpnlhX$hGe$96ZOk}g&W>$#K#z+@&en!zosAg}Lq0Da zIWHa_pZcRvK7TX(WFh)h<5(d1J@a4*Zc=Gj4h8AFZ2c|PuQi;L^s_-#J!ZHrqe z+$JCQH;cQ=;q7z@*GlgRi@Qg-`+VGAE$%+2?B3vAKJK>`_mFULAGgZl)@g1o@^QCX z9A)NNN*@=sIQSmC%g0@5afZi*ecUvQgP$?SeB5}8+b-NFA2-J0;8Rxfs(K8wIKz_) ze7a(bga6QeNHe1Ql3&_yscAnS_l3o|ru}>z0*~l^Zrabsy=rm4Htpx*p0v0>nD+B= zlA-wa&!+u++}#%UuxURZcZbD2YTD1o-DYuUkZ3<2S8s9Xjc7j~ca_DVErR#^xJxY# z9g$VaslMl09I7F!lM`;N#i06Ar-GXz}@bcdj@pgN$tow6H(FpgV;6+nL!1iQL5SPt}nQ+92z zM9@({s|6JZ8U*yDQ+8!=ub_QECjE zqd;i)YJ>L)dKk!P^X?M#YapY&iwpWW(3iDXI5n?;Go{y-&30|cjcX-|XmNr4<;5d; zW~Esa5Mz84D_0^5h$)O~^@xaT3mg!S46rLtUlFdfgjz+4;}MpO$RG#>4v9yG*oA12 z2xnWu5@LqMBdimVqaYM`Y&>$TU6+m$;dz#@l$c;V!r~A)9zua5#+5DGjs9y!&nT4f^q=!>3}VN6`hK%^W(Efizpk+F6WD;Hs#B~*Kik4NDB zkqQU}o*R#xYuB_25&oMctR$u?9;t#b1fjs{c%<4caUl`jXbHo_)W##V5Y|8_a7sKf z#jbcYA`Dx?2r<**k!cXtK`8Ljc;r&M0M?1{I7>K#m@DIvD@ zJYu4DwN$V^9*OeJjeK)sJW{X4^A=0Eh{f~Pc;r@M8{%O>x5Xp3#lsD$D?}iDlvd3t z09Z@agaep&`0J|~qG9P!bK>DI;}LXEo%Op?BYJ-~#C%s=!?(0k5y@i@)si0%vr`Cn z$0LWx_dq;+!2kN~)cgNLHQSZ?1LKCDF64!t{OtbXqCsZkjDzmwGg&=26n$lTsG{Yz z{8`+es_);+z9DfQC+SDjCVq%RP|idH`Usr?w2J6@o?yN1Kz-?1B_y&L!OI?5QfU*MdW4mc7fBlhGK zpDr%2AM(IC-{~tat+zAe2idp!`$@mN80++FHx;0+Y#`IQZSVEn{E1b59npXGs;6^! zJzMwX{;RS-*QS5HG^81OixbkupM9;T#>)C3*x9&iODRtrFD0|w;!H+8ashi zuUos&w0)2h=A|eR`1R^-U$~BD;%yL&imd0w-X+lY#>=DP`(XPZ&v3oQhvL6V@7q2n zeqTU_;l#uU_Z7l{S8pnlK|9Bs*M~75cCU|MGbNpm>926k#7dc_9sC=%p*yL?KM{4j z^MHCa2lAwEGOstrulbox|5qA+@bhen--`~bUAOswF1bdJ?V6ZVT7McBU7{y3DF%k@Q(igIVbWvOBvu*WpynET zwAb+`yN?bhF2n})*(l2MsTc&B%Wrd#zQ0PJnopZkp0wR^x?eEBk=6UiEwV(run0@h z%vrzk)!p<3EsxG*6xycXGLba`UHZ{|Y+|bt-z`pjci3S@S$BaiZ&{~is!iT+97;+4 zS;?NPq74_r_;tp|I*x5|D11CF^(g=ky&PY~o8pbi2dDV_-|ANJE~eX#K3orO-Vm(h zrgZFsY$bJ%wt4(&8>``Znf~uQ|F@A} zxzhav6*?Z*WAEV$Sq1*5b4P1cazX%WbmIvfW;-D{9@|Che5=;gO%!({^$f%g9FH#P z%`kRwwaMaR!dyowRgIgdadmQGAaTD5>RL+?rWe>B~Uy1XOYu>~ZP9$6( zY6{*?`v^Zun1a;nl*ON~QaR^sX zhGF-}?j`tk+wbV<99(-J5po{nC5Ztq`h<0@dkX`bEleL%ptFOlM)!O1ZK5h5O zxdc@ejQqcHD(?Aaz5V8Re_n7%R269FP%)>rqAOa52Tga6Ty{5)U?S88wo@q_L%wRO z$D$&84pY&lH{dwBd{wH0CO-|%n@ZxLL-Ej;@eoSDuKEYVbeJSwjIYP*wpe8tOZsqP z9?qi2d4FO$87sflq(v3RyVb*F?5CO0%h*q^7ok(rJW9_?^D0u6ZD}sqtsRyfa^H}D zpdAIFvNu9YTbDFa&el{>C|TFtxc^IMxy}b>ZSnA;k=NL`WC^zsjEjV-c;V^QdTmF2 zHx3$MXM`T5n|NSp?fAiui3?X(yj<-}e7UOP`31azBy;KJn<;V}LnO#&{vXH>kaQdy zCdlXXkQb*@e~#3jQ|cEg^{vsWDtGJB1B)>~;As&u;!WDBvaRlBhRTTXIaxe7reWkc zau3f_PrN3T7~m2?OXP-lp)7#2(AVOFQpcJV)3no-+GG@SN94+2LF4}Jc<~ukPBqW9 zGOE+~66%umr+Jx8>&HBx*MA|539GY|SR7 ztEJloRc2mPX<|@;@HshIc7E(K6&vJFj)%aT5#Q?h6{`!x2T|74d6dkKW8w#sL>{Ey zG}qKl>EyoGlbq&S>)wKRC=d_CL)od_(%@KqHBS&d5o8Eu9d8dH2E1D41J!_32n+ z)_o@pr!HgoV-L^+FXSuy4LJ|4kF`|d)66*To?Fa08 zZip&Q6LtexhuNfO{2Jv(c@D>j9U3xA z{Ap|~F1(UI6R(IQCSDsM@O}N6sXtdoygN6Ubg0(olnfvk--)S_#Qa*7^K4{36-7s2 zvJaU$k~)jCEAq>yZKN(hm~y7&CM3qC+?^IpigD0x+z{|lR_aWp(__Kx%fn6+o;K3L zWZ3;;D(3UNa7t4lHF|eGOD@#~_pyaI1+vE5MzS=mVsW^yD0;fHcFG8vqk1Gxz`L5y zrrgl{?Ba%S;?hOsZ*>g!`^{;R9YyRAGv!$onglA|SUiqU4x= zD0o3K_w>Z*=B~xOOT$}33C^0`-L(l0%M+EOy;G2Fm9(g0T6ks?iTt_RVOzkh(@Lq2gY@!={N|rd>KRWEYtNqgX--$FeNOV2pA=HT2(HtVh$0Q%K`@i_PS-Qpd zJD~Cw(!0ZSD$kMNkFaZSMeCA}Oz&$Lr21-X9X1Y~wU?H1Ws&QXyS<{PO!ucY_Tqox zTc%!)raP3Y4P{m$`99w>M7R0r-LaiO_v%jb*W)j>O7642&3pOvb|5reP7+tA z=9n}ZLBbQ0G9gUd@eqH>F0uN40$wv6q};})%VpbP^=3=u4SC+i7pCJAcWfYv@@(=c zCbk-ibZb=78n2s!j!T*UtN-1n`dEC5d>$r>n^P`7%={xA-CWr1In?2$U+T&%zY*U|_Xy%0!Azu{n z)dAM`USmSz0oQ%Sv+{1h^Ee8PNkz=-_~h)wq{8^*98_EJ$+?M1x$(()iTwEF{NB0^ z<*VWlY+QM!Ez)4b}S5QVufHo=Pt? zO-pDu9?iUuTMl$zak>AZ$fek%*&g?QgtvdujTEadYDi(1)l&d z(oP|8v7noEqN{P6f^QQxL@yBV&ZCWL-R-^JOE>d_>vTL^hFE!BmiHE`CxtBW@5|cq z8I4Y9FQr0Nute9q7^kei2m$qRu*U%+sF@j0Y0SjHfPP< zx;9k4^{01e3MW?UP|V$g^Frsrw)o%OF}PUV+V?rM79W=M-Ot{=XnY@M*@rZbaXz@& zxUx?)kLD}mk!Bhl$`yI99!aO?;RJC*{MxH<3G>=VbchYK$_C*_HKJr z3tw|3&8OitI9-g@w!wFIZ`OvXq}Lv{N;z^}TN_woUu)}_e%IDvs%ab}mo}Y8n8a0i z9E*psdiAc-s!<$dwZ7V}Yqr8#5KBaD-GKF3%Ty}>p0zU3EDbF2@e6?cQh!M6rOx)_ zRnpk@KC!(FgGo$Jo2~@4hnSki=Z@Lmm~!ZW*{07miSaHuC^0^$Rad%P<1eFeA10Kq z5o=DRD>byuV|?apT9;%sAlLBAP)^G^YmrSOsE1kt&RW^=wqk3$p8q!%lzm$ES$q_> zSn+ur5phX>Q&mNK{Y$2IQu9;>+R2W)K2B2tCY93b@V5MEeDfKgVox5VEV<6|St2^# z5;f6_>2ZsQp*PPgUAD7aJ0c_b(tfsma-z zcO@+mJ;TvRP2?C=EMsdgx=&X3X{^Qiq6y+&KR945|LgrnO z)CQ7*Va{gusAJlZOuU^MddacJfb-UXu=O_l0#)!?43RV3t)XcwZ?9PeB-%IaQ_m0! zjI|YbA$VYI#e4N1nW5WWY5UreiV+Tg{8f2Xg}8?H7koIqFmT{Ld^%MT~! zj!P^q4kz-tCYH#;mnk>)j3zHJsc6bkU5N#_9sJ-R$~m4s-I!10l%qbbiT&dcei3qj zj(Rq>;}9w?1$_^wm0j&{t($4?*oUQ2yneQE*u$%-?Hg(H?wa;z_{-at8_{Zvs!d*- zXKb6#g1jo((47q7j0!!<#mU0+$@CP=du!!kUa!}cR=HnF-mOA0hC7}D`Jg`~%zLpF z+nt|GU_7Q;n0ai%hOa}1lNG9H3po?p-1SD=U-9~aPnF%5l#$wmT0PRb0+=l+Q7bW;O{6W>6?wYH5D&7%VM-3@6(Py zQ<}>C(yH#wldiATE5diigm`XQc?Rdug{(r!D^p{p+k98hXsM z{^RQAstS~`6Sr2;`eA&cQ)23guI<=0*i)ev3AtO*jG$K=YKx7IW|%a$ub`LVWo^nn zfU;96o~I7HiJAsvRs1ORg1D_Z;s2D~H$C@XWO$yf-&v-~ z&wcGg>eo_ zY!rDPv+|f3fX^;=sox6mf({D97&ZxPq@`D5?Hgz0r1Z2$gBx;RWO9tEavuETqU5!w ziivE)++41#O60?y9W8GJKO_E9Tk((i7gMGnB@QRX-px<>R`>=g+Nw(#tSyX$s4>Vt6Hf9ZtmmP;zJ1D%VW;j~5%Q}!@rui=GD z3{C5QY8DnF=NNhGvKj_m+Ba0}qfz0+k+q2>qiPeE(H7Z>3yKprv->X4&6RA}Rx!s_ z;iKLP$KE>#d&vi?KB|i|jzgi?M%I-cR@BuBC;BtvI<})!=NRZM^va*}-~`;2Aj-nZ zC(};F>fTFKeOmY7)#XZPLklM@WYbB53r4`4JKS{t1 zQj)KHelPFVN6d=t!@mhbJ-KRdmgdl|qFL@xJjO+*@kDg?EZOgAzw@t&8Q8Jz?C40y zb0MF<$Rs&fAAB|4>AB&+C*i$Lytr{^@uKZ5kB2eelSCr&d??$&^mz;LEyg?5P)2u#|3upcxo zrIM?yca7cNKi6pVueQSGZf^tYJK!kt*7DtMq(6P{{g;iAWt@`!jRh-xaD@e>73E@P zi~Uxq=$|vFS)X~cMPyPHo&M4495ttYOoZ)6i)dTfvp-8dDS6U6CQ%IdE+*~GqIuAJKgwNGC%vx4;w`74B0T5ed2>#!q+?(+uvvLByQ2`1+z`H z$?tJJ@ktFBGTC6#`ZBOs8EdeClkzHlx5{isi=2P-j2E4!CTI3xH!c74a#!B*F!O6& zB_E~w_3(>zjhf5*nag(E8Al{3X;yr=Nc3;^!0s!J@153*-hH!i=W(=5^n=z8UU+}U zeML1+4L2jSika_jOZ}Fw)AQfofz=}l>ya|bZeDfk;SYZNr8Zs_P3ekaPdr)Bg`cpW zVbnCfcbs=UJVA|ad&*?~2l9jH;ch#$e*HgYQZ-Q#dw-#~j4%H2RapEB|20q0uf`up zFL~Usmy+7Vi8ZiMxgSLqXZfov;OI0AizRxh zpP^Fbe+E(7kC|R&-R(90Cskn%6?d&C5qv5j;O9tAU6Q;Yz>9{TRufqm!hU4=`=rKd z{#;^Wk^7w1L-}Qu8!)G)6%+QK>{7hea(DBd9ZusWfnDvSDm4o)b3UoI;4F@8*+lS! zcrFh83s{LYuR?vdAgEr)u6XZti20R8*TGGA-OD>4mQ13fG_f%lYu-a*p)U9evdw&| z6Hbf?mTy&6^6sO5ffTO!Z>rVRUKBloBkuZs1mV77>Y><&yManG5v21Q8}Tl*(ZUd= z8dl^i`;|p@I?Zn@n`@>Pu{dLY0$<4;j6WeBNNZ_u)OJNU(_!{-8)gfxn%Ol?9BoQS zmU@q%syP}gtS>fa?LP-jOfA)2O?g*H7xyH3fnrNb_A+A&PpTv`4$q;89tB3S6mfFw zXIQVvq42-aD7=*tZl5?#jp}=-X@a?^3WNP*Lr?NmmUlO8LF<)Nxn3{%PxDgU{HSPB zL+xa<hoo%J3zCGds!Qxc7J1ke+hd9HHE2er!4{b%xNRz5xFCuU}qZ}q0J zmKmLb=oZ2eQlFag(2*{BXm#Wks!T`P2OZPp5&2#8WlD}FD2L#ZKLXFlz;PC>)KwP# zn*VD)$hg3^ey`;L+c>|rP2HfmLK_>0xRj@1uWi*G6j^Kr)HtjrWGC`c2GzOWq8`tn zKKD`gWl(uaix2Mr)g!-O8cy)KIsEDnx1itJCT2P0ef=a1?W43JrM@bag{^X0UV|TQ zqThP_BMpe%E;%aTt`$f5x_oz;L^1AlEg2X))Ms&-`^W~!zSE}l_gUD6S?`~67<%a# zU!Ea;hvGLdq@L1Y!B^sY^J>ZW>GDm!REMNi`imVZs6W#EOA9&Dt}@}vj0e(xROw$! z`iGIE<;q^tNAL8h|7KM*ogeVqUxByxhQC(-ZN&QZ=hW1DpGNlUZ)1AZU-26hZ|i?p z{Qr;o>*VMg>#y{$C4KiVy-5C-`ZHkGO3VAN@*k9TdnH#&YfID=J>$*j;dO3heaPFh z>^AzALD)5^Z==)nCw25I-f_%?uC`LA*-BZJEC8%71@P|G5OlS11pPM!&{#D;ZUQCI zZ@Jq>Vy^(QD0(y8ulZ;)GKLOzQSJB-rO8<}lMW)%lBdM3HrB#*1R6gi(ccrON&M9u zOlX4tCoG1?%=Dy$o;30(R+=AthXHio7lAC{H;YVaZ1@6V@~^dR(dUcEvLj*nb4~KE z#_UV@?f1eb&NPyd;Uk;x0UnouD@iYPTn6s^EASVV|LOY(lh{0&>hqz9*w{H4`j&qO zmbscAzg_Wi=m6X!7beFJqWDT~kh0sVl_WDgR%(3ns1PpL+tY4mH#F92zo3_d9-^TR zJ7rmfBAYFMTtqodV(hUc1%c@4+I91YsQ;j+(=2r#4cGlSImbR~OfP+@Pkxu)@1!00 z>;8FIvIvV>r^4<(-4}7;Z|ooBZ%=yA0{KBH^0F`^H@gcCmw>hOHA5ku$&TgOaB>=| z$K=?)urb}z7_C2*MvtmcM2VEj9r-*yVhQAxDVdFqlj*2-x-+#+n&UmjOi?aHKn31! z??wb7Kz|R{erH}79cAD0XKN~ogU*E38n-yukw<%T`b4bSz~2o`=w0y)zYMptSo=b7 zT3?ZAIefz=$Nu`Cfh@B&c)RJ~UY*s$pO$`f7ipMI3%iBEUOm)g2A?{Kbwqun_BDO< zZP^#bfqHe*NZU;I;RTLUZx*Pou+mu!?E!}`b_2k zVRwAcyXI4M4hJOC{WiBqG?NCH2dPNKbXaNhCKe*~R4qL<+H@>Skm(z8h;T7F>^`JH zMI%IIhoSz{pP4E}rOFc)I8Qw}I^5nAY$SL6^W{%Qii_IA`we}To9P#>sX~+KnsUFg zn#W&jm3nzIUi?|6Mb7>$hYvsaL$CGJSB25Rqf8rbBXzYg>@9j6UvJabs8yJBa0@wT zOnpI-41Y9gLyjd?qeAJt%s`i45v;Uv`pxa7rh5b>$4DYyxQIr)v= zl(=(@#tt%p`^BF1=7scT@rSOBtOkD}AfybQq&n(a&pPmt32=t@r@q3lL|nznA~IRQ zg-A_d8OM#x6#>i8Feqa?OP%Ji1T=V5fL>E-T@Wc5>(&btt*|#`N*VDe? z#9E_zN=|3keA2x+@k~e_+>tNL|Hg%V)OXnC5muzaX>C_{yf6C zylFc3Tl}I3=>U#b59<2C;CS^B99l1bh=*V7t9Y#(ikesP!Y-yTf6)rlBaep@kK6Qd z*p3^7@%c{E<+QP!>D&)t<86ZqaH#Gy-AHQMCEp1WHLr2JG=Z#Lp0}KvH~rt3Q5>W1 z%GGwSb!R@j{>YH!hsJ+Q1Ya0)J1Ivc_jhOLChtr+eZl$8Tk;(vXKu5fBM@ovy|cYV zwDIC*d@{{`MV~?R7T#cHzb8PS^G@oG@-$-|$MC}ETn{YocHg)~KAgCLKAVv~m+$6^ z{Ga^4)2Ft{egMTQ#NuaW4o{rSR1&)g|BWzrBj>(H7~IT%;C_a(8ag~B&V17uG_yr6 zY2=Yc7f71beQu{bL#@Zn=|G&Vj0MU67~~h&mw|p$-i}MZIdHMiF%qQ70uM{fQc-sK;#7DMWpn zsBb4Dg+!gAsNdVD(L|k2)al8{0HQ`Ks>w!;A?i%|t8yF0KyfDRzU+r4Dm0FwoIT48 z@qgX8)HET@JpbBwzmX`7caEPk<9+`SJKj+~bSI~G$M)k9RJelk^el{NR<8_k)yusb$A zdv|*gcbo0iE7e`j6rtnp`zmuETR08|g*#~PNiX7#`HJ9naEjYuV2e+u-4i(ODX%a>x#(o~2#&kxD}wjm=B6`7=C=l~0OHoVgfXBCfw=c9`5I_E5VzNBc~cYUR3L6a zqlXkU9B7|YRu~i@9}i#FRJ5?JqB)7}?8Na>vT!Mvqh{@?%f>^0Yzs4=`$>TL0@oWb z2e6;OM+}I&!@7Y2?=@f^;9!Aw7%(4jsK8|g>;rhTK=H5S1Y9H54Hr1afPDc+2)x{Y z{Qyr8c!2@?1D+)C90TG-vF_UfPch&Cz|#dDYruhkX9^q$NWlTmuK3J}bu;q`pO@-V zz{r2jnkhxROv`%&{WJn@8&sS44=s@RS4SDOca}4+eS23c>+iQv#A5=RI5Nll{$?n@ zoWefF58pi^pVIif{P8~hc|K%}xA4#Ya#<%{g;xasiu^Il*)JEvO~HEs(D-th>>)xJ z;oZXz*9O-lPf^!TNeDs>*gjL2eykW=qU3n3Dknx038`VB%;>==D$1QB0$LbCnNRk~m0 z%g?VO9h&z0O8R&ANJ6Rcq&;h8k3jL5&tNBkP74${N2CRcyk8tHP#|5cI&vwMfHjU5 z<1Ct0<=~)^KidI|{z)KQDv&o}yhh9a-ZDJ*9^wtF{8Znqgn8oSvC1%4%X0UEMks+z^#cAFA;mCz1_jGNmG6NT$VxPbA9J-j;Ew0U*9u5{_NNfd-K5Z)%1|Ns(F3_z z$h``gOtuhu3*X?XVzo1S2i4)xXXGREz4I2*jq)do4E$<6Po$`f(6pWO=63Mst@mvz ze#(9%nafplTAm_u8=&7JEI9~VlxLT+Qww~k;_z0xDsCDOS|hnpEiz?UlZ0l4vOUo6 z(ARJCXYPK*B!Ty+^hMH#{)Gr^&m z;E+tPI1@Y~6CCUZNxvvLAxG)oV$(m0^h+{?$7O=UGr?ms!C{%;F`3}eevtG_k`r>3 z{xLTF<4Iq)!2Q-eF%vu?6C9Zd1~b8LWr8F8AnBJTC*&#p$Kl(wPZ{Zt$`GEG34S{h zJT((MB@;Y36FkWelK!aVgnXs{9h-hR>5tA3o|OrnnF)@~1jl58XJmq>`$5tlot)4| z=^tQmr2G}6KQ2RfekOQcCU|ZpI6f0RClfr|50d^k1Olb6^GDJTk$z={aB?O%DHE*D z1gkQ^iJ9O8KS=tO$q9XxK95)^eV*-W2xkZ{&IB*Y1gB(zwVB|BncxL}ko3dJ3H_A* zTS%OwUq||p4B=&&;Pg!J(oAq#CO9<{yu=TZek3`eztWc;pY$&${TUg;?`DEmXM$H{ zf>&mO-^m28@Pnj3BRQc^=^ta${~qbj%n;7b1ZQP}Kga~H%>=K>1i$YGNq=T?!T_bO za|6o%L(-oUTi=V>%*}lE<4o{JncxkX;Psi{b$*a6=HTS_yQF<1zIEqW^k#w!Gr?IXf;ag=5}udQpJdcL(vUZNjPb^=(X{sH*L-DF(^SP=!5{xzr$-JNikvCM z%6Y`4H=3WLyYe@h2jga=iCXrsjb@*Vl1+WINkFPd?=!tdfEf?*C$rB4n1?uFMHv<* zv)T0cWl@$$VfUEdxZzCiOU*9SP_RM^P{izal+8mvU}9I2qH((qiOsJOjPbP3@@|A3 zZC&k-^&WN`L>nneBsM(?WfC{(we(8QSMVrLvt_);Fy$wLf8bZ&kXqc3YhSn0kNky+ zloseM4+6?3&;6@{jedO0|5#-r{;u>s*f@<~Ult`E{5|?+rvJ?kEbczxB0kRgmR$6Z zaFsr8vZY%m+-M&+&f;2xEA??@7Pm>bA|H3O#hJZ!mXGUiab{m_oMKSEgK&1rXBxyf z%mDYX#hLx`X2bcP2>#vT%-*=g$GvQEd;LA{QnPRM;~utguGzQxxPP~}pPPNFkNc&? z{aUz2AJ=4Ye-Lh-kE^%1KMOb0$IY_1hlPvyxXUc=QQ<0mT-f5wo_w^AtFSn;|1R}$ z7>27Y%wD_5#~ovFW?!A<;|eW~o%D)er{VngzT=l~*+H}K_i>+C96M+B{XXtpi`!>5 z$xYZu^hjxTlWcayy4`3u$z~gTw*j?DHv8V68Bm+#;o^O=^hOK-JOOvaQC4h%-zNA& z7FU9(vld)!H^%1?oXU~~b`n9YE(9+kcrFV8!RZ7~hi4PKn&64BSAw$$4ognZ2KdJW z2ieW<0vMyRTFiYMqt{Ngc;ZY|X49BkKbTEqPJLnM@j(=@qo4Fyp~s~r;S7WuT+oKx z&!!}=#l^!O_Cop&M+Rk8SUUaeWY!C}-Cd7q%bs^T2Dw|xJ`3y#z4AeI-_B6Q*4u_- z5X>Xfp1aTDKdEv*tvddVP~T0&-nz3o&fAf#fhiR`>L2inHh}Ch{I)7_6?r}QCYxI> z`5f7woMn~beW*)3@6TFEIq*BNrY;b2zXAFEYW1P=ZU|X-FoUqqE?~`(9RsqfU%?vnUnCc&Qu{rE^1erDb)u;&Z=8FerGP3 zwO}vRnu<_utqUhmv-JM>W2$Qv?*G6LySKufmky>Kc|7N3u*md!;QMN~T=p=PqhY81 z_LFUib|k)5JKQO)HqY2(*A;cJrBX6`OVg|O1(6{dD8rjkbSIw-oaT%X|JZIeRs1} zlqW`UY&3^HSCJQfaK_W_Lq6_*EY5gryvN7=hs7E1yDNR%DvN{L!-0KVv&9*Yyz_kA z0*gaq3J3Oavn`G{mEgcWZidCNQowO=-2M%w)a9|@_J`uzKSU5aR!hwC9-h2Xw2Vhi^f8x|B&22+) zTOQp~r=2h5`~;rhGCRR?1Mvu#*;jqbKs>``b}2&)#6w(0=I>)5p5ihR^uGN{g$KEe zJlbKPg04D8IlN<_zFl>L1ifsaeqD7(2x>J@|E{_rf*vtYVOQOeg8pcr0bO-R3A)oj z1H0;u5#$2Fhr8;I)j+%jsH^U{)O>!+x27IuUhyOLpg}n5z04r=`t%IK4;Gt2nEMr} z&>TNh8NSwg999CD!!yZOlFrOY+jamXIU~^#p>r_9Bs5YvH8Ud>Sp_|{(GWZl{5ik$ z$OhpWecVqh4*7-k-p9?iIL;3kZ9a~BYWfzLhSBEZF10w$4;XDeZj!|z=P=rQ+*uZ9 ze0P`nxKS2oW>S%lJIdnBtjY3m{VdMRkWOSM>E#dbOIgfp*zV&#vN$vHH~YAEEY6Jb z79aPL#hDTPkdJ%X;ttkoq&D>$sZyS6Y@&F+L+nQ*wU40X24bZ47t~-NMyey|dIK?1 zj}UZ~ff%Vr3cA=pjMQTUg$%?O-dm-TRK-{nwf92C`v7f+HvMT2y;A)I@Fm1e&$C~ z+gZ9fTY%p{$LAjhN30re$k&g9x3Vo{lN)f>;0RXglI+U3poW}yT@EWNP_`Jte_6Ub zgcw|sH{?QroACzVhCcDSJ{%SU<%_b>Qlh%6cF`PRC9WBcLwv@+0 zISd>}APpQ+H2^mp7q2^xV`!k^qHMC1$3s~Pt`v$9`~o+8D_-|4PNjiHi1G?cITFes zI1alSPT&`~;ly~|i5yY`ogm85ma+`WQQ+|9)Nm5NzzrwI>rUp(8t5cZ=37c!5Y(Ll z4i~!(-{u#%;k0<&X&hk#eOr`o?>2QWhjKKy(NLVuFL1*d@wziO(FQtQl>cKX$3i&< z$prKmh|c5}RKr>Ey0ZwH1Maw?tYZv?#>MN#@xj?~L3QWEL+8Zn&Q8sSz=*|Luo4d? zr*=arJ%JkQlUME200ZSv##9d~_s_ntR92Cp>o@Mp;DRekp;26^}s zBM)yuP6m%WEc~rrC|)r!nalNNN$b3jauEh$-yj8d{HnaW;}vZizWWaB0;##Y#oQsU zP1X+O0^6Yuq}D2q(BgdzIvi^cK%%21J?PP7TpF$!%EgOUc82kFI8Y< zZ&T#*g8&j!#I)|piI#G}+3s#lPU=&`6%I(aqRPR;F8%6O$NFSl4q~xBcAD@a%gJP`KB>ZW zbnC9{DcqXka&iu1q)!dEsLWX5k_?^`+^tHnDmf`fANNjHc>H)IwS!a29JSs@aWX0A zY}w@}%pJ&oop3zmX{z?<3o6dc`bvF&ym$JCsRmqFgX5_UO zcY8ERyUN8i^Syk%I7elK+HZIjjuuh^w2yktBtX;n-&6C$zBhG*xYze;i0Eh~o@oG; zOlgzKCaO*rAYM~V)AoY6YuO24{8MX@QzNGShS1~dHPyI!L(bsmX7E(aX*w|-@g=8R zR&OBsn@A@$oj;^&=;RS2mB%0a`CVqM3qxtQwdShfoW$C3v|2C2T0E)xkGXU0aJhOn zv0D7DD)D5C`FTJW9;y<}oA}{cDStyt4^9hJ)$k^^iCMkb{5&Ze{HnwQvhs)gZS#}V zt|YwlKvrc|*20rR$tm6IK!9n>=l7NE7=2Z|IX}OnXk{!F*y3@2++y%r&3iz1D}!jL zs$#Wnh1CzJs(8{P088X=*nPLktqm4dVQ^aDy|Y9Xn1re@8ZE>avH361#Qv!Aa;Y?L z{KJ8)>*iItDej6zs`U8wyWE9U`uf-29QH#XXY?Rv`XO&ggSk;N;|kq`!ubJ%d$-rG zQTEidUoR`kAMpidrE|V|EvhmrmQ+!)tK2`T1F$~ru;ae6YhxgKb5$a#>nEu#bhPc? zN6#)5KfM8KV|V9Ml@xLowJpZ`7I$5~`w(W1&&hiEF*ev)&L-MmsCW5IGJ7>;yJ*pY z?xjyEC)-o9W^Qj5tbeJJ%=p3|QR9=kdRY*{r*A4^VzjPQJn#|ZPV*{_y^7{e11vW{ z67zRrZU*Sph&1W{){blIO*_g~^q+j3`XBye?u)Ezmjt}q`}sokrMgxfnmS9_B=Zu) zhMpvh8Ex}C3Xoa?;N2UwcHJTF@^{Pc*lTHX|BtxybxDC+81(dH4K0+bVQ~Xr)+F+4 z5*HPO+LxOiW|^uhJubCzNG7@%CNJ0Ms7X#LCa5v7PLZjVw4c_=uz5Wm!fuk$ z=uxmXc}fL_$)_iBgMn>MT>M3TG((BC>!83!Ho7Q`EEaOtD&xRE!|pRR?wv}!ybE7w zmCmY-tsi99B%fB+o~zbM+^NLV6+4{eGQJJDw~Lz5WgOH{ zlt)tYz{?&ywy{9Y5vI{z##r|O2*WaXCw0GkZgp1bN<&_W?QvD&lwes~x{*ZYUR@Ll zyc1gbB@ML1SvE;2B=e5l7|{LCTpC%ermo?m^jM<{aiYJWByBXD_VXJ$`S)sruOy!{ zEV%T5QeXHd{2aL5F4q1G`vULoTd}v{T52X??&>w4i7s9 z`s0!t8x@}|tlN^pP_h2Abr?-^Uv;C{2?g%@GTyVRjPK<& zv(mE9w(JUghGDP!8tG3wKg+%A-Te(QK{__SzrfZ|x=bEVxP|1w)@Xe7~G8%`zx!Z$8y{t+SWQ z*r42A&$K^mDJTf9b0Zf`9?aYuyX>-iNa^KCUmb7xr74 zko{m57F}Y51wD+gp65U}6n&@7%fB&wFUH)*;gWwR6Li|8Q@LYMLe|CRhJ9G~1-Nf3 z_e6&Q%Re|EFbup62eAZ6e=X@mQ_)kUzN>!gzt!v|hdu zRE_%~i^@xGTdy9#^Fc0SlqT>_qd;=GzsDP?qA@3EY1}vL_MTA>-EI3}w>O#Y_X}<= zlr5xeweC*4NVPYoJH&hUy02B}JXOe8%UMgg(05aRo^J+I6S;k@6P-*ahOUOkcq@KP zlH56J<&NM?K2(32cEG2`aNTt}KHQ#f5^}$^{rLBA0`K&@ycqbK0KT+Wt>_+MZr)L9t>2 zm;fqr6Hrv}{tQt;X}Lrt@AtQ#=b4#=XxsB%{(dC$?7i2%t-bbIYp=cc+9!+84=Z(F zWYR{MulUtCRrBBkcO5a#u+mk7s00S!5zH9`YG4>=v`0!yb6Tz{JuA{uSNb{k2LP|S zG!l)8J=`w_;E|=#hrS@GrxHY&0&;&1ePqw6mu@EPRU|^rBF>3(OWFehdY|Z8u{O_n~`bOXf;nI64DyqLn1P0-9r{yD^Cb< zH_Cdr%er@?>WZuOL+9~y>IiLW4^K29gy9GcD0N7Ejb2N`|pRWGX)7lQd4yk* zta?2+5$>v6g4$b56Dxf*75Ph`N>yEiBnI_fd+$rV)I;uB&6j(lwpl18#|dGWth}YF;Fb?3#|T-*(-3D42es6DgF%%{cr|-I5axyrPVKwW1Z?Am1H2Q6bBK3QK+?AS#$@8xyLKQj?NY;=V{lcty@h%*m8MdGC zoh8b{ju>-B_KhrWUHqi~5aW^iLoy1%)vxCEx_{+^OWT`zF5Xq8|HMD5k?FEL(f z+@EF)aOY_+rO#QkLT+sERUJNyo^^Iu$EY=&p62-p<9nl zd-jiLhzFD-f3eMSRQli&Mu^3<$_(3Wj)~7&WQEqqMO^cJA_(V4Y7oF`Ms@P0qJxG5 z<=0m=K4I8&{RA_)P?jT%qWj@Htn0+(jr#nhoJv;cC!^ZVD6+RF-ZD?%T1{_JmN#Bh zRDV;#c*;i$_{}WU<#pCbrUJrM&2MmzkPexc12hUTYBkG8PdM=r7lq~n#0Vb2z99Ur zhaA)TtGyH6U%o4)b(Hu>mA%@+Pp~p@yE$UFYq38pBLbp!hZqGj3|~#U;9TVX8xt&^ zysEU+3|idY9k)l6x(Q;<-CZ*~RPX6h4FX}H@pXSJ(vkxXi8Fz0tWg9dAET;_n`1J& zBWS!(H%v@*NJ_5KJ^78T)DyQ}pC4rMMVudLP@>)tRh6v?hUUCrXv$RSyiR6-HxQWk z8HXLg!lmh9vIpY;O8XJ?#-g~x5C_d>F_&e!7!QPrq;=WC=Tw^0OZa%@+M9!Ak$keS zZh?cbzPY&H*0=2=(Tc;?(k}RL=W&5O%YM#8HUY)jXm6my4BEGYq7M1%KUhN^yTU7Gg1v@Wy{iApj+ESoRZ={$7 zWjhPXRD;?Q#F!=KL(IG6a&O*!1!|Ab1TZsMtj_tan#9ht=ej&N}q!3e+`-gbqLRgq~`Vw`Rs0bekgwb;WF*O-bD5=#PdPe+dU zGY@5LxBC?uz^`$|onExLk6&YA-G^_$ZH`%Y;zhQHn9*Y+M$D{n?`M`~35Q@kW&Np=-5`pR6B2@L_x7;v)$# zz@aOGIPS2P^IFoSp|(B4+g=+I+JrEiS(@kn=Hlo!vg254RnsR;nulA@_NHNi%duaGY8|{UZkJ-=f{d~H zU`9dv7>g8;P(PWx*aYk9SVInp<9$U6XgG_pC4W|`MHqA#dd2+_STuELpq6Pud8;4v zJp3OpaQu>4b51RBe?tp{krK$uUzaMFUXgQk-+qyJV-R&KuVfvDC0gS+tlIgxIC19* z9{-IIR}}UHT(whLTJbX3tjRCiFS`B7R`zmTL3Q&R^*iyHHbE7=p~;PVfkiYuGvXt- z9;fk2D~SyEiGN_Ye-60Ys;QqmKlUeSe%ObJ<2?c~Ed}pYiOKWN1zf>eFZjkE$$f+O z{V~RW_e$@3m%cCIy9ayl>|?SaAM%|tXc|Qqzth5y#ILK7ttz8H;w&aEt)%guBCH7) z#ChyWLx=(WDfb&7GA_QP@s|%+c8lM&*Gx-}{*BBHOuM>8Y{R`NzJhk4kvCXBgT#r+ zx{_Qo3pI)xXyhu?cIMt8_Xz?SF1pXXTC*mYdjfKIQL#UwhW!i#X{I5WQBBSW#WAaD znrn8>y8=8W7Z#cMsEApLxNgeunDceUI$nB$vAvp>;-9XOf0LpWYZly|`cE3`uQS!s z-@)m4jR>`$S>gWF3n2*(x!?7^Im^O2-)-?iIJ?6eo_i;uwAIXgX_i+vtBe8B89Wk2sF<+m_tXB4)*#TEY6{`=cr8{U5t zIOW!UZBgfsJiE?5_cpO1#$-{3;7*6&G`0c3VKRb-LQu94aV{C$i(yd5@)z0g`j#KK z)UUhN^H#?SQBQcv!eK2RJicw=SDMz>Rbw{BH~yFToJbV!y-v&J`vShtOT30pg1bwL zTjHgIt>%%CjR<8__)!$#oUrFZexcDXv1sQtwbqZJwex=Kwf0&~j~*PYFjzhwa(n8ADUqc0yp5N43_tOiT)%Jz|-VzyB>~BJObdw=g&9$?^ z69lkoW^7`ud$I{+6swhwff$ce%T}!B!XQAm*b0I-TeI4Dxk+)CL)57fxc#!Q zG-#Ttzo~gQ#I|-(6jQ%A1{g@s+kwrB&PIl#W?}{|ptQ8B2w(j99XEI5Y7}3e%E+wE_oiBB3B*sLI%-^D*%+ zgCF)E41Vm58I>ChY5UuKn5L(3^IZbjxVZq5>4}>^3KyCz-pbZ}U&fm7WCA)IYR}KC(EfT-PvCf$nI=RwA_ObIuI(^ojn9wS*fBk-AsL8 z7M;CD6BRUheg#{ksdAQ5zFl)3Vaj*gAUNa0)IFQ>{BaHRPftGh{H3JF6k&~#(6clD z1`>_QYZEQ$IXxQu>2ZxeJq8FH;zq*7Fn0=c)W`IAh-tqnGG*!ykt6f776JkAI@+p4HX`m3E_wc+IcLI*D51gt6RAxii{*pu4K)?(8agy| zDDWs+H<>~k*@Wd_tOAa|?AHfyZ&Xk!K~!1{@A$v9Xu z&BM<$aX|>YC?f`YYzu$+(jMwW4|y22w|$aIsG-MZw9h@N@{#?VR(i{QUje-(axdfH zk-6!SNF(D`HO_i2XG$GA7sb0Qw{BgVN`5@FsWY$i(6 zb@-~`Ch_Ld5!uUbMq&)0t1h1uxkX4mlR!X`8tOF+6TkjqTTpH#<6y?cdzaI_ZMp$j zsq%5Nowe?EpPy=y+$S`tA;>JfOk3R1fX8Ty`EZn61FkPg{--jqNizs6OelY)Zr7HS#y4m7G9<^EA~xF=_t&;uDh z|Lp}cTrlwTr+ywvuW?i3X`@@q)DQTVe?}D3m$zBw**kjR&Dc7OivEGyLZ4*TI1lk` zufeQSR}pTUP?}SBp5ae%R`B*yyvfr2t+Jiwk(w^htQT{|?8Fr&CdZxQ-ycoZdeLi% zwhwS(EsOJETNxf_mX3(q9mYiBt^y0I>Sk530O)pqZ&1QaHzOh>U830%NCAPl&(c(X zILx_}k7-t+3AvBo!2BrN3S(eLn1W9$V zMypAW5lq+T$y;-#H7r`)E~)!$cxJV|_OiJBtf=D`XgOJPwW;*`L}1`f{?NEn;K2uX zJN1hgib>&E5bjRL!Dy@pq=^!Sj7kZc6G9kQMK7{L^OXb1RFVlNuA7KWwC4H|IY{t) zBPTD!Hl=2-hT`M+aD}+6ri)A@=kqj+IO1PEn{ekUg~T9A*m({#}V-xdhaoOiT{@B71zY$d+x7 zRvfkNeF#|lNN96Pu4tF}O)u|u=a?3#xdbjF5VV%yWP+(_4AL^6G&CFmB|sV}@5E6= zENCXnb`P=LXnI538@HI3HssE{8T!wGmwKZW?mb#fnbGPHE7KT>?+5wT@l=GND zk;cH|Dc$Z@HK;uYY8%61#>mHS{*+G|rW+?_57SkIf{qK7al-JLF=huuYpZe9&VQPX zkK>I#?C*R0Saz*o-=o{x_ZUjnEPi7(jqpavhK5!2W@u@dXUU8wKmWlsA^0mNC!W&T zCP==B5>Y_UdVvJZoaS~CG_611K}@QZ5b`@Sem@Nd{b0bpLm=n|!6gJ!=QDl~$$n!@kI}#fX6XbPe_FMwcJk!;l3>3k z;M0LIb;d;;feIiXcLQuc5G^8~E=@#ML#A~5U`88oXIGjOH;UpVk&jI{*ou_mnK5y= z7f=Q)8hZEmbI;8p@4SDLageHGDNKVAap%{ihv`q$&M)o3tbakIZ!>-1yW)*#J=3e~ z4!se;`B2Ee#66K=vDb)!UoQv;cl0xvk>cdZsqj|rUhSk$I{%)$Dl|ZuhQzLG=e+h) zlun&6QFja63}+#{beuwYbGYAakr3CAoeH}KT;0}OsKYbe(+io(29N5cUt42)~R;>JG{vniiXz2D&DPsK_!f-w*RV=uM^C$ zo=F{9FD0DPW;yrmq=UCn zyKEAZH6t&!U&$I5T7HG5s(r`|hZ{G6j2-G7>NNP3NHk+{Be?g}Xfq=2zXzQE}d?J_+fqu3F7QhnTToN!x z4x{!C?T)Z)$l5WUin;)Fv$t8r@xb zx-po#=(EUO2ldC2cb}T;tybLeYM{o|m@HsiyexXNmQLR&9noWGIX>s!1+a$J z9Obx`KsNUr%s6C^ZmoMCqnXV;|4frT%!}N!x#t-dnY``*@mCr#H%;~R{{;73ltu2y ztzHnP2!fiy^IlwoXJAtf4RG6;WLf-H>-&E|{!pMBp_pv>Q>RvfTqA#OAn^Cgp9-K? z)m{<3P4Z_nfou#uqp?WKAAsD8p_Xh6-YM?Vr~KJdVN%?6MhE#c`Lmn}-3uRPKUx%b zj2vb&HGZN~cGB5ZRn;-Gr}qj0 zADd=fevd{ez@~uQkHDUfO(X9|i`9WmQ+kiB&3_&5Ve?MIk3J2XbD8u#<}>HrIRCA! zZ;rjOfv*=Wo!{!(gPvEuZWA}Xt^0pUf6R?$>$lHGlQ(h~9#s>;(z5!WAJGNz8v8-{ z4RXH*W)hF*@EPK|#lz-#OWV9;(avR7Jm0@@8t;!LRC?lZ{SBGObE}%(sJkN4Vlspe zuHCOEIv@96&s;*?;l*$4;fELbOttP7Gj|hun>8q}vt${E^Y`-pId`w$l zN;0R;^b(tB4=8C3k!#UTUGuwNdo!KSW@)6}e!gQK+y&A$9~YTdc&&Te(3LV*pZq)g zb)!2BkjiGy?G`FLxYYEtZXB){T1-sikwR<9>14ms_%65_zYJHEAJjuPTtDh!mS*I2 z^7c?=<5BMPY^5aU#~Qy%T%Dn%uYC~3I(f=(`O!6-0-XRF&BLX~|4cE-N!>ijv_G0W z@?m*XlBHufYL=fHF5BjOPxKN=-r3DW`b+tiDaqnNRz$0@Hx9 zHmcW!piis`$1QVKXKH$OAvL{aE$O7^$=mZ9kL2@yl8=S|&6@D8G>7fPpie@QG|7U6fm2+^q-Mgj}O-%)jM_6KuIsPBOo=Z)*74KcsZzw%^dtoDo#+&R+O(XKG zcQ%2_? znEwLA-KG2OHJkCrb1Mj*(-FWj%NmLR+0VA;P{Xk+TUKa}q&{G|X?9_KyMiAdcb1Cb zRCA@7!S+u&eNX%ne+$l1O$YxS;4cU70Lv@FmE{Mo#_*E9(szR9l+mvyb112 z!pGXUGoALH(fQ|${7ZBdSP$e;RrssAo|-I}zAS`UKX}reX*XmB^#1kZoPP>8e#lsU zRj`d8LaBeErF?<)v3ynW-m#sEa|MY4qW1gY*1dUji`lTLic|P|@|k#t2_$$1K2rJ- zi=QQbQCHc|V8Y<^VRbZw|Dttur-u_=MYVVF=I3EueURtNDp{{?rDCt$4Cjaw;-Ssq z&&FTCzUY)9nSt+b9CWesX^Yo}VXD{lREXSF?xJBb1Q zvixNP_=-E|fAflBi8l|&?USZCSB*bB&AzJQaLj(Xx~wx^wzDe4%f_!C4ktb=vhKYV z#;V)5`xRBbD{Q}%SW|SdGpuB)J@YJl0PI@8#vaLPuo~{Q+Pb%pe5r6YzXtnH-!FzX zVu;Wqy0-VmWZB;mHV$e!KWoM{^kP-Zab8S}WfaL3UA14ZH`$wUJ920Gpv}O7#g{1Su zWqv;u%Jg%z*Uvn!pNUud`MnIKd%4c^GDI)8(aU}u0~V%tm@_Jkl!cj~;JS3Z))Kv- zo~b(@fS!0(Os0N==gqEHecP+KJf7jVz)H8k!*jlmXKw9$A3UWlGc90V8Zt;tBk0j{ z#NjEulO{Tm@gE7TAEiEPAdP(_`WRXDU&!~)U=FBDSDh8*nm$9c!qbZCO7R)ha9rGZ zU<@;cW73KCer-qdq7@sgB?l14hjzv~p6aHs@agRsKZaOMU(o9u2itk#tX4js6Guxp zZ40uAE2+C7=KNUdNX+@I%ENFcUe%tLYtDYZUW(ymJ-(7UhiE;5@K-%eTZ!g4(x6ay zRHQicWDXOL2JYnFrk2RSP^4^kQ)`^JU94zFEYwF`ln)-xNYJ>_Rde zUS|z04q=cV60g`g0$}EIA?OLSnKwCm&}_NGvfIyaP@m#gG^{A8YFUVc+Ey!Xynaf4of)9q{gm7< zo!k#5spPeOGN-qf-&B-NE=tbpuVmeNRqp;u?w?NXpPV;9$*MxD+3JpbK}KRD_vOmu;t_PW>^@y*xu)7wT0PZW3##f7km&?0!ZWU$3z`H&WhT33TBPu?uI5HTwzd z;@y?q(%j@7v1>0MoqzE&)TsEb*9D~7c6Ta%H-EZb6xcf+Sj4K)(>Gmj1H4PXyVc0~ zdW{9o#9`~k4J6DlIX)t|O|R6<*Q+cyeh?&V!z+5YQP&j5KPwcCQLCe> zsr8N`kF%D+MDfeC2(s(4mW=dZ;FEm<8c@B!Eo^x9CG2Iy}9hWh|mSo-Sf00VRYcckhnCoTH|8fbtv`alEw1}Zi{zx07P z1Kd|hgA9-yN2|I)y@8l8gM}Xkd&$=U!s+5*7EI4oHg(_8?=i{IvLmt3v#Cj>W%yNE zVw&edW6qPF#N_Pg<-Wwc#GCE&@ah*$UXxpGb3k;b3Brnz6D@1tdTt zO?Wha_!Kb}ylpJ`H@;$WdnPt<`RN1_ukSbK(4`S&=6!x4@^S+5@^FVWG(RmR@j|mn z6m6I)thLpU^NUa+g~rO(#FAISf<7#4I1gh=q%g$act2RkVJ*iaA!zx9XyVnwvCxKC zXnicSE*e@Ft9aUK`aUJVfd_;~aZ#3yo2b!0mMr$7FGl}}g~BbwCZiBO8qf`XN-ill zP$xDS^>m|ZKP8V87&)=YC}d8av3^QEDfy&uv@QyLlX8-uQoy(sl3GA2DGXjWR7b-m z5*scIw^SDPmIkSJf$;Ihh#8Fs{UCbX#`bLLH@8k1z$ z=h$B%1luTh3}5Uqk6mx%)4Sl2*fXXF&;A)H03VjuN!XTQ++F(E;;#c?dE>;m;iB_5 zT0_V6gJ;cs-*9o5_xgb8%@fascfq{Zkv)rfuO+UFXT6XIRt+oST`m#3*9u(Bn??J4 ziGVKn9&FmG*+&4rZ0$|~r}wnr`Wdcl)kwa0%v-hX_StU0ynUen^EM3qEr31dZQjc| zpj!1H*o_iS9`pVS!EI}l@Ujy21_|5f@iwn@M5_&RXr5uwdPNH^@5dmR6uS+&)MH`W z-ZBoC*QA;Eb3XHywA{9bH>|%TiGB}X`4>eij^O7H;mrc{jH;HBYWsD}a#qXLoL!8E zcE%a>I9^PboZ^AZ301Ys4tYR#^bbF-*IY;$ z57KJ6`J@0rMFvRkl?$i{prQb1X&R`%0g}^J0rdx{e*pB;G|&J8^amek06+r*pdY1y z1{$EG4>S;H70K#W8|JquLFN&0HZ(1L-V*4?>#8`=KV87O^0h>R< zxpL|u*i^7!)M~L=E~Kk*a|w}F%QxqB8^i56EPWOkjy0EFS0}H4W3lZP?v9te5=|UM zWIT3qAW44feGxbDv&7jO4X;YPHAe1sGkj2@sZ9uNktvJCg zj3+C>Ok2Yo!jnRgmdVJ;O6F8s!*s>u5`*-tWbU*zd|5GMn#>Bck~z}WFj_JB#BeOT zlDW{`g~SHNK%OVFBV zO_2SwWCxw$Q3z6`Wf<9uYT zpos|HNh%7#OTtPo0l7O7xjPBD8}_8@PrL*W-iCmkh}Z@BLU4vu zsI;0^7RY?z5w2%csCK?*Obo(uk`}k;u(5X)$3EDJirV?5vNFsx!*H=ga4dOOZnO+C zG3|m{%I-Vvk&KMZ3=i7$=&o4NWhtZJ0>@Cbc{)>ELYe3?#fbxXz{8K(d zWHKtn|FD?`l1#_{=1SIEZLhLv)McbI*FD-WNpP=P{5Js7+moH|20&Uwc|Zc#{f6Sz3J>f}4-BEL_c*&!0P_$iD=xKhz7gqK2i~}b zggLLPV7;KZ&FBzX!QI#yBy6L7Mrf;=8wEN?VjOh>C4-o!gBVt2ilq$Wcz+wNDe*n< z-w18{K-?KoN_0EZ$cS#6hiJCJX7UHdF?SA;@MeSQ?m=+1(t#DPSWU(bjX~5}ZiP2> zM#^3Yw-lGcOJ8VOZ`psqer42j;?Yq#ScEZX$*(XXPqh;@VddPZOI*{Hi9Orc?y>4>cA##OvLf)Hp17n<_)*!A(FppxOsJQw$Vt| zF(p|~!NA*N$+8##oBqQ=roNUVCNJ0jue^kXcllB1?YmeGRsj`~sT5 za3`Z~j<2a0ehfRd#EvHvN$SFT^SSBPhQhM3{`I&G3w{-`J9+@3mouE>ieeSG`QJnt z)%LTovS+K4^+^7sg$?7h=(R$UzVRXn@HRNtb`0g!HtX@%5643<$3wf~p;zLe7pf~> z=G7C*0Bu+2L`Ho!(t?M_EA;+B!y?6nBBQQEqqzo+=89a!&QWYGv1m2dpw(QFS6%UR zZCtT=#G=_;gJyF@zG5#>Y(BAQH`jp5D+*LXiDHegC8dCr0(#QGe5fuQHMOv1TH(~> zxB*j>#l<+)kBeGD^1fwo{(Ln!kJ(rjcE!t{jV7-)x{k5Xdpb|}^j)0dinE=j)o-u3 zAS_$N13a6K?E-yBg?akWU5c|M5ca*RKODY9SiZhLut!WpQl5kW-g00Py3z2^0V48G zQs5h2pzbsick^jreKrQi*5p zqOa9ra-PK0JQ*ReELvSWAl;?a>$N6YGU;PMno^z; z*9yE#M$-jvnaF2Um;^CTcp+c4rk%f?V3$OuR`By*jaX&HrHYp|wTste{PN6l{TaU~ zYoFjan5pt#74$|GuwPkZYF+U9Y5YCPW=$CrkR;5P)=|`fqZ|Da$U<9>?jXlLsS>6c z^Chp%QhnbJWqL)y?S6TL|0+O9WUo8>Ou7(D_11j7l)X;|QP~SHy8^c7G}`~>X(|Q? zi#F|3n~a{KQW&cmGyuU`H9T*<4-^OuRBr9k80}{HzKbP#Cy$vM ztL$!LB-m~2%2if_G5V?${d*M{4PL`@>JLW&csm@$=OtRS8}r648G<|Y;C6!)9?tim z(zNPJaXi!xm>xi%A2(P8657+~)X0_$kX5sWDCro~45`&XHlPx92({b1h$YjtdC$E; z?}GyaAgwo#25nW0%pNjBTr2Hp9-0^dNJmx}h4|1=5hEM+JfjIdP5y#&jzcdc2UL9R zOPUm=CwWlTu2U?f=@EFMuhP8G16`PKtWGso1zoFQoVSY*D4GW;5TW;qNP!Hm6`{>j zUzkVNZYBSqKYvC=8pv&gkN>p^^8y%E3}b%MM{75xepFHG+I>J`IqGCK&gUI?si^aW zJ2TPttL#={vCe=ilX5MJ+pf>gqD)Qf$Z(o`E#tTA{3@@S_xPq@OiWg%YdFBEu-K<2 z!mWp6ykr-T(*>Jl8P#dzx25}4L@Pe#{>@vgbjvox%hp$yJrgfm7q_2}mu+O9a|%a( z@+Vr$?=Hxh%q|d*gnSq&+Y!N0hy83-+2*j_#gmi~E4m{RdM<1q4Ig?XY{iap7@e;w zE4DFQ(M5EXHSL3{iudmsprAGF<*>brGA9(WJ36st0tVJrmZ+;2{_8Q8!$)`&(Cq(5 zk~JZnh1S`34hvkwpW+L(n}tfsi#$gE*~6+w>Wsv(jHVyeZ%d7kWtsIvc=20}RJq!E07X(d&--TfNa_74meJR!8|U$@P=?Q+(UyUpb!6Fcy4#i*}osuk(-p42L^Bd%&w>n7`dnytmzy z0tSFR+G18DG{AC#5B8kQx@cTJhUa*JfS}XEVh5>X7ei+M$xMcInmSrf%X#4kj6Fb=>W^-hS*TQR)}h^(BNdb{>OU*b!d{U@_tAw$hOw6gd9(+lM3z5n!* z;>3?V6Q&vozogb)CQMB)&xF~>{u5jZX2;s6$NrPpx@Xj6UTlMdXjjUtoY-mHhDXXa zt65h~qbPRXKy*lTG3z1h1p}q#F&x_t*RUEo%=|#L#QgM})%34Yx~%16!lTAkwv0th z*p6O#@Q$KYvP5B7(or5x_eCoXSxag>*xRrS)bh|+t(HH1f@3ZK{EI#~_JZ16z_s}4 z6C5J~;6*+-R)kuf9IMsRr%!N93xK~s`)K%W*cNJecdS+mpFY8{D*%qS1_NFIIFFCj zYT45#INMr)v#K}X*dc0pfvmRhlfbcK0j_JIYD_=C`vI;ck15@1S)9*|F-T;)3sBid z1zH3s?~v7Mo#TUkHx0_h7oZ23+5+tlDDE(8wZid1oir%hUw}UCgR+lO%S&XnTHE-b z52Zob1OxOTA9Ns~JVjQkRgDjNZyJ=XutN=ZsPbaKc!#W3YZ(L9n>N@GJJc{upo0MA zA+lPnWO{?Ld2ddIJ=dTU716=rQBw!EOw~fB&079`y3BTfbPgpnp)`))#t_a4qM;9C z+>z0K<|W`R$^}Ul{j5}2R%ivofvq9s2hAcVj@Pg;okR7WQadEed26d_sPZ_&N?CD5 z#)V+d=i$ik{16^>!}jJ#8Gm8@9eO3|5E@f-bqLPBBYbE#41Y(M+jQoOyDgiDhT$KM zRCJ5s^BC|nqy^#&Co zHL0c}rum((sLBXOe#e!npGy|+>hA7c7}q$m%0oz)@>oaB1UM)&HHAQCKeXq{(G>jz zR_njJ=w$$>i%t;WfRpgZK_zR+j6ND!-J_B8-s?0ECucYEBm$FF#*aZTmN?IwwJT|bJ80(EF$M4731SDn8(LRE^c0Qkx|;rapWTlg){roVo8X(t@e6RdU^ zTShZOp_XCVPk@-(>-VP4G*v-waeG2(`4;ou`OG0|HVEQx@z5&!rK&Rc+wx8PZ zS0gROL(HRb70=f{80Y3@>Y*32>A9Q}NuqzwWm({{t_VEV4TSvLLKrIQ-PBcvxp5cZ znvl^heft3Amtrv;oj%Dn+DsYkn!J%Z^n!5FDEiLAM_ou|=lD~rt^S?V2u9Y2OXGDv z_K$R67)UPHD~b!@$>r<$nD~bO@e`8LaHj~aHT5A}F&%dSarpB{&A@>KH%0mS8051h z6t~v^8>enrDyYM*%)Q4Xsj(-2%+_Da zRKxA`>uJY(=P|Eysg$MoY8J2IdC1 z+r?`Bqcz5QXx$?`dN@q^I6T}kEsewF){5LT4ppFs$B71y;Fk*U#*l^xuv}w#^{Fl& z<5wAs2etYm*Awf7+?V}Ce3usr-}BEZ3wd2l&FS{&)liF0;P7r~!%Pp~^Uuolz*?id z@h-ezK`?j$|9h|=>{|_9_};Y^ykMa?O!__3G$w5tlMOW5=a+wrUUdV*EIOmf3E+nP zJTxBc5*&y0#yw))IzUS`S@-5|GD8!wX3I8pWQ*e8Fe5~oj!wR)n0J)6fv@Y0IZ=zh z>tC(0K7N5dO#WCQ>?^ai^fY@}`%KA42=XjCITbvjuYJ2znzqi4=xeWb;`Y8&W7T7L zsW;0<*=1y4F;>joCbW*IP5=m5onVGpMzgNv6ddk;PfCJt;0bFxi|Jf zL*M9=hGy@fF)w-ab7VLDHM4fM8l^TI!T2-(XpMEf4qsl+n8{T3F|ECx#p^y<==MR} zWTeY{U@SCtzP)H&N3aO(#gbMJ9SQ+@Wm}`Kx3oDP$~v8dPS(h~b=VVoR@nN83T|Lj z?tx(L5rNQ{48s`cjqj(>@9lZeuV;_IT0sxo)Gk)iS<@YUn&BTFJ$q|2+AUTC4ei5d z?S@3tw3X|-X?_A-nT=j7qlQD~)9l&m5NmkR8RSisGKw8BhqHF+>wVJ9fa)CU^;kMT zZs%kER)u5&ydHec=Jh9}+hR><*k7NT1dG1UuI$iJE2JkrAKUg;)>P#Nur3Y|9x>sJ*Su%zRnOt{1C8UTDs+*~U%UU*-PMylc>eOe+J~uj>)_=6p}PK!tMtA^s4ld|S@LVX zdgAxf;eYpc!{_{i<$LhQmVc~1gPVry`m5)6oJM2iXd;8k&l_zkkiRxZkigbsEo@z{ z{1#1jyG+Kq4s^8q&Nc49qdjo;N#p0v_^9iDR^LDOtnUXO|DE;a{15wga?kqCIkvvE zZ~R_bG+2EXXb)k+)yluX?C?p^QKYuiof&byfg`P+%Iz6KH7mFy@YkO3XMPI2e4YIY{4wLKrl0Z=@JXxbyM#2qw$u&s zSd5+fXrlpLuNX~rJ7i*XXZI#+`I1(mxM|AO-}-6FcZP!~r`>QL)9{~O7Rvd+npJS` zS^P$=(XBT3=hg!j>H&6_4|Zi5%&X>a$)B>m`M)nOlaojHojyd|W+1$-q^^Kg*Y`65 zt`grm?Lx?-CH#rn=dCgLnIfphMIl{iH$R%T_ygPmx$lH);cx>&4@RS_Y;#!#2&{D>Ghe^34ZE)Kb0jp{@HTs zPEmHbw1G-SHCFmiF|PuanRoLxOaR2UfFeFnsRx9qgQp47K)5{;P}B$N#t9SsFeR1b zgpD5!tLZON`uujwoUcwj52Pky3E(-YEkIIsZLr>(0QZT5Qw9!iYp`S)Rl*DwtF-mLn)B07@?M&J@rG3LsE0mATfX49qtF)+} zRwV~JXPKxwY!6Y>35ipL?V&z@800JyQ!w5f?Gt@|K%|&}*v1h11b_Y$sYx%$;T~jW zzJEi#Y1B+N-m~n&)TP8^&2M$aTaO@DaN$z_nGAmn))AUaDd+xKlwuF)Ezkbm{QmS< zqEbYqU*~|M`0S^ZcUBHt@AXp)ax&JD!QEB@2$7h_l&AEpEFMdsr zmDim`hDz%@9iW~c&d?pIvp{_P$r<^4jC^oz8y{Y2o;qjzoavP@o3~;)?7ASN_rl&9 z!YIxnn_&ZMP4Jwk^pjK4l75ATs$RsU}F&DIZO#|XK7kj&K3L^ zyI-o@%<2D8e}}8T{@iRA7JthnD9uZaB8k)I_=yI^|LP?g#(NTpGqV%xl^BRhrCy$$ z`c*$Qt^WWpO8^FEXfCFLa<2lT+DQKa=xZJj94`PW_JE9PBmD=UtAdiG1DTTE#}Y4!OgAf-v60ia1a zlFS+IlD4N~pFckYr2E4Uy4WqzLc!B}&HRR+2Kw%Rkod#;G=Ff6=K>_4vt%9Q9Ywik z;Vrj0S@fQjzo@d8zU(a7Wb)-cTFI}`m+?8y3MPsR&k|iE7#T}pVOo) zevSb@gK;(>an+NNXU^|rp9q^>E4s5x)&XmIqs$lfP*jM{%~``0@M}}Q)zk_QJj7~R z!AHPH@^vWfhbBc2Oqvh2{J+fy=&_m{^FhqLN-}!CM35)UgI3S;#rU;R=XW~=CmzB? zr*IZE&ayowP6B_Zv+NB5a3E{>vcu+!p;&f=FF1~~%r%f`0a2%MzrJA`cE4lzTzdWE z)0@}M%gS5*7mS9BR}L`jxl(pchGjT|qVpF^Mi}|@anxB=!dE#i-Xo<&P^4X4>fW+f z>+SPXc;;rw?*2D=XVl?*zVrA<18axei#?DRd=Li^^Ijpye>8{6Iv>oo_XYD|;S6Sp zdEeB`j7-z;lE)JfY5EV^*Q0T2nw{%zVrRKWYa}V$mBg9`nA#2V>ikt2Kj=SM1ktBF z6oQV?PyBY6i7GTPQJJzrLd@@H&-s3d5Pq=`-k1YrPyGAW^e1N4^k$v!l^f`70saDh zQdHENA57*M?Obcc{@h;q7q_>N>Cs&Nq}SiDj$-wvpELR9=GJc= zr_QXeEA%uXuYKYt{i03-PC$)XoU$deef=hjfA#NOU*f&SN6}tPWx@Oeev0aw2>ud# zhSW{KdVJ4Wd36_xL0Qq{lJCKd@K0Noy0}CFNsTlm ztp^9=d-lPlpQrf7y1~v;d5sU?oTXx~8UEK7J$v;RI!mwWRlVQ8bo%VSk^YTOOJ}r~ z&g})@_0KUL{5`r*e;ng~KNA*q{QZrk-(cKG$$1oYr@O~~i}R%Lo4RtpY=i0kt32+((x+ls?$Vmzm1tW#vV1JzGaj+5ZvhvG_6K{XVSt`z}qhh(; zd!_^ZuRy!+zthznq<>!&N_tWE9#8)c#v>T7DN%ccX$Eu#&;6cP;QG2RMib_=5AAwD zh18uI?N}-b(tp%cd@8=+Z-9mRbP$vqbq2kEMQ%=K`rfs3eE+Wz{#mB&ne|b!;5&1S z&JfHuWZH5$-QgkJ4-Uz-@nv|Zza5zHOz%ySMAsKAGkUSaN4Te31SN8kBYfV4(d6+l z;5bU#%^UAUF`kb-?BuVEmhX?+?cwt#q7JYF{$7!je{VXD)zdL?te}pGA1?|mlD!1&8DTa$f$HZ}0?wB~P!yOaHt+!+1 zxZHM3oE5}PxK}6E_nY?Oadt^Ty1hgCYAOpAy=B=#2fvplQTCInfF$nGEG11O~7^61QU?9PGIhJFiUZ9`H%rRLjOXP$NWrr z$3VYJ9g~z_H`PnZC#l0L6kJf~I|X$dQdX{l-bo*YuuGVv z!k$Tnk6(FpwES?|xuxM#;e)IDSxs*iAh$W57{$5gd3VwS*Ua3obN3TDrkn4C>Yvx+ z8Qc=#(4>7>2aXR{+uJ!6xxV}$%0GS+fB7Yy*YVd!G3T0+D!bKQUp=-kHg?)@drOtR zrxiu@VoY1Kd@CmjH_@x{&ah=XxMLq2`|XyT5jsHF78~0zB$jB$XW_H>Gf+I@Oqn== z!VySCpg?&M+_^Rp#X&@gAAusFqT1XsWE;s@?N&d5tGN@$e!DSeIDD8W&S}T(4H2if zC2FVeJ3T%!_P%9mh_(EAP`J?qsh_u>NTvQQCWZ!hF*Lx7p#@$HE%0J!f{A&TChQ$a zVebYhv>|GLKtaDyGn{cPsyJ@HF!qmGRX?YY>G_LlomaWyOy^%DLUk*`bY2mvS`nu6 zFXCF$)J*4h`3a`tu8Cv+_8c`3bwrq+D#BDpgy|>| z`+|<*)M1OtqPns7J!-15cU#N10;2IA`|U?P40r3xRJfZY!+jNFYE+EjZ;CNhD#maS z#h5yYQ5W|?D!ah1DNc2M+jK9M*vI3d3viezLjev?dHp88u{t>nufFS|tfmgf#$HG^ zCfB~AuoG#9)(=PR4rs*-5&eHRMzbh3_Rb<6{Rk?BVvFKvg5|o7{r_9bVq+H!iH*IO zCCf3`D93RIj=0e^e3VH830kjckB9%iiz#p8%7^%)-yVjRm|zG~wC8^q6B~P}&UKIc zAC_0Xn#&u^lAv9icy}h#uD!JD|3S>%5H(FexTSviS0=*BXP@!@i`#qP@BJ1w@X8gc=lgjP&VE6sC-o4e}1a&UF1?ts11KqvN`7I9`a%hxlKr1KQP zh3(eOE}pE}CfS@?e5fSx=(~FIys9JIyrJ&37Y0rsKI@8O2^?a=1Ei{Dpn_V%mZkC6GzS9qm*gX{Uq3+RpI)f1M~+}vF^z4Bm3s1E-HTf8p4c3PEF{Gh#>b3uN8 zHf`R^D|23d4yOCFJcbG1HaR+g0S%7{ay|0!&cQ{I=v@?=Otu+^QQXe%lEUM3xCyqAJ@@(@x#1u5pgb? z?lh~PGvdxAvz--x=F@rd*Zi$Y{(BeZ)rj-NCdFMnE0SDVhzg4LlZvXcO_7S-ap&sW zV#z;OMLH$<<)+rfs&_+b~;zYrOJ^M&2@TM*n6N-M`- zSig?1yGuirf= zDL7zW5OA+tF-I!)bJ@z8(w^4WRDS1w`nBYC{>cBz>wM7v%I~!Oufo*bRObf@Qu8x` ze&#f_eYo?-S*vZ)Pq0_bA{i$}?+kY?neMF6VEJbNp0(FSl0Ok4r2ao*`u}?65rrf1G<`&KGfT>Aw7OmtMMx zIa9_vm18&~V>R8#DlBnW`Z6EYp>w_RszdXKL_!Ch2S=X>Eto2j`R564sZG6$j~4LP zTKcgX>f}Y7$|A9ergsTDlcq~4Fw>}a^`U`2;@?*vd1cP7o2B3l&N zSGI%q{Ad_nE5^H(G|tOa_A3ooyzKGs^Ha9ZHbq_ZxY|-%Xq#W>ktWij&ZI@o)afX7 zu+rPaLJ#3Ee;k`;zCO&B$Wc!8=2mRBmTH!jZK$!07qho$<87!T$^41QuXG35mSx}< z)}>+hhC}aV5Z}C%!3fI7@;jbZ(T=&%ijLZm&Lirz^Pm~Q5HA!SvhJ+}RhZR8lhKMD z*1gU8Fb3x|jiuWQBd&?qMdpm|ZQzQUJDZ>r_V0*S%dO^-#HYT*AL1iULKViHD`z{- zGQJ|tBlqdYZmmjA7*n>1+mTG#<9O%Le!P(cLc@;R`gVC&%}B;e!1Q z3%5SS@#NeOohj3~I2p4hKPBaPh!Za2XSChkIiO~l9#TwEhm#mb|D3OsBw9zc9nQmL z+r5u5pP>ekN7-uoP?)7C5$8OjIfXBJZnTDz6E28;$wXTdJ9IPFnylNg6*EhRG@OHO zP+H6;{g5UvQO&iho&o4dPO&W;`u0lmyMs|{Q6>8M)|wELQrXa`zchI zgDmZMny%w{ZA{D#XZ=J(f@s z3-J{TU1mN;R+TBL?6Q&dMKPypNX)J(i8=$#gR!H8&D&vT97_BTW_q}SY4AbZi4Cu^ zChwr{b#u7VSY>bJ4b})1jkIrPZ?QaXzbKAf62~9IaJSyntsr#|kJ)WP=E$fMPP5(X zK$~H^XQ180Lnp;USAZWpoyCSzdqiCP4%&(@sPM?R9UHE5P$x=0(bdu6Cq!1^vO`wW z8+;g!d)Mp;@@~m-6z4OAs8c()%03z|;|kj9c*Q{+Qs+abv^B*0(;vjk4!X}m3Qqg4_wt^hok>`nk4%_@jZNrm08~piPRe>{&_oL1o5Uimr6pZJhd9_UP z4H4nP8;k2TnVf+UPOgDyjY(Ooq^j(>Xy_}$`8P5edQfDU(rXq*j+<_B$xeN29>J{f zT8S~j#($%uSy_uWMDxLe>{jzY@ELc;hB*#-C{kMdq1dB2Jqocl-%r`miyT$K3)5i8 zshu9JFq~VZm=EW1%^)amc=D1_ZAbE=Wg8yT)WGK!d;#h-*~`{dY{ztAP5A&$ykw)0 z59K5JzOy>fjm7BO?Uh9z)D=NI>px3}<}Ab~D$v1ADe})7-MBDxR-B&PSVs82-nS za#v9CyftO7#`|(QQSm$z66Nk=5oGgP5ohi6bo$HvJZ@ZPdA*M;pOi107V?QrWaafbc-i{z)it-vDq~~4+ zM~H`NhgXLb5vmVMsggl)k?4sly<0BRt?9GQ*XxfleryA}Y=iF(?&L$MDXtnNb z)Q2^>)r=-f;N~$Jh$n=DusM^EI)jL)GuCM+V%NWUsFIbjh>ybDBs+Lb_Q48}a6YsV*d@mN5-IUS%F!iaGbtWxPJLyWh@qbMowzZX;z9Jwz;c zI*kY*253I}`=`C-<#2mkX~g-JRIX*=#UC5Zbjb?(>HJEKXG+gbR^@u?ksc&-9&99f z>uYxE%&D_51~@Yootco*WG9p$m5{jGtQBKw>~R;@*dx)aPZXu>E&Jf}T7k(S>Ke+2 zE}g_fWN{uWru)eSp=jQNIeclLmi!*bnsbaMYd@m&go`(nQ68+FO1#UC`6Gf(-idA| zfR@oGc&W!E#W($4Zh_&bXLksse zBefvpC*%+Pgp`*2p+dc8X~;>4CKIMFp-6Hr-7Qw{d>D#JnE?4qxGp?zzCMg0$Zq9X%=j_*na#WGYYkf!aVuoJkm%g zVspEt%3jM0%d9YQ$0vJKBsnqHql&F>RoQP(5ha9A-+@IqjPb{AkDQM9+;5u#E=lH3 zW+k4ZhpWDcr(AmoMjfvvPK^Eu8BlC)(4hMjg+ps1wjtNl?`UIsz2p(fN(RptT@y<4 zJx!(VZf`DmyiS5hW)xqHV<3X|HgIeM+S{0+y=T`4v=?^*+N*Z1H{$JDbUL)o-tw(^ zjVU${B62EAnp?wY%AIpRu^!{NQdpmpt}2?YD(+Wx5CI)=ZlNk2{H}P4)xC?BQ-3CF z?XWqEl2}v{3hR|@bDM|*W$C446)#vinhU|fkR;4V zvz#@`L+0mkE&9c+!)z1x!LK9stA7{6j@Ts;`;kXgrv3QO`0<#QXar7vYNXgfq z1D+|o5eibotD(5Mhoy(=mG(Xd%ZP=G0sSO=8*DDo{SC)(J0Er7LJp zql&Lv@k~SMc%5c#WK~zCQ_`4LGD4^Bd?bo7utYJiNWJ=gha^KC%SZGpePB)@SKMe= zQOqe(V@}C4;t*+QxD$$NMn(nd-Hh4(6vyYn{{?oMnJ1~=iPL#=q7USxh4Qm)pMsy+ zsFi;YeipU=efW_K_k_8T<2@cg4eZPQc{-~JCqKt-7DN-@s?4d2^ApXftBO1G$IEwQ zx9;3ch+Xu}oO;%l+fbI-=suX}8ddk@L{~*!MWXBWZ;eiLMeZ3MeQan>Wllb%n4I`{ z)OxsW!3a};w2Ca1VsY2MQ+s_%_xyH;omO? z%a~rcW|*wzg^VJ7QBE@+vSH0N6fB#;YjOLaJL4&q$M&Szy)nK-7b3Y|p8B>aqgiS` zdfg(O7h;yx*u_&2GC6K-tI=i|Ez=#fD%N2-p-*DfJN=icq9D@>ol8yA2CFT=q^8E)zwMWunJY=+Sy00hnlVVumIY zd#j+y&9&!ho!ufba2_?toIX7{uA*YQHF>-Jysl;Bb7A^(vQ%*`BiBAh{D%DxbDrO8 z2q7I2W_@CBw6{bv0*dC{Hrw3*OYB@7%r~FZ|J-@M2cPcmhg6@|X1#e=<;}Y< zM}v8%%OB@QHSf-4&Z&dr)xoivaG&!g+@ryS^E$U_!3n{H)AbPaV{fYMGigCpr@2Dyo1&nO)<=yV*)_BAM zm+z>GGoIb<>nn)@QRXsA<`6CUDl+-rdkoyPYdz@^fWKccGtlZ?t(S0IpiLJK>wB&Y zUnM$;I#-St$$6&fMNvK9Icctw5IJU(;X6;zjO!j;tNtVl{$o@wy)~K(5ok975oY9M zwC%NgK!TYR4Q;YkaG`B_Zig}6D4Xp(!(VGfG#@=}gSDcv&~`QvL#UM*+IFGN%gw=( zY&16Jij+6)yQ>Rof7T9-KmK(Ky&=EN8}fNQXuR%R(f25yrq9=qkI|5ysUbh^7I?%`2YSL1(95+H%#2^uw8s0!jdHgm}LKD$F5@Toe)z^82j4&mFj@@E_(^Ke6&Z9b_C+Co?q9^H(@6CYgNk?L=?w76mWyz8xtI<%k8l4BT zDzcnU*lH%*zMdGCYzrmMPqy89`@m#dWMP@Ts*^Y}(zP|SPG4@V7HqwWN%EzKwHK+i zXor>jtaR?p7;h?whL|4<)rx**)|4lNQoujBr|Rb0N<3n93BDW&ePEemKXkm7El#ts z6D(vgkV28OcDE3$y|{J|FPR@AI69uyg2np7n#XcmwpJrybttPo%t0_&``-|5X-0#f zn!+lv8!aS9148hIwRxsO7REo@O3xaUJc69@5`#l1 zNL+s49s9I~QuT}^R;A$S@R{^X;yvQc^aKAp|4!#raEqHgi!#QywH)k zeXaCQgx}N>*f%QIS4w(i`pTh?akU7CVBSppHkQ1tJnu<)P4uxaX&_AyN$$iL7D}1E zld(o;>4V^&i{=mN$gBA@mc9)!dbfb4%nlyF^O|}kROh1kJtf~t&yI-tZa7FJIO~OY zu#&4}VKW#MH-q8F($L#Gi}YOlqDC{d4_$7j;@fr(%bCUjY6i^Iy^yS$1+F8J$F2p~ zDGW%5&l3i94o(^npUg^FX5~Vem2>s1bjg9^L=J48MNq@1vDM}(mK0v;dD#Z_^)Q#7 zsoGso&cgrJ$*j&3iW_-J1E}^^`p!)Cq#(UEYbSDs!%i2X?4LPE*=lzcu}FlAZUut=e86Ck zLxZ}Mk`}O=)tnZseV@oO)U$YAkz#PSWap3S?5afy9}rePg?-rRl0f>$>!~w&5Vx2e z()z&yGj##C-QcXp)n_N~|1#^8n18o-Ovo>C*0}bOm<`-2eEIv>nCtHrVQ)w#HlvA4!dAfX|kP`8$dw31ldl_9Z)w&7a3cs zibzTs_JdIa%zC~`=OhnN$=#C5jI93rmk0v?yZ*eMW&eNEpAQM7M-HlOSST{bNIF*- zki{!GZvfi=6%F3M)CM?=rAhd=_t)%xSP*9wQ=2!!9TqSn2i>x76YCTW$^m%urqHXm z7p6AUl**T$+IzxZlCl?o%a(_!c>I>@_}%JCKDM5suj$Q(ZwlFBtL z+zN>L2Re6oJN|L(F0a$W;D^YAQBj_|d+>Ta4 z%by%7(}T(#&RjJdy`%p^&RDuM)(g<&bYvc8H_Ip($>mv9&MVT1kL9i&LHsmoy&LHm z8?@O9qJ@F9IxDPv%|z}KY~}o#z%zaM)TX5m@Ff52^fFm+)u#PkQNf80v|b*Rrc)*P zW&VvEj3(({OC#vxmI|vk(o03s7hA)xMfb*H?c6H`9F-pWwX|fW-T^__W7LYFT;G`R zZsw1#3DPK!HN_(?5SR-2|5(u(a9)&^Diu+t8bP1*eNtg9cN-}=P>^Y{z+IzKr^Z0p zsWdWa=>PI>U6^#CuTQB=&sBP~!D@#!3g~w#(y)go&d0?G?fjeyHX^u>6lG#75rMIp z7sZUr@lctB*T?0c(k&IS;G}NqG=IXv6@(uakAnth&2r%{k1+r&(q`?wkOgC6xvXY} zh13$K$pj*Zvk%CG{|-7NKZBKJU~}=bR`>nrDa8_^=@|nep$wh|VrfWxJIW0#${e88 zeGmRqmC9=TBEgI({n&w22DQ#_68f}Bm_M*1(+h8)BKUA#_<|qe1UeGF#}gi)!-NA8 zBRB4*P7trFR&musuF>UI(l1@^xB3aEuI2g(AJKp4Cmci{&`)@Wx;%+zXc(tdGZxx3 zr#IgliAP8?VnJ-X!vd?M9qtEk?tOq672ECQ+=J#QRK_gs%en9eclhC~`SloUpYgdl zpKk}mWc%H-l*!h1Uf1d^=|QJrn!U&eDqkfjW35(0cNtlOn+lYrRBu(ZVJ-a&WhD5S zB7xfZ3{F-oa8#pgE~Cgr)xCf1Le+0}qUsD#_2bMEc41a}B&gbHSAA8Z>Oy5y&7$hB zU^YIgPV$|pCV{F8LDlZAR6eRshPOadr-Bi}Z+zae0U%`M8@}i{8 zONSRJk$}TP!A;E>V-xqEI%^uY^$4zUho1>=A7I0$m822qr(Tsz;U{I;GqUkyof(~~ ztIHsd{7>Kg`yz_3s<;g%C9H{+ohAyoJmi2c;bpd9wc z-7o=qilk!J)^V^7u^4gKto;p=o8O834+);La;r{^L^PYkIJvvt88cvAVLtFWCM|uO zG(bLbDDtpz$QMImPWOe*?8IG+9iy|l{lO~+gQ61g7U#%t}4Kk$_& zN2%4iq);%8IAz=z7LjTSLSLsu#icPL*Q0Pj11JXfxfRYvG}`@TSuf4Zg5L_SEXA3t zzimu}UtV6p?|@(>?DBH8vX5fX97S(H^Ypv{gmg1&_seM^r_plWW`@cm1Mz*Z)0Ym7 z8lOt1E5*1!t2`dcn8|+h(TU(1;XETXR66a^;9+!|5w0XCuuF0JN6VRM{fl%%`0+R< zavVbr12h|;VKO=cMiZC&curRAOG+)6if>xnIf8DqG_&h>d<+eEpTdkZJe)(B$@Rcs zVg+cY%u=*3TTBZd9>4%Ys}Lj6Y}%!eY$NdRtB3@5@;JaDB{+M4nVQ1MSLv3>F9i%4 zZ1j45BK-Xr%A(x=+qCpOPcz3ki2S7HqW>l$142Pi;Ra)c8x#n;Y8s_>p<+J`Am!(;RNOn`1($#ZFJ^Z9NpN7q z(0IX3_!8eVfa4m>KjHZ*xm$1PK~)>fu4!Z#xB%{w0MrwcN5zd&d;L^9ed_>JMy-+V z?ZJeA$%wGc#q;o|FzYi{jsK8+C~QXYt9~hX;Ez=;!t4Fbh@r3$$vsPP zh-2Vzm4*Y{I5mU@ZV8T9X$1ZFzEQ&skJ8-v;UeYSHZbnF7lrL&s(wrdeXOS$%mb$a^ z2XD?i`hW(O=I!tYt)&wFa2h>5W=d;t@T6T$Z|CEV<9);=a9*&xaP!5^?q|I&e1vbz zdNj1w`|H*SIy$1lyBCoYzM);aSfTt)=S#mAmY_DBdS&8h1d@D>TAIw-cW9hLVrqHv zniV=^=Sxq}lFg_nvXeWzH1qVYv*R5x)LW^XDi$$cc?wtv8=~FEs=DcY*o}^zl~}10{qF=>3v1*%k%&vA}$T{uhhE+t`k|-y1O3p$o5_Q$ zH=Xw6_gDow4QJxUfum&NQf*5a9Z%nYE#>`$6}xa)pyoo$d07rs6gi)YO*ta=qVK4Q z5TnsKVl?_0h!0GV3s$$XE#|dMr&BT^-XW%&s zD#9UH~gz7>E2qk7BYKP&qzD5P`qc6 zS-XW)Zy=O%%>JF@iaQO9Ex|aB8I1Ceox-0x&z)|ZHKps^X^dGv=8&qI*Us|Ib5GBf zH&b#9!62^VRW))A!2GL z9_Hf1%AC79jzgZrpX%+{58((ukSjs@4V`V6D5E)^C$o@Q*x?i(FKF$6j=LAw)RE1 zVg5lx7*Va)DOsj6jHkvRsXNMsO?F@7Bt5x6{ASMKk+W~sV}ev-Pv%&DWHgE zRL9JPuOg1r?Gl1gVcn8#rnyWGmqy(vO5L_1b1AAs-0#DLA|SZdQkZpKvIAV~t*S0I zml`}+T;XLdJ-~N-Qd5*d?A@tfR$*U6;#x3HRc}T&;W@S{3=MW*QeCT*7&=~86!(O! z(#7{JcVcnGnK?-JDB|q5odGS|k#xlK#BwWp(f@UJQ&>TnXRaf<_Gx@A!sFbL9nOf! z971i`!a)N~b~9dl>Q8_C;~y!r&Nd$wmCiVfUuTiIa}_;@IIn%a+MM2K_EU_!V`5ki z@li_UiYt^P`KQ9WQfHD%UwTUSDBQB0lJnF}0nR^)7#_YPa+py5$@giMmb`5$EDZ_D z9U>l0JkKsSQ(NRIdD~3p>t+2okH?MjDDr8eJQ(Za&J)7UaJ6AsQ-?+(vBQo!__1yT z+8TxUSyydu{?8<|L>L1{sWOXMPs&)muPSPd$TaPlf60N@R9=*QOJ9`{W`EG5otce0 zQQMOvEM5B4zE|`SCz|Lu>Y*2vVeh`2{2b!T_5t%Z{yj(@9j)7uS9*l_zG;M7)MXIq z@E}?1GncVaK86I+(b}MY9`9VwaOlDx!BXKhFMS--L*8Ypiujv3;}?h#_!0`!%;hiW zV@5DeJ3S_>C;=y0AiGc~VIYsz1l7%ngv6*;>)-{k3x@=1hNwjl+qbNO$G9?f`L*~9 zpmt>xzMT_4#rL1^Ak4(OTvOgt;keu+z{{9YvtMN?50fg)eiJKrxO$M;@4JI|s1BR` zt`GAtW1QLV=5ajCK_<*nOTU__U1XAmpn%v=+r5p$#R&Cs1?Y~pxU=2IRF0N%>@O8i zN6UjREN&Ds16kyqNND@)-`UPUAG!Z8XfFLpE2LKVEr`zN`ZOcBEM5d}3r=Vh-mD)5 zg`4D2P*_58;ISoVN2ZFC;9r?P4hB=jOi7z*8=Esfm$bWOHbs__WW2jJXOfbfRMeBc ztyGdr-LhIrBrgk#sb|2Yl!ddu`NPw$X$)lO0^=ypb704OZ~2nrW0tR}M>03>&Y7 zh^-QN+KEO6H-wt!{MC5FVGg^h&H6c14pofWPR|>sdfBqQV_X=tvk4ugwyxiXRP`~> z8+gjnAKs%fR(}L9z)5q`{9qPY#`IKv^Qbjq(S4B2--5dq0}KlztD zcDbLhpr0hJCnun$c7Oa_gD42joYM!t5}3{+%I2lVm9jz%kVm^|RQ4C6o_bfyB?3pU z#xR&=Z|vdLjR7|n$h)ObcsG136)%y zJJ7j1Xl$5nOreN(^^dznTRj?{*`PpLz)-&3=u=05nS}Yx?g@Izo`Cx-Knc~Zk8VCZ zMYQY!_1xE;eYN}NU28d?I(x0g!-dIhrj>lANAk!ZGyaAS+e1QOnSa-I%9#MweIHvg3uK$1{8djBDbsd#bs!h|f*@q6 zRtp&qnDes&+5U{TTYttpu`U{gvaXI&*ke1R!h<`!8V0QQ-_~lifUdSyt0nSL?YG$a zXBn?JrR{xEmPPOF`@124_NT?o4jpKX#;_S0!)`b(70oPKyi2e?dF0GFJruqo&tri2 zWZtM`d+F`xq1c@~+#O~lJ1XXWMZv|HH`#94&Y67*65HvlR}g@VnVfqQ3Ir*S#`mMh zqxI+A$Y1YYt;=zN+Sd<1_enx!n-$s$&dzh-`q!aeP?z-CP9$(6EYa;T>O^RelJJ-5 zocCpJKb5%^1n2%_T&(n)EdOuuD41?NiJ-$lhW8U+RD0l4)!Oggp?FB!nRCwXwA<4N zmn`Wf@vo_nil3f`Y^e#uy4w0)&iZeszlR=a3Pu%dnQP+dbJMpMIr9T$IH{VcjzV#; z{0;!FIl%(+i^4oUhOJhDJe1tuF0<4d);ZEJX91 z*WH?qm^;z15s)vzF{CNkPPtX5Q4ZOuxLlVr+?pel%2%aIv!zz}rQSoFklON-Ys=l5 z!xSu_pp=p}XZWS=r)?=!;JlvvsE|U1x=@^8qeLg*;_5ds5tfUK=;Ez;9k5Cw+7=__ zw#OQGki4}h>U5ApR@`Wh4kl*K`WQ1`!4a^j3Wyg2L^;S>CKASUn$t#BGf1J#ohxJo zx_~5f`XI+i^`pK1Iq%~{I?gzj7tW@jCf#xu*HE) z9N*Tybqa_l=A2K7{shjJ4}NpG8thmG>-~yBp)aIf3lvs!9NkPZe)37`WqIz|4L{?(}kW-A%8+J5_i8aAahc5k($#~ zJ~vCABTUR|hE>X>UMGVsAX#-TP8N!P0p7U)ky^{;^Qq3k;9l&rOTGju7`r(WdC($G zQP@nj)9onwAz8;&Xrhda!|h>|7g_L%UNfCl%N&vnY@oO$D;V&VP!}J1WVa8Fdb}>^Sf$0ejABi@Al1xNgWW zR}SI?=j40>QCd!8XzlDvg}iNXJ9=HmW0dy?gdYgG$CA&;VO*(k)W>Z0Dysc!w; zM(0_lF}#1>ZVp!AFDvS@59wm8o(7;dJ?U9 zhnM6L_z1qBjhvc5kWz8N(DAmKw|j3}*k+sH<*+cxAIVNED4lcGGaRC+J@ILRGlb zto;?0bt^oyv%+Dj48Dgu*)?{SDQ#>kZW?Yw@_9rAb%sZB*P^`I&tHqY+1dHlt4r-U z$aAXaA|rTHRjyvo=YC6w`zo4+*iBzfk)%h2-yM(MS$*cbBe575bVH&r?#wF^NS>Ah z(Q<*PaG>*Pj#YN>o2|uaeLQ69_FB>39o1g=^V>6}Js-&ZSHiL4weJdNm z=hz62M(B}s3cSqe%LrMFr7uGT#)7dk0LEYh{|+yb-DfkJQq4RB8HWjXmxV;JbzaoM zd^ZmQmV+}gBrrEu))?*rU+$q43$rfO&o34AOXa%@ ze4&R@EX=x8D@<7GI@2#D3$sW)YGK|^sfP;9RIPM~5e$go;gXum8w~V)0qGApWcRNVbzUbj5fzPZEI}Tecn8 z3|~BpK#zq>xTDK3>*ujD%d)Jb{=XqeK{Wa|m+ zR(cRvzISr#nFP2_?l2cOig-)wCvX-k*;FXfk)V#uji8R@tPU*VcX2zar99%gwVh!u z5oW>!dI8O6aWJ zoJnpe5MSTa+lXJphTs%63!gG?ehm>w0nO?LG(F$!(%x%R8=a383vCdlN7EnTbCaFg zV?fAuZwYfHAbbJrlyb-4I!^UVJ>-{?y$yhteWPNbdK-FyU+NCOR5unX8%#z>T&EY6 zYw5Ri48=y!h2ns8QwN9a)ZPsi)g7eQ$jF%$UzQE7jUs($t|RiIzbiNm4z4edgF{b2 zso@L>)b+C6QHFw=Y;M%v!#fQR48;pzn@?(XFh6jkSc#}*08b^ z!QJ-R!$g7XPoPNHgMZJcq-3O<$6Lo$RWt^pSqh7geSofx(raK7YlKZSV{}WMLU;DB zL42Pr;=4a&r_moVjAQ?r3c{KI=xleT{~~V+HHif4ZNuH9dbzBrGDZ~w715J8$H{US zT5zLPfPn564o2TB1*SNg$Q#)R5JhM!3K0}^qd9V2uratU;)a1cWo&n>L0BvRY9|k# zU@n;<1ea{T~iv`GpkiO z7&UGuNEq_pzR_;U>CT!lZpoQ!UfbK8 z1Nfd9?J=W0v@UT4g#jds;F>xEIX1?NWz<;)J~xSB@{(U?<#SXoajv`+)L8||gN2DN z$xC6KRfum|;$(U0QD^nQfhJKTFForl&Nlmi3OgWn3e89(Z&mcyyWJmgI+?oi)-M zUL^4e(JO#X@P*Dz-!`sGFOx+j;`a`9QSqnUsrVOynA!DO=w%#$QqnCV!Qjp2$`d%7BZBV5;By>zOtI9T z!kssPDHqNQ&n^){W(KBMbtOYn8xr3My*%eaEgXYvd`bm;T|@NLIbSCKOfHf!GQ>hw zcu0a&Z?449+F*oUp1bR4NqS!))bTQsh8#!zC)`(wL|zljg8oQ&*|?M$U9Z_H@A;-3OVz5Oh13lqS)C_G5hL%?q!xWBIaz$2Y-Y~OU%R9 z0DA=oMM`!M(g%_bC%6#{j`JBSwtV(=J!KIjx|Z4J3JmT?j)&_N$#WYB4~iVCrwBFA zdKXPZGm)h!VXRPmHQ3U!<$#D=Rsl^b8Hiu+pSVo{U;3#x3e!Gs94||Uex}@|=npbg zshRo<+=r)rFixNnaVPhRgx;KezI1LM13PNpW9$Ad=+dj~P6e7}`odQ69B*}=AI`Yd<5wc z5S9pEk@up{YY)cZ?^8t(oT4_X5ocaSx7}fHxRhur)HM71j5sr*IMW%(0Mf)oG|7-U zRk0$8qCQ3WrMc4)VReWr5)MxkrckJBXtI?Hf7_E=O^}Q|P;FSmB2k+NpItISOFc{WXZhtZLh?<_ zekZ?_(7$NZxxYm7GXlo-l9S$a2gHkqHrIUQRWf->1>ju_ThLVPJc~4?ID)?%4F1TQ zz`TR)hrJ++m(oqafa~a(?8vk_r*FbndEm59Mhw1NA-gm04K|~y&elI#2b%J>2$1CEQviq^aOuXF6ij~qJR+P*_6PbINd^( zrc`JzC>7Q~1ewhDXN#hYED2UUNcE5{_*4OXsR#*$f+sH%x=mIPYTAqv@SAaLZd{xd zmw*)>*M@Ai8@HE(j2+FgC`}CL?pDsfqP%n;Il5+lWDFG@BxI z$xaRUlzXf2dObckpPcnM;QXe5^HcBlM7Ux`KK0%}gj7{%mk<{vxKgU)n>RmjU1kpT zD9uZbX~fy&Erl>eNVJ@0tDsX%cAC8c;0{+T5Uw~_=<97Zh>&!#+z*f%s%B;7|HKbP z8{Ul{76?D=m252VTIo8|4NM9?k%`}@ObH_g#Ts{tNud)o-fw{%gIh;p^2mvEW2;b` zj2k+>73Klq*aqCTTQUhgXx5iTu`m%10}aOg6NIVSq4hNx5qo8ykA^5O z=B5H-*&nR7Me|q-NV+qyTz;958)NRH%B8fD#B%mQtJFtuWhqhViX9{fUT4A!v-&+z zRs4;T^zG_>S#0hu#k{Q9x26|9CaH|@!e`4|d*2Mk4F9Of<-vkIQ_cm@WUeaOUvJ; z4e&(s?X%#0dY_6upGgwW0_T1uctq5!iA(8so}oOgz(<$Sgv7>7rL>fcEE=Y0rfXTCE>mI_%)WWDe<@qyaf zVaOB%CIqg{R2+0yZkAmZP4CfnrKw%s^}wAb6$n8j7E^AZ@Olfpf%8zVikCKrqIJnN zW6KrsL)DU;d15*)kDcSKrto!Vrq$SR%*y5GhV9H(R?z&09 z0qkyk6ou5@&(+L}FM+oe&YW&tC+D$LKULL?~mk zw_PxY#b*9fg6OJ0;^Zl7khC}-S%wY83Z-(C9?g{9MT$g;jc2UO{MXzpCDb-J>&%qw z008g4504N1Z_!sZl8f|6v_QD>ZHTVRnydYbl*dhymhjQR~ zmmbd_OuV0N(B4l|wfEB%6ID6i(H{3qv>B(Xz=~xAB}>;75k}Izr_-NM`=cp8W?U$R ztrg^TJ*4236O*-EMZr4}&r^xX>i$R#0NdY*T@H0wzer0? zvf;e9Au)0BLGhrec~fJ5=E_?+=!h4m^Nui-IB&5~w4!DTK5r`dW7~KqbMnh#Mz6V) zSgd8j333|H`wG9(jjeys?^2+zD-fE zrMvf8kzfEit{a4r`KWKEuF!AdZ8k<8)BX$zl9ekYJF(mBoGtUNRGIjhl_}RYvo;Np z1GCbslUa7&B3#ZVf=exyo4j;%vYf?OGJ(R24~}ORwSPO2zQ&g;+Cb7%4uazAC~b7 zk_qb9j6smlDS<*AXH0-uIgYEytj7xhrxo1P6rC)9ZT;%tG#n<-)yl9CeQ zcQ!%vZZ2oYN@u?kI?`~7I2*WhQs@avkY%;#4TnDGlvU8H=&l5N^_%05R9XvEx~$}W=wACg;D$|((7PG^XZ zF^50oT*yrooX_C=M+MKbIT}(UM?(mB&~HJQhY=hNiOSKCtEN)PRAQ4NdKBUnR4e{t zBB{wQ$2(%q*`!9fF>;fc+zGN$MC1gP8w9;V=|xtqV;vaE*>zj__;XQa%eKsE--qQp z4VB0cwxHPcIsVvdkLKg_=F6Wq&g*5IHyt(3n`NA{^*C!}oVPK~1v1Vm#;K0L+>|{6 zGn;YN{Cne^HAmyQ$fq(s?G#25;v74R&bv+;T~2u*_4UGpo%*YpTtc z8hxk6PB@{si($uAJA9e;U9b)BMgHXSA5RiQu4}zaZab8lc#OYyc6`UQfB8_msR8X+hxlO~hePya#fyNlRd z{Yl@UD9QbiV42NjZjEjEx&Gfx975^n=xkrf50_V)A2)O!#$NoP2yU`TDn)(BhG~H8 zH*kn83FP>;>r>2w8${3_Cx4~_C+_E&!nvo*2%7Vn?Z(IFbDwOfQf?(96UG^KsIi9l zJyd4a#{)AW>AY&JjI{@8uA1HDbhx1Gx#ao#JfDJXSe|d>ImKpAo~wDb{PgR1UgoD? z%d;Gsk}^|y{<)uiHP3(ZpQrHrlK*@q&*CyBFHCQ3=ai;!p?Z>$H7R6ACbpL*o&VQ=w`(x@y(|t zslCnby|gOv(XzeShX%-6B^z!@nVgpx9d%yS>%NEYvr3ik<(BYluYW;Z)++o2I%`?& z*FHI~hGm;5C8>FS8v==XAVF$RV#Maa>S3MQ3%4deRiOEMomzyF)lU_8uhpr=c#r$3 zG9xQ=YHu?&-iM>iS%_y^>tm(@eyYrBZ=G7gm7abLGVdF84Sm@U`eg+({#&P-x?LId z^t{JpxYknws0hb*#bSGzigARtIJn8ITf?e{Mr%r7g3%Ch-iQQWGwc3Jnj}p!8Z75c zNx5I8Ob<*p8l2W(#;lWdozJcdTq&P@5D9KE>*i+DrWg%TKdma8cD1B!SLMcL)2147 z>ijzVfaLR`+2m{ediL(v2rrusjTV>F;<2>UH`T3!-Q-0=0^zXumvA5b;5m>}@RO5Y&S8+8T&#FcW z5J|Nf<7m0Oh!=#s^p}@9|HYPkL zsupJt{I7^e>2y;-@-z(zL{hctA>UjP35>yity~VVn=5%SmmGoPN}#9x{OXg3awUym zr_kqtBEhvtV1o4&l$uw4;I-&!n=Of-A@O^yrxf}sF~*fg#7Utb{&jgONtc#l zGCW2#7RX?0!f|@=eiZ){?k_6_N;?iYzprnzlyJ02U+fbi4hj%LzmjLO&RcxDc#5IXynks5v7ljvRYP7mQISLh;Hs>&wPNP-U0Xy&^00#+(wA zsP^ z7gd46oC1Bi7x+x|p+`;uiF=UKhc{J$o;d|JbT1&N>DKhhDezGD0zXp)igF4p?OtG> zDo~tLpt^g3%TwBa!dYZc-|p6BKi>5)?; zql&PC=Xu}HDRL9Z*;>Y^A~4B3Z&Xf^+j5Hh)~`{7wBZP8)+(`udheqj&-P2)v$8dw zp=uPpv-fFEk*9O|_4}L}-{o0&(PZl>7)1UE_BG`kLER?F-QZ{Vw0Sdu& zf3Zb#VruB*#7(3rPVC)>i7wmKALsO=gsw{4ldPv0S6ADG-Vmy_lr_WBi^G>yf*Msh zk4hMn{(8N$Zz}IIMy&D_h<5R2J*6Js%Vr=$<#{iw4E4A%o1x}lwaQSBf8#ORX$k6* zg|FPTAkQ)#!munAL&ckjxf7&JQ9Ym%SrvIb&$}sGy+V}ls_NC_W$IBcfAZI}vL%sO z^Sp1WZ1p%Go1qZtbd{kVP4%dnDdZ8CkNHrB^^|nqpPmotRW<>ZkmtRr5(HL$iH$i4 zs>I_eL4f9i{vnkho%TPuHzz@TvP30FpZpRvISH!7bt*xR7MSIE<5hxQ>{W^3DnZb| zuVXL?3XUL5p7&+mva_+653;jyo&PMeF^Xp&?7m;07L5H0w_tqLRn!dEpVtKCcT!$W zskKUhdO7ZZnKQ@ZhVhiV`*O(d#q-xsP@TUgCqZ?-RwZbdsS*j5AU*eiSfvsa#!lwZ z*H>6RDXB`rs)!(ER{rVy#vj2MISJ~MzB!+$c0Uv6=cjZXszj?wkaqn_-%tsq?Uv(?W2ER)a6Urt-CG4K;ax64=4lVYxE&PozIPNC-lhU3-MoS z80D6oCaLS=oZyj^4CQwteg_`3o#}yxaI2ns77hj@40m)9zucCxHa{je65%r)YuQ>! z03qywh@bb_XEnA4_cwCPtqEZ5ZwzzZjd_YXt#}=W^R1Tmq+9g#tj4&}7;dI7tcr{2H` zC?}qwYggv;Jw6s2EpfFV{K^;2l>_No%LmMsZDg#_26Jf%G$fsMHi7~F(w*Gc@`2+? z7l*rNGykZj55)&g2|U7-e?osFp|{N?--EI&$BPDEkA&iZ$7Y*WdYLE(MFmt1A7+Q~ zV1$o85uX{kj$Dd8XeR&8cM)Xq^)@9QiVP$%YAD=qi#nU*#>+O9vVmPPNxor^NcL+{ z=ULgqJY*$Xjj`^8egW z$&6w`pv_FJ0*52yp`E0F1>O>itmm9>k4aO8fwf6JW1Nyx0TGix6_kxS8{=|5EN(PM zLeD3DAYdqs%6cwJ5l%EeXx=eKP(Z*N zcV6}0Wn{VdSCRO>)ig>Qe16F?tnE8cOHk8@_o_-v@fnj2bt#(ielN1@a+<%yXARh_ zg*9yTS;MwUqd9J@_ljjN+^Ijtscy$}VlJ4&p~O+jN6{OQQ$P9d9i3m4lTUlau(|>m z1n|fJm$8Qh1V?x{A`cxrNPxNgxi2Y)tjCek<)cU)k!0im(?%hG*o)ef1C!N40vb4O zSrA7{aC6R+f|BkP>{G!manX4w=1w07QXYy0TVu&XAm2}@M*+P6a+zI&hbu57wae5;>b|EZ`9(F!FNv!aOtK*6{-DsRi}5W}UHdOT znFF&w=s|L!_a{=!l{dk-QFE^)QpN{xN$-86e7g7GNESnd38US!`(?S5+~RQzHo&4z z5^SgpwrFhl9gB&84o-nucF8@mwkWRON3r&ef(<*thHZsdrl$1GFFoujdspHRTz%oL?oz6bC{%6YH^;ICB7{ZDxJV#qX=DeO?Ej0Q_l zW<~QYW?JzrGj*DuuF!;ja7eJHpQLbwq(Tlr08jZ^Aq+{Vwzv36Jp^lH0A}qoBzf!k z14GEHKZ;=-VCUrHi*y5o$cN~?7u1Fd!c%m^a$V9pQm2RxHR7{1yS#bQ4hyny^uZhG zM7%FovFj2xi&tAstGe_%U4r)%^>mep@fGVzW$5*qogOinu$MR61LJ{AWFQRIRx8wW z<{Uu1&oaT{$%{&@;X$ozgEt5t2oz%(4D=R8AT4gH*(o#pnp#VF*uu)8y2tWirk)Un zJ3a6mqW*3UeZ>O}Li*+sZN}jC6la5~nu-?|7OT~Y(`VcwTs_=;rSLS%X_b0072}W^ zJY*BErOhtjv(Sr)Dsv?_Ad(;@thx}a#7K-WSN_1T>iC~yq6u8=e~`}`%g`Z6p0@(t zAgx1?JZ}&h|0fSY^1MM`{0~FQl6*{)e9Rs8b)Vuf`2&7|?IBrI38WSY$c``1tCWd$ zB%=HCN9CL;>|5x{#?hP;5kd$!4a~ubR(kG37TOPYIe2W!QgbZLR@Lj zd0tSXB;YkET%Qtn&fCvZ*W!d8$gCfeALB%1)f#J+h)QUpCoJj7O?lDNHdx8VLY_|R zSiB=iuaix^a4)F4pU1d6Wl3+_oy47^`m@$ceEbw=e=#dXLa!wH+Ewc~G@V)`fdM&` zlU($fJRk;K6WUXAv50Yx!!7cjl1(laDS|e~LM=p&Y%rV`%=+G;wgr!b_9S*hLhBd& z-mW@QZ5gS@q%LYWQ%YL|O;av2gBz6YfUj%TXuGG%QkDNmRo?m=t%pjs^}hWi=}I2k zM#B>kTdn_+RH%}^D^TcKznwO-eqlbkXRQq{( zNydn(_b)P5EBI2>*~#9jI?`vkT!3nYo-^OTdzwxW!6Ew-eZ7ti2_o7ZL;o}APipg~n zGfVxi?u?J5mrKQF z{X+s9#jYEr7J!rz2@dGWKG3ZH^KyYE4-YQy1WGZAatv+T)LiTZTVw#z^J+&`*EIl^ zN3!6L%d>;C-S2bi=f(k%y0U({5A60vx)Z*%8`*j<6C>TSS`J5?k7)D(!F;p+kt5Ov z*&Dx&4bBRFiUDD`TXIUI_|s_U&H{}YX8mU2&3FAC$T+Xa=VA?D4hIx_wmSp;YMnq&hQp!G z^Q5V+q0S`A?zHSsPso|aC{gjKY;#uKvGW@T3O~ta4Lc$In4X>u!S> zp(Ny_(aQcOTJAW48X)>w$%X$gSIm@h{me1iaXNT3Y!;N2*XB8h1PupFgBMaivWwppfoW~SzRCl}0W0Hrl%;`LT zNO7_V3B^bmj$(&^Cb$Pi?8d(VuI(6+9&(SKJzN12#GZT=0e|?w{`Z>oZ#wU`?68Uv z6JHD-fOEQWMyczcC%CTK&aSYutw1T@?c~p0yxGiwWy>Kqe!kDbEazP|ON$S7$XqUc z0sz?Qi%I~C^9r?;oqvg&_^B+rX8kwJ`m6IXZwKFUhxNg&#BfH?!AI+xX?lp{e z>hWf_E34bgy7SMJ1%DTTlHS^c6r}4Jp6-9Qo@}{;vJBp4yM2c>324fG?6ia0TqeTQ z08M%ld_4!z#Lk+9QWiSLLA0){W4rTtc((LDD632UL+O~#L)cPM$KClnMF4*y49Al%S!53q~_BFsX1Cpe_ectW0%7h^YjFFjp?pG%%0#dy>kF)D@nu=PlSC zaU-YVQox4hg{!{nk5)oeN1R1Un2<=Rc)X=A8v7R`kBi?IuM=M`HHV(8xI*s{B2_2? z^47uvs+SvkH0F8jnvWXq`q>XEUdNT?NdH;ax=8xoM{&G}q<{Z3>j@iEZjE{dtf{Q} z5Ei1mzLhO;xLJSpUt3R=_J~3rb?&TdpuAnR9zp8%E7?oLs#Y(OBxe({+K?wiw;9^J z;L8a1cGYW@RjcolO#CZ`JW*|h_RqQ?VLO|&d|n;;bXIxI9}wH1<@-xl)147R?;jw) zbMKBi52}{3(gX0|+JLCj-nu?(&*Q7rL-kksH)@W2(Hym=^}kj3TUU2G4iWCUvVFXS zH6}!^o&JWn77oa9CFBUJ_{)vNfoG^#EC!{+9CN{P&T|FPywg37yuk3ekd$5`$KEv` zDbKEYk!yelH>h2eY;lLS4rIN7OBu1MO%Yw#N!_i$v}RqZKst@04iJUbCr-!QRg04* z=XLhO1`@Sc2vknZc2qrvxvW&0V4qwLPfVA?6S*0gy=BzBk?PxGRnNqY7h8*n-{_!{ z-^)xctckIWa9)vHS+u=2UiE^g!K=17k0zxTvEW+H_+Ajlu3pZK7BkikUzh5mdIb^8 zH?hE{D`+SlY!~-m4`<+K%zjB}n;zXhP;T54j9KD5ojU?@-&t9p@HDs$El2Etq>@@2g0z(_pU{+ZW$y5B$WH{#rxmQNJ^uDShs z@Yk+dtw7@7rkD5^D#1Dw% zPiCE7^8knpMxG>K96ogQH|2M38a#+4KQ@x+$MflEnUhi-Fl#Sn&EjTS3dt-Cjkq(p zE(Rp4tlAzic8gP7MHa5kZ&k6XKMAQ4C!2!}!_%qX%3C!7E zpbP?pE+gQb810Izp?jn5l|1jV%n@sc*QG9$5~|}k_r;PQviEl^d_qR$)5{3=Z_u+C zD(TEZL?Mead0a(EJ!mk>6mp*l7^2Q@ahe;X+&oZ$*m@A6Bo%MqIA`Dp4GkShZ!4=B zhC3-WWfAB!J*OP(d4N{<1PHBL&;zB5vzsxE0ax2%QzUz)WC_2ufh&!pn3cfhn zEvs^xBJPYM5qHjKo+#;j{4wkAxS#Ig)K)D{Xp>pkNcuTR?wG?WsZuB1r%LTsNgqQ( zl)6WiI;4`$)1_9BWI1grX@f5H6IH5RC7r5EEhj1Bj?~5eOBcIK6+57cJ%jv6{dekO z`$?<0o%bK9BA==v|D}t_9TU{_i4>Va5ec8>j@hS*h!jdvN*CEHMMAvaAw{_3Muz(@ z-JeD3D?PS<>ZFDGD_o>f^iN?H&V+W=2IwF)LS~rj!7q{D{OaT%^^AuIkv@|N!IlS_ z+#x|vE4hM)hEhLeS;p_q+0?pHuWxphCMz^(weXcSV8)2!;?@Xo>(%+^bjPjGrrUc* zgKH|QHjgMM{4w}+lG6a{tby|iAC?1Q8dDbDD^|-l)SACY#$nbgdO+;G`@iU)S^tj* z`QbJF-~1X4q(7t+l7HmaGS-mwXP(UZC;rNh@QJ9gIbys5cX@h^VeGdI?hBgn4mCYW ze$?22AFkxRZWtUCxpu9EM=inUsaPm5ig&WnDEXUkG&Ei$YXdF(oh+lnI9P2y{h~or zE9G52Z#Hl;lLIGfj13Ymd$@r{aD%bmIKcMXfGZLXbxWyTyj%Zpj6mLC*LOcg6|zcS z#*oEV#5ibd7U$jxfh)-sKXW{f$)93uG8*6k0q)?61g=h8WmiQ40o$ElTiAMH=l;x2 zK2vCiK2BU@)=$jGO7t`zODoL`eE$_HmE*YyIf7dq3qV>Q2?N%hQ;HOeK8&70gx653J3IFV#*> z-e`A-Ik;n8QkEFp9oDG@V=d23n*Z~ZC!!KDWA5YRuq7TXjX8P5+!9fWl@*2O!nc)p z5pnL8#dLU+UWcU$nZ9fz&JzLyEr@IYk1#U&!bl^+NQE~;nP)V=5N55MX9((Cwb#+W zM(p`#9>UGn*QJyMkQe80uiIhiVVN=daW2DM4!I) z!i06O2t;tTte*6HKm9f+qr~(85q}6JA-FkI&%!s*-rh9LQn3us#J-4*WztrwLlo3^h>p0iZWx7g0T z>NX&!URX5i?!8*GxJ=d&+g%n%^DOP+!NAB1DPVsl0cE(1Ym@EX8>T{qr_ynqA0~g3 z|GD~lQ_UU?EaZZwr33t~S365zf~Pkv74?DqGy5$S_^r)>fbajrT|*mU z&Py?8_jnK=gVZ59!x72!GJylJHE%7b?z2<|f-Z0&3h=Q=pmW*gskH9bzN6^)hu-9I zxw5`+S$4`s`X5r4+A{|CBzN^i(Sc{W+%kL#6(yx|M-_>?_`bNq`X!GPnRoq;e#f0l z1`t1!>%7gCX5fRefYQ*k>M(*%OaA45FO4zU+d+L>817R$s@%JhiBDI8qek(r&@KHx6(jiXi>X= zc6pn9<+nTbKvrj4ni!O9@3rtt$Eh*-kPk^^_>kj~nx7q~sOYzItUS4mOQQ-bO-f@S zRF_L`?0fWizL;~sniO+h!A|BpZ%v3fpXsZ3~OSHFKf`@Zq0 z^1Jl=IobRd^m`!tE+O%0{|njo&HDYs?E7~8UYvb@MZf1|-?!;^v8$^7zoFk(X5Zh@ z@2~RyxOkvGiNu_zG&`!e*vDvIK9>k7!Zd9+Vw?cy=q=}-B|$P|w?e=Je3Ke_6O*ri zr*SD^ZTr{+ARWD!AaAazGi)gGPOL$ z#AD@?%R5S~maP&BX+WfSJxif37k6VuCHqhGYK2_jr_M>OOa+9nr7Ws7Tj!%&<0{vb zYDv>sV@ro??_;APF{Y&h(e$GVBP2|@AWO2nk9n6^M=f_TXKRr&8#vRwgUfV~v*<;m z>J?qNQ*}A+UQSaJq$?#H1E){unX_Ht%#J7^RX$z8op5zdSK3?J+_9f#`vDM+sJ7>U z;g+LrE@ALH{K2>74BoHta|b`JvqeLKvCAmc;3GjskJ`MmO(I^mmoQpdbY~qFtJVR( z!QwU>Tc6Vq{>IJ8zXd zv@Yo6|7yT;g;Q?pS5W;FHQ&9n^SvUs`N=vT0}Ml6p@xirgl(ebpyiI<$2eA~=|Uap z&$}HukQipJoP;mUI?M<4D^>{7TLf+rQ~4&r!)3QJ|D7NZ|E#WWYo3nav!xl!8}EuZ zhAXq;DbMj{I|K?*OlKj%y}UItR5@?FYy$i5Rkt^E?CX-j_OCG#y{nT$p|=;+rl6tF zZr&*ekw37J;N*a}FM7tlyduy>RW(Btkrs*etY!f52m&JJw4RiezZ;>o^=4`@wN)oW zd5MpdY~+lb?5)8Dg+$Q9XQ{UPurSY>1hVoQ_ehC&=FCGnTT`>gb~2JH;+yUVx6r8knL1y(DZ-)@5*e;@zH{X`>QP5X z)M;-5iFHbHGJi5ii7u9v=5Q<0oG41XHeAcH_d2Tk#IjT`!9bUZ)}ppy;h9XcrdowV zF~KpBqGBi`MGBD0g;?Yt5;cUjJbeH|mQ9KCY5|2z>W?WClxiZBz! z(9}RgC#W7kM2~i1vB-)lTZF}I|Fc}{AY7{xi=m}^Xo-p8nzs_3vWS^62{Gr5XCv4( z!p=c=8>+eTPSvuvhr(iNE+}5p`l}Yg@ZvkJ2Ux7Q!?JDcE0Vhk;SMd^aR(~i?G2Vq zoBO!tjvY>$T#D2qQrzGTqNr3+Pz-x*@VL6NgK!7n-DsSb6rH0B#wCd8dtvXl>|a-L zZ9rb@PIY#?^*wbQy!9;=m9q6^btb3vg;lIUd96*W;K+Hc4eAV6>*MMKNbBEM$uiaY zCv~W&^+9!^ZR;=9iL2Iobl90?%Cn%gE=S^5`yHokytqF+CAP%$BZ5)rl5i(fmd3i0 z^L3h?eoPAFW}W@{S!L(r%zqZ@yku&*2rNeWzEZvp-KVUVD;loi@**Xle#`p_rnk*( zpp%OP!wqb3r^r{Yf#JsDb}`eMp3}&3td={C%+$?HBuNC^{WYDp-CsSzjT&;%U&da1@L`_KC2~wr6eStkePkRl zIOSQ@)n=cgOY?57?1{l^j__@EzyAZ~2obs?AH;USud8Ed~c%Y5p^nrgCR|FHpFO`!!1Nm<)S^~RibCmJKGSDsKKEa z2(2?~zsc%iKlc1H=l0#2XEN?7fi1BEJLK+(pbm3PeB+&_J#Eb%5F&=sqO0tI_hdOa zPBA;U)^?XDSaJG#w}4eZyhSD?V=nzQ#IAuVI?ys%Zs?J^Q&ZGu)_1L|Ka+lJp=KOK&O(y z{d%<0Srsm_ujz~)-7|Wcsi$;??pNm*#DMs3ozbiN7leUubq3Dnxos3D=FxC*_r%`f zCpxls_ryNpCpxlE_r#J!h{TfaiG9USbY$P|i6LoUBrf)DnN)YF2^SSV*Ddy{ zEGERwQEgq*q5@yb#AK&?la1ifm;o^w1TiH3HF^YQPtTmW@|3u75R#GxZ1)b;fH?|H zLw2H#O{%(!bb&f4V13UvM>YBy)U~!;UBBdcA3JuV^()l@w<9>Eie{~GOChMOacZS_ zsoyGxv4k3@2{m4$sc{_$P=o|#I z54@(v$9CuASxTAC-J>c3NmA&-q(~c9!emmU97y229ZU!WxDPcU6keg8? zlrSDj$W1I3N*E6%aufRsC5+IN-~;RNPPB*d z9oU+~{v^tK7R!bG2?A3>Q%m+(qpy7I6l1V4M8y&e1n( z#@~z$ulRAFoK=#sJ8?>kGm^2znY}{gi`x}9F-NVp7w=R|;i9b_C}c4c*glyr_xS+* z6En&BqvARJ|9`w%&n;2!*eI-JKL7LYKM?p21pWho|3KhB5cm%S{sV#kK;S^RqwoOZ=N}O+7GYi^}619v#y^#xbx{e{WNphyz8e|+)`aV`}%}V zx$*jIuDgC#Mb~F@r(Ku0F`GB-h8z8IRkuvPW!B8;*UY$nw$8kET4MIh>u0GNbxPGO zH_xQe+0$;Bar5;sdoAxqN(l$b(LP|qLLXpx?X~;@4f9Lrc*QN1! z|GwY<|M7di-^c5|UeA4==bYy`=XqYQU=IF(2)a8U0J>sRy=Xx}%n+(4oyrWR2hqLd zk?R&q|E}jpV^e+n8FWoH^hgWgu;>_OwW#*c8jT8b4x|NBRZZ>Gw6wIaHviEcoyB6Z z@;ks8Da^aRYKrGoU2c3?jKY-k2X5JYvdG9`wgMTI&z3aDNj z7K-2Fa2U-y7uUqh+|K1&!R zHbVHz3WVjH?`UC#Ff_CtRH8#Ib0(b~q!L116~qjs`T>M6iBVH=8bt&Ngo@Ck^>_T> zjSURJ>uyvR;zoSW4 ze>6ZdK)q2{zXv?KXWG?&1R$D#RJdLPAnTD=bYvj~Fcx4MfY%T}d8ltW0Mj9Ps4S|7 z@(livhw@RIf2udMpZ~A!(Qz%D-%${gpx0RjPh0qg+Kc%}fLzKj7D z0{8)}25*35mN?ylAc=SS=h{9@V-HowHqEk%M3&%K> zH!JFSvNjD9laU=ePEJW#MOAI8{`46$4Q3gdnOj&|S=-Eac5z*_c*)XbUfy&cUqAl< zb_i!pXjpi}<}F*dZI6!G5x4)q!9$0S96fd_`Sh8Tv#ICKXJlT@%Fel#d%fs(@twOR z_wGMIyN@l)gHme#iRA00nCDHH*G`0y8>0Y4wVprC-D2pT^h zKm0EsDJUebBP?aIP=vO6w1VzNQEAiIr1ZjJQ}mpg$9S^J#bgxq-zc@9DPS}BZxh(` ze>4N`1c>o-2T%ME8j{eQ(8SOh3J?Gn?lbh8OyruP!$_1+9rTP8F6cKpuO#nz^U2?k zjU`kTC9*zw4>W;ZH{$~0A(Y5`^c%IW2Jo^Ue~$7Hh!W3H$iUDPMLr-JiXt0C1A`Pr zTrnh|dxQ*>&|n}%5m&?GUH!qwy86=qJ^_q{du_PlrO?0DIQTz)z!L9&lql2~4;WJ@ zca~5n3ClP2gS=WQQ!?2dani)Z_;KuEe?cAz3JHsd4igg}K0;#TC`qZ&(ql03Iex;# zNt3Da3R4tuL8`8ysWnYoM^}%KsI%wHoo8fhVoFNZ1-5qf4vq_*NC~^#ZN*A=51J<_ zX;(1mrNEEaV4 zBk%+0oZsEQbs>I5ze$LMXNkn~t2P7AQT~$u0k-zt{nk*o8?F~@yZcf7ROo9g0nefS z{|%7s{J*_ML;pO~@W-EU;@1zaE%ZYONmLo62igR)j8<;`3OuM% z@NDM}BY`1_4<U5 zYXh}@RGG%t2`{I-8(lH&`{dV&9{U_GGETT9d+m3=!c1@%y=TxVSghYJ{&04;NXg8f z(bm_(wwPZH*|{Jua=TSdsOqP&&lTTGKU4oQzE*uUdg|aEZ6)tvF?;- zoYUo?_?1bt*oBt@Pp%MqVAv&mcSgss`?G!t-I@Ml$NcLN+bpx!#MtD9Z?(wcO#LiZ zqx?apO099+3#EoJmFEMFElcq^wCJ4w(WPhT2VIfgiRc39w1^I1sW+gXiPz8YP64O@{;0jwM1-33xuElTQFt%a@f>BaJzv21KbPV;IZ(g;7>g{K0e@K@B)_$i^-q{ zLMFxB%mp6MeSG}A{J~>DWpV&~s4QBLFP*679~2A^F;4|MnC3-3Mi%|=PXlSJRnP~6 z9^@P1N3jW7Lu2@R!*~LjtZ-^D6S^HdCN?cFnBgDfOZB07g)mucqR%z{tPl>k4QMPD zEu2d8@`4FboH^iO3PS!Q+_%7BFhl9yR6jb49Fw_;8Pz|?n;teWY4ivN!J$*N!<52^ z=FP2Lek-?-=aCb5kf=T^W+2tV&KZUVE+B8pV&on{jtQP;HW+S@iwIm;PzQ4bP%Hw2 zL&Bj0gg2B&ab(d0arY5D$Q$98Cl9%j`~eB{K)^ptC!8KaF{OE}LP%i)O6b^R*__~D zCJXWbr)*e9Vz~&!s(R7bXra|8_{gyVgYSnLLJx#$G{8MJ4re-j6)~MZ+EF-P*cgWS$cpd|s>&stwGM z1?xdo;!rGEbeJ!~Chnj@&m25MXwcTs#}YKLNLk#PlJDuKbi~pP|yf5 z?;;g^zZj*13mM4>L+%5Z2wE)gDl7Z2f?^E;k72+yYY-V;n?W6UwM ze>R49Xq>@7rQxG1W;RYUv~{T5{Q;51P%#PRTwu9C=7i%r5f2L^j@E!IY%8D)S~vVe z0k%PcQh+;FbAUlmzqsheW{-KosjBAowu5O>4V5$Z_eTC|oS0xM1x^bA?gieW zfsKv98+KSAt3VDT#2@4Zl>-6;WbJBPB-7BGsCd5^jUk~+Qn5EU|1lI}tp)nS!3NMM zVypqW#@B36Ye;{gdI8d5OMrb3TS8z{A3DC%hQiqm6B0dyXU1CdD*GdV(T>=7o_yG-2Y+gp)-RM@JofVz~^dq*z7* z+=oH)Wn-M6A4Xh2yTK3!2a5yym1__>It)TBX%h`mRS_@Gx3sZT(;y5Iq+#NTr#!c3 zyaG0&-)ayluE~Jj8AAGR%y@@U_Je%9SF-nQ5i#5`9If3;R{13 zb8ubPAcS|{AUOW#G0?!6KngtmzXlbQN=_hJgQaGkW-M&HT>i%73%)@Phz-&Qf%Yko zm27`D5O@f%C!wr^uEItNMUWRRwYZo^J@UFsxa(jBb{7XUa%}HH`U2>m98eEYpBRaI zhKGQbL+mnxNDCY9AL_%}40ak|rUsktiyQ^S@`IfItzS>@Ly+nXnkZJ3D+f4)pu`rG zMPGxPE!^M}OqM{6KeX$^XJJQCVt6Zgk@F|7(WCKS#>lA$DGE8%AR!+c@+YDz@*|=v z@+G3HAaR8Y1(qJuYE&pHhExg|I25WUn5HaF5E7p_J5zMDW@zcpq)^qhAyI5l5E9Dt zC%jxpwZwf*6l5PkYzTKN!)wAn;maBDT|__`Fg+luC;1L1Z;3(tdd&|OeI#hZrqd~fPNW3XyNT}aURfMJU@OYFkDqv9Dc z7h!0BXMhb(!CijTAzKQ8R|<(E!Z8>^^MyHcfakFK$lm4_fygBYLBkP?*b*`@?gVcE z8|f^Bc24*x$%eTRS`d7gdR% zvp~TQqS{!SJ8_jw+$6$e^FSV^P~lSge^ew34QUmk$Y4&vp!W~$j}TjEuO+icxdy}v zjs(!|P+%Q5m*l>G=b|~`=9MokFpx%=WuA0|au(f_15FRu)wtY3{Of3M1$I6W2ZwkD zC0_o;YT~SdlRr4Xx#I<2A8UX*(TIUR+>uCg_d$7ha}=>ZGY*eB>ZL~2)z&f4)YaCV z4qG1^mYM3p;)Kw|1{Xp)D-_b!)qp?x=+6we)iI!20S!Xn9PG>BiP3bV`?1)}px-Oc zK)%hHRFfcYU_dt2+@Ik~XZ>DmIx04UYQ+hM&^K_WIfF&YfLK8dsuhdL38w1nYEWU5 z!J`AgPK6B*UslZG$Fv4;%Mf-d>^r{T@CKO&mMY*IK2nSP-~X(DTEvQC7$n&N(Kjj6 zc&by#d^!XhdV7OZF!2Nl11b%brv|jdBa6&olklS3f}e-C4AqMP+b(Z8dr)A!%}`wE zAItIV<2+pv%}{tBA>lwWJ1IYg=40kEhCSMV&jEHJbnb!@FFVu2yui`SMlK0Bneayr z29lkKas+4oqaevyI4+U;J8gh(K|SyUVS}lK+?Mfiko1o`62Zqalx6W^Ts|RnGUP59 z!rWL%J77Y>!-3mZ$i@M833d_!ebX>D9dK9>%~MRA&1`IdkhnfC;xGt_Ummv`&7Eoj8Vh7U3$Edm z`J5mC2E~NqOL3+LQyjcPz`wNyj()r-F(8^oh{>U&TP!`fAHQ+6_cA9tYjfkdvkhkG z>*`F?(o~uoj%=O-*UV|&)_jD3Q`A;*}7;ZAgC2bbxt;}-o|RJ}NJ$TqXXm7zOzlf` zKUZ*$dOqs>>+?nz;xF`ESbj10qU+OeA)8KsVjX~mZfEOVZ^t z)@D>?XlKS`zRR3*_2AW}tCm^uSwFMvvs1GBvR!j7<_KI{dM)jmaIRZ!My|;971uMa zi{!cGrR53bFU`M{&v(P+M(U038}>JoZnodFymjQ(ms@iS_7v0?=oW4+d{(Gbw5I58 zk?d{X+c~#IiWe8B6n7L`+&OUP-5uS#QFou*omjG}B)3H5p6k6+_rBkodw<9M>ibh3 z1V6}sFzli0!=#7b9vYNxDJ?4<|H$W2`lFslR*z#JzkICxB>2hoCxT`6Wk<^1lua!U zDZf!J{M6y;;ivUaRV!9keaR!LPatxl+JsMdJS zdVcMB-*fX9F)yCHkgi!)lTh=%My)oeHna9;?VOiUFYmk@R%cfiTUS{(?v>lC#8>ZL zsk{z&ed%@cYrXn4^||%k_4D3Dy}A8H=&jY;n70q#j(F$rZr{77??%6OeSheE_4~06 zOB;?g)HY1`;P&C(?0RXk{|njJozEkVbKxQk=N1D zq4SgRGv()-pW{0hb?)nY*eUeO=vVl!%wOMrsdUl0j(0ullIXVX-q@Yj-QKO)S{k_>}~l1vUv}3N#3e6|@uFBA74O zA*d_F6uKnzO=y}hTlkuApRkoktVo^6RM8002ci>)v4-6nMimPes}$1}j}>nfcO8Cx zICVtyh}ID+B}ygcjJ!Nje$?Sn5|Yu90#Z>@l+hbU3rfdGj~a7qjFL=-jEQW8tk2l) zvHQnq$la6k881BH>;&71trL$;GN0TsIg#opFQ|~K5Ikk7VuNC`lDD$5$`_S%)krnV zsnY82)U!2qXwtL{r;X8W)qbjTRrjb~l)nFT*BPcW^$e6|$r(z`7M~+BS9qR?k(lu) zld+~#%(TsoEEZbQt=3u}v`L@;WI?m-X!}_XG{;>FbDbKU$GbW%+P=7ON#D}B%h$UV ztr+I+YVKJ4m{`D+S7XN6yl&|RCkZsvv? zQI?y^H@k0b-nJ!r{En+T9e01X%pSXMQUfhG&(gTl=mL)yC^enHc z^m%>F&zF*~wcgmjTitN@V?pEBFXNl+nm4sxhe&?CUm@MsAovXaq3SBkAw#J^;ZYQ0 z(~%fp$^k{u7{89fVif!Pzi+_r>y7ZMwi$j^FvhL{op3FHD6`il*gd7b5W7a-hUXNj zdm_JSi{HEGtj_nCH>ke23n%Ny?TAM} zp>uY0XNLuvQJ{=B_*%o6;IJfIX~-nvTE9ft6e>o+EILi}9v>b#29_sk3H-L;lR^j~ zT|`vX!Gl%fHitYT1BM~@%pLQy5FTF}a}yVChNG>E1?dXLGEg@(Z(4AOKZJ=8&KoRf zjl$zJWx;E4+~a)+G6L_UuO~WlM=k?iLmcx~v*{F6W|}Vz3#UTM5kzO8)yEIYu(>dh zL5hr7-s)VtmZGKQ0_Gv+hDF0fZd@Q93Ub_Ft}yIPOG7e_fmjKAsYz5p;1u1520;N- z+}DK6Re0Hyx4*yR7n<^fNH||`q`*Sr7!KsX#No&gc`F(IKudrCaFhdLfGmUkXwxt+ zKe$1mS$MGu;bytP3cNB}WjMQnIiVv~6#w8)Ck$DvoX(8@SrC;|$2$6Vlc=2LezMm@S}T>aolhvj3E{}K&O(;#{jr)t0jVtPz;5%cEGZ-`*P zj&or=UK|GQhr%OKv2kHTAO_Ft=I5S=4IF#^#@hr5xaD! z46*|qxq##V@(T5%2Z3J@We*-Hfo?pWmLy)BdT=ixssg8G?nEA0-Ud4kfCB_1W&Ggi z7Of;PT--Iz?FW9SVzFeXE_#Zgh?J?pG&q06H%jnYBC%=jYHQ0=&XexzAA}Poic|(d z_4a2P0t4V7*Knl5;W;QAX#cPEyx=Gi&c=}g(cQ+*#LB{bk%g19jf4H*@eQqyj?Mns z?LWp#*869-|EP~|H-GE-@ADm~_phD@>Z4dwwjYM*)z*)`$eMSJH)9_$bMEbDHgFN)%1YzM9WV;X-2Vt0? zQBXZ04g)Jg94dh?9Fztu=92pa9OMugjUp@I4;Io2@oQL9csme^>4klk0m6K+uTbDy zQ4rP4$&5H;B|7G^nGZUKL#s7Z`cvT?1U(dlx+gXuF6T!MW9A&APeXJLvH zIbZPL`#|7W2ogVN`$2*Rn?5duv6x6S?}7SwO>(@5>j+g0kb#Yx9^yXG1z8RPjOid6 zai#4KCCPGxdW*1%v|!@%A?Ujqo~S;WJT?HbJbtV|gwP<>&DYaCgz1jdCA=JYsLrc~ z^Ogdp<2{5ROc?H|GjWKG4_ti!3+h8UawGy*KvHAG1yjVNJ8TOW&yx5?81iPi^VG(b zU||0sG-x~^7Uydyhv~9(cWf~XsXT{hq^dx)$Bnnd&;OxU;B4%ub*?rh^MIn=2S!i9 z*MY#vz(GB3q>#8BAOWI0ZbBf{3^0w27Glw1Rd`T{6g+M&3P9w|BO4wV2tg2-$$&E@ z=qLD55*%S+QTgz~4~o@+`5+w1iuCqxm+I|*F4^0Uej5;1^cz8$Fn%TPhhCqK>cwP8 z|7&EOZy@A}hcRLI7hZJar|eCqP&}3kVAsTLd=vzzG)hsF!T)U-l3a%*LK%o4!Y*{Q z^t5z{U|mGthZkXg76BNrK=7|M?{;3dtXv!TpH}V8X2m(96!s9vdg<4wVWv|!NOU^r}82yv_E;h{{HH--o@9~mXcIDq-#hBR*mHak?4_aT0a zOTi@{EFpFbjjbcanYIQAa&A*-aSfqmOlL*RNbW;;aeN^mstiBRCS)IWqRkBu!U9&f zRsu2~7)IPLgMi}Bmv|Bg+C}E z|D_(JQb@R8b0qjT;TQZtsToofBy{o^4M_nKY6G=ZKq&yxO({SL9j2l-P+QGd|IHNi zANqq5YHP^wunbfOwTC|Sfy$wK^oBEekLsZ|QGe(ec~6!>_b@a;L4NS?3WA%L55M8V zZw7UV-X}(hyh`A=*!#}tC+WK-*9VJ}fY0GzIxf`|y?45l=l2r)w-vSx6B+mok>dmm zK|Du4iKmPG(5t7!bNq(L!FnKi!y6)QQ0--0Rl>{G)|J^Za?C_>KfW%0+n zr7>f}hS;!!%}i{mgSVwYSwpuoGLwz!VO!{+C-{yz=n=6$4tj=*Tw>?q#uZ|1lF@4sY23`#xFNX*iVzDVSEk z-2~Bwg71J>K}3Im25^XgzTpMh49IyHKNdL3qN8wkaQk9!Zs5BTRvyegP{P9hOZ%k7 zL|SL(F_f!%OWVZ$Y~Ar~_Qy9;|wR^$O=7*h};fMTlb7;Uf*0dH_Skdh{pl8l*Fz@e{fb zvP%cIg%6M{KS(I>G)eNsAM~IBk%Kac`Tny!a=l@CAp>6Az$^T-JXd64wJ^dX$ID9^ zL`WoJJ$V0t`|(o3zQyebcpCxvV!??_9B{%MdVk`7)rY-|NLfUHh=3#na`I{DgDFt0qC-~-J+^LMBr*B&YMo-Z* zbM|6y-k+R#yW(A&ptPdCxr=wmmIJ4+7C(F6E;L4Ix`iv9v-RMatUHwrKZIqJXIL)s zS+ng>O7`8V4;>=1Dl@GX`-W~md^V?~`r}X0v8o2vOZ>v3kEC9^_xw}muyJa$Y?k_m z#~eMEd;dk_FEP2PhVz#NMC>?r{`!NO&t2l<)n_kQzAAF(@e6qmYrk|4pP(_v){U`t z*NKbyr7yqsjF_l7*KS4Ny4@!)-FQ^@tyf}_);#-_LF@O#U%vVHRa4){$hu;Ni>-IYxE`!jqMvD) z&dK^Q%qHgkxTQy5sQI63oE4t?YlPkIM-x|^tkVp<^lk3C8@>Fdn~J2I;+`sao_edx z%4ij~+;&%H(V;43pOguJm@-;Flh>Ze2*7f=&D>PPK!EYnU4ZWfKUzNeb%_i5~rCC?46g>?#U zF)vm;?fqW*fXg%et0C>fciEO|Tx5KmaKi27ocy&t{F_XR6i#`*m5OtEs++-T727fY z!PN5spXH7%t1-MD(Ivdi@~(1<&j*=9i>hX1uj!E3WB*v|a!}Kx_?55b-CW4c>xuS0Fjdi^Oo6T-dN%nd-dcSjpUM9OueCL9P>K9gh8Gn3v?d-hBZjtR)B`Rlq zKgu3nTs<=<^ykRE4o{|CVSb;S;Qrd^)`ot>ulP9=?imN)E3VfWV*XnsDLwt+Yar;o zW@P80_h2*$zr!HePVnU-Z0jJk7Q(a!H$8HG<1SXhp-Sil@VyS;Z?gRVK2SsB#Yc)s z0PGEY@CxDIvB0D!bcL&3crn87$hE7nrvs;ngS;Uy2cGuPQ4JDA!~rs9zT?gjq8u;Y zhAOzOguengTtKEFagA_5gzyjebn!exs;lEPlSNk398D}-tihc}ZYnhFoeW&SVFwBX znvoBXd-#O4%)JABkjG{H+kF1Vfv*GlJ~Zzph&#>L)H!phdb;pk3i7){$V~&fHaVWZ z)|)q%syltgf3HVi$N+5}f9MS64JgHRn;~;UZfk6H(U@Rp?k-Ly_Rf|LPIm6jE>1R% z?v^&TwiZr?R8tFhXrXRm340l6K5$$_PKx(D4ksTTejrtZK_{tb47_wOsQf<;6#r1~ zp9i-8D*umeFnS&`J|MZjAJG1xAF}-4y8)*g9uI_Y2Jhw}rh%9mmtkp&B`8T9!TuGvE14f&J7_YWTz@_|q% zIEO$63c@oc0(guR8=lv_kPL@d2UZBQMy???02n*2`+)+;t90W|?!neS>H4-I>;QB; zOT48xFdn25{@xJ&6f=O(P_QW@mGSqIND2L4Pf08y!vtxmzn6y<8nE{Uv`r*_2hIgB zD*9_V^bQ?ff}HQ*b_Q={|Diu3wu7tHscdiKY>mgl;Kl%cx`j2*ofnD(fYal_ZvyiSo0s4T^@Nny*k?b6ycNie zv%ybcklaGr4K2tE>=yKSJj^l#P9^b4FfDgH19-ul@8H1zKN5)}9-P~d_~8lU!gdxa zj|D%-dPj6RV733fzRnChE^5FLfCVpctD+6m0DaE~;vsl?#Lp8U7y<=HVipvHfex%U z&(ZE6r3_yUDEHU-5aU4xC$Z>%8qeSB^Hls7J_z|UfPeT}O$dCZ0lvjV1aR_D1qHKB z2Sfz9n#h5Hoy}o(FFKefb6}kZODbaGgT6a~{8~77p~XT5Gd^P|JE+_scQUR6gT&&N zMNRXr59an&9r_|BPO5|29o#=M)46Su@(TO*0GAH2zLBlYEqBDQufJ$^Uw;8yMd7Lq zfbJ6w;Qk+HAtEql1Z3I(KX?J#AkijC0tF7-d0=R~H~Kai)t~TjLqVi}_<~RAU;b1w zANf=7-M9Xrd|J>bMa)u(!+*?3(`>?*w=?97@HqeWd5eLw>G(fFGB|n&XNjTVLokBh zk}*7?0>G9Zh5b+6eC=CY+J|&mrGUiC>pZ{tnwLih^yO7cZZQ8EoV0$AM3jnm{dFt5 zy)J#jMrv-|EH`b2_U#kPBK-^dbf)ruO(_1hn_;)TYK(ovEBBcaFRp)IX|E-H>Vka% z>vU@Tp<|{~wRcOGrHB{L(Rf=7{Zg#r%&$CA=-e8emOu5i*~YRX<##rWqJ_IIZkyZH zzmXkrZS>4a?c|;Pp*l|-sYR{leI2ufzSoOQOJ&(d^$C1z&y7u9t|LEr^_tA(ujGw= z6n&m5>}>LkPde9JBf+=nz#hv{W%7>`8R9Xzs;6HSj#+usd0~s>yKl9NR-X&G!FNly zYk&7i))cFp>FEMvJx%AmRVs_HyX0}#_jBu}d!|vP)U z*+~_%^z{xO@+vsbP;_d#eetbR^trKy53=O9)wgCAIh-->&wBebPcFby zL|e1jEMe=W5tEBX*`&=+{BdlAZu<0Pg}a_ibiU_t@LkCKr>nIawos17-j1uAw?Kg= zJv>b*Z@Jl6lL_T+O$TW8#T9L*S4D38{AJGQ%jQ>;rGnaY78RZ@S~dHfi6H& zU{y<&@E0zQ+PAe+lsfCFL&mywV@-^=yH^ORR(oCJ-`CP}$zXGa<_5`*O+S<7r>5yi zhrHeDby9u%FpL?zw|W+za`O89p2It)yi!h2KNj=B^ej86?A=Q>5BH9s*6~a4 zM!CM&C?&aO*r`iy_S%hY<8D72wsPUVl&UuxyJFdXQ`&`l9%LT4MxU)H=&&~1xL)02 zogAZjR@QsptqI9L3bn>ZVNd7HA%N>^GQYl?gJ%0$lFbJdCt<>DV({LC|CG`<+7>?>TS|14-~N#lV) z*Gsb-8YCr8g}UCf5i#qOI4H7sn^NAo!kqr6hs=vq%d56+U+QCcX;S-o{_Jhqn_8qp zG{aBd6PY(-SE~P=bSJIFKYCL>+El;cj0npSJUzVmP2*u%e;)0y-deq8r0o6|+s{sGE115@?eN`2DP=BF!rZMt&*@Lh_D zO2ky*ta)1(S_*8Cd1h4>@7>+?qT`n9>MbpmGi0(NZl(-#{H1T#f4L-BsL@sbJgp%* zN;$N2TCgyE`OE|I?Y9(9zUs_=vHFU|`<8Ud*`DUpTOWzn7t*-CY*4u38sy6ModVh_@1ydMGx~e` zG$LXjytOtcTqS(FuDLRxD*SkV79(xZ&4#{9r`Brrn5X+e=|!<;Z>$*GXlb(9@cVqRkO;NO z?iC7$Bvt2)DB3uE%dP~z`8Q{X-EMv)vt)|*#PYz83;t(eO_yQyb5w`+5oMzJz{SJqL_$%m*@ znR{pEDTo!|>o8^l=+&fvybIT#Oqen*U)!x6QQ0wgcw(S>h-&mWrB&ag4oND~MSiG^q&O+)* z)uFs%_vdGtV?Ph?9((%d$IYQDzlzN|S2QV_0s^4Ba`+ghS6i3ceqP|;@TN#*Qt#6C zoQ|^V3J34R?u@s69lWV}_=}j8rX@G_1qWr1n|JX1rf+kS#FK9Yrsm1`$p82jab4Mb zwVvNHi{52z_94=uPTxzCmiol#8?sNG)am-_qe(M*qWo!fxsk^xBdH$QT;x}`}OX;G&Hb{D^#pD@td}C^j;%O+Q{rwB@usof zlkTK55AU4M9=_yV*jAZd+Xad)Rz(3)0Us3 z7*su`lpWXTT_SU+i9p{PC+1F?7!ur5-_u(*@$?tndJP}f`eOB*iMA;t5PRrSq-6y8Gk4Z-fr9jn-UUlbx6Lg#IbRU7*m^Es&9u3VhaVNtYH4|l4Zwme(Y<7lB0Qm3GDVqZax^u&ld&HN+O zGdlfLyR{SR?zHGoPkyYZ8xwG~u2*Fdm2-aMv%Z^NYHRca)#BHGcqY^KK+V2E_1RrN zhi6(!m()^HWwjE9{iu-L5?9fGKUgc&+^u4o(@m|juU}|6#LccKnS3R>;F2B3nmUz} z7Hk-S-~B)QtXYKQap7S^m}*(_%5l{DGMI$HXZwR+>2 zy}yPRMY6_Hw{;z~+9vh^H}8!$EJ$lYUf6IRv~%LUSfdAEjl zZ7$R4Sz4v*H_4f)^b?M$yUR0Nh1}v(SIl4QT3IsQb?%N|saYagZu3T$CS}K8NLpE8 z<5snjp0vk$yPNQxdbg%%{v;ovYboxhmo2YWo4ee|`*liAW83oY{gNrZtTicnjSegq z$w2%+S++T9gKBJzhY@Yrtwqj3i6+TS1?!8hzV_GEUwYig(t<8Y%A>k zk@4!QknYV2Z@;AC1D|fV&G9_7p!97~$fav_UMmdv#hAkLbGpQ$+bzd# zzWfj{FaL$Ock<)z_iNAIFY`*9 z&f2NhORfi>DVyIcDE(^ecmb^=k#ii1ywz`+=9%tZbJ}%XM{&S}i?!>%YLqmXr#x@H zs(kHH<=V3~No6Rr7UZjcn6HDVksWWb0PttpDzw>OcAQy+!M{ zR-5b*TC-K|n}6Krz+snm&Xlu0VG8^QGs$s=j#gsPk}Hji_u|gTLLC z)}xPtk6-x3+_gM>WTxSiQKugyr+chia5?ny!^hT7V$0o)Bqe5yP?D7IJ+pe!iTV;va$A^f@DPU8hN1K6B+!$>HNq%Y4UYd>1yk)Y(xue2%BuX!W>rZ0WW(hJXM& zGeF1c;=00;Qq#nf6|RmG0~#r3IepD4V+v!}iB-{hD{nd9e~_ANbN+DA=&UH+{nF+s zk>bvax>qq~CWS{yZD_l|iX zv^_yx_F>;@(U%e}=f)lzmpwAzXqC43?fWX-W-|8oLx(M$_0!*H$)z=`Q#D69hIx&& zihjooYs?L1j+=EwSbapAWbN)Ut?SiKX3bw5)cfkz>d#t6l9dj0iK1H#;Cd(XQ_wjomYg-n4ZE|`=(%ZVyY^fC& zW7r~@@te0Zex_%#>rM1Vzoz;RzgO1y`eaml!H(dN#4JgzTc_S!_IOxvY{Sbba+BYg z8dE?3Bxx(F-c+edeKj_xwQ!^rYmyJgl5h3ayEOavC)O{Op5R%Se`sBmt<1zmOYh^*7;^IkB0oRyGT*sxt#jn4WJ4Rpe9hd`FQuOM-4;?^ ze@3xW`?{WJTFr3(&v(Wj4Ul79SSdtb{))cLa7%>U1Hsyum0yeFFEdUjJ(-c0ZItc( zdc>y4d%gVQf1X$(SkHJqHmul5gsK13*U>dP%<7EjS*^o!uFdkze=aQip+vI7$EVVB zPk2$B#JJuz7vawW&t7cSslR)m&?DtSqG4{n<8{RU2cHEWTy9I zmwJ8{-1nc7=BAaN7@S8hYp|H4y|L_pv2<=@v$e+DsJf??9=TR=qcq$+P2Swk)(M&U zsC?9^aYhmxk0P;x}fo)hbDZVKlFw0@mnW11FoQdcST!&8&Dx~HDCZvCj|yYO(z(W#+D!}~-Q z)9Z4?n}?OeOR!YBj;AbUzSOrev#Fn1m2$XytF~=$8s#&-q*!K8)FRYds`Q_Ik=k=N&?#fCm zI<~1sdF0xpyQ>;G*?rg(Wwv@vXN}6S`1oG@iSO#y zw_5j}c0VK+JWYV@oZ$Xp`}YT9dq!T~t-4|MgX>IL_n^s}lE(CZ&@bG}Uh&pw+PxVL z*Js#Wd6j(h^@3~ud$wub=o?*ecT%XORM6XLI(9&hhZK7U@#q32p10>f8& z^@iRQ@k@Rj#}~E!@c|c!iL#e|AC z^LlbZKJQY{3p*i^a`Ef&CDp_G9|^1tI87~`q0^q9{A90N$+G1dP9_)DB|O_OLTsww zx1d{PC%dcKG|!r;tkAvTc4Luh^rPEMxw`LNk1s_CX4y@OrOn;hX}Y^Q@KCSm{%;eN zg=Yn3%Ir~f*}QB?;X3(iXFmP7r@gT%j3Lc0`s;J}r;{5l9T7D!idMYzr8C`m-`L8# z=6=Rke4kG+%uJ0bzGwYy;RJ)Q`Ct9BUK@;~%A5T%zj`>Pyzc6(-PRs9W3$JfTRY{+ zi$?Di_wTgC?{o_gNtOR3Se<4YHvQ5U+sdilP&VtMVUuO8Ae zwT@j>?)p6I`9`r7cCHck6xTdBkbdeqpTmn~^qLV= z=4ozjR?D=tZ@9H}TdVy1gwoc+#kCBHuh~i?6qE9b<|g>r{D|(@b||_%VP!&qqg7IF z?cQt^Y5m$D*`Cto=MAk>oHZM6oY=3H?z(*5v}2}}9?2cDp09Kw)a!l)W=YjM`y5p@ z?_5+@Dp5A3cHiXT4Q2<5TkDo@NI0-0CtB?AJmIm}#mWufzt z*ob-MaT#h3D=x^MsPdxlj|-GN^8O4(SUrDUWnzfh0_GEQeujwiiR4Lv4ysiV$DP+%--ZC>kI$!rDAU@Y7b~CJ9}PeGVk&J88Pjv`3=cPWCp60*m7kE@zUIUBvMo6k3V(I%O=qq8DwkF_u?Tt7J-dPTJm zm5h%Oe7-3Dn5;vh&57+f)y{Kj;vL%`Q4+qjRY)tnx2r8<Mgls8Aj|XzSfnMkNOTztnpYP_&&3uv`uqDXuS92TQOZ_DLHD(gA#KNj7ZGd zeJ4lV^kq!ved%}~;VW&^gnZwpKUiPmX_Eb@XOAdfvsHmiQ1lDc8v>F>Q%cV}1w8Sz zXs1L*s_e{UFIGQRVPt#e_Rtv?Z2m%i0P z!qCoX-;cKV6LV(A@V6=Cl!tvzbjVrwNcif}nj?`>?-w*%w^bV5h@6tkVcb~5a0==@ zZPBbdSv6Ou+DN7EF<(1JSSH~5wHhCG@T1Or|2FlRN$;~dLYKTJ%&C6F^M z*ds^NKQ%EkB|Y9lGd!m6ZPELjH)3sSTB9FzovE$y4xr2UC12v}U|cm)`nXm#PqoCN zRehury7V}l4e4=_=weq|7HjQ01$2@f(30{gxw7YDQQ$br2L;1WfK3+-7DemhB zi{VrHBVVV^WSIEw;uG~YmpOD{g{lShpi%92#Q!rEZc=2N60}*?wk`0v`LMXAF*~!b zei%`^DQ9ng%U-Ykl2>nPPip#RUs&4^r}i))aPqNFHWvOtifn_gl;m;QN(Zg=`JUuu zFn)d3wvJqJE5~m5-2Jlsd42MiXVo|zs;u!YS=={IzkI(a-8pB+)0fuyn^!VE1V861 zlV7G}smE9l?AgSe8tcbDq2RM}d?@`zs`AI))=JvG;w|s4=H!pOy7AlYeYKOsd%rov zykK?;D=$5_g2y0G+mWMv#awDNzDk_<@5Z|^_j~u>Wg2#t~$7~+eM*V z(39;+4~&x_~auu1~Li&i0ir3}_HKe$>nF(!DpfubM~LeoETwm*F%_Xp6v3dEu*que2Ms zbp^;!4!c=x%6#B@wXR2S#;=s0X$SVD=%z_Y-f&PfHd?hlGgsL9?QDhFHPs3ucDf2L z4y#y2Q(NfpF8)|$P-6BVB(?l-Ey_?cbquUp0e+)3*?ssra)#r2#CB{p+kfzS14+}e($IPBi_rG&X zz`*MG#=ZBvb6(9i{-#-~S-aMLSgQG{Vewp8T0vg#pKRQH`LBeJIY>muH8ahy{shv^t6_5%HkI$CHkCnP%v!@ zeQf$%+16)Mq#eyKGn-ugLF(iW?=woT#>UWx|LNjiXv;UyG}vEs)MzEO#hDQ6VBhirtxK9ksq{eR)r7j}LpqgPARA z`-(%&Qx5*{SabD?g>i!>O-|;*a1ARp)yvH()kl&P+lrh{#kUJkuWz4SdObbBKK{$m zdu?_1=2yFKxTET?Wi?!{u8=0Q%gkbbJV*V^lb<8|=dAX;AJ}HOpk{6Ex}AL|Rl>rW zCDpo~c}mJWb1^>9ERiX7(%|jB-0QBBEq4i?^sM?heq?>hQFZO@w)$~}F( zb)?t5S3PZppL(MB1xJo*)|E^8=-;R_#$EgNz1O#$4I8W8YGx?0UT-YrprB}@7e_Wm$H|OKUDeC#|nJ;#1GZ7Tyly}VW@Ob09zj^e+{hQTqc#M9rlXL2E z**4udAKVMx_*`@x?U?&UP<;OCj=7zDLZafaKj%%N*3-YGNjdAAKB*{qI=A7e*VLQx zZO^0Sqw2k%j*@aJNfH{Suk+LB+wG~hCOJQk5r6ySX(wy$d!~R|?uq@idt($zpG9QM zdz)(#3)%JTkkbeOC6S(n<@ddG8#P)vhJ$)$WNX6qblt*luv5{+$;ySkkqQ z^43FZ->5~ij1viQe|0(&y@NME-nxyuq#rKLH zRnK-ZdZYDD^?Dt+Quw=m_n$@Y3vM8_0lc1;;)qLTc%yz*ebN73Wq&Dx#AH;YR5 zkM2_VeCk{HINiw(1qDS<^c=N+DZf!URk^zIfG?kN(t+4#hc{Ahm$K4yx-OW0jac$@ zlC7QBFxi`J-SRi1Za=acrPIA6NjdR?&a*?T+rwlwI(JhKy!{&K%bH}@EFd;YV1K8w zjKcSI4H**`%rP!__@qp?w}z&aqSjKqPi@opwKY-`=RZjnlboa1snSrWbXI0zb*w;r z!Gq>t-5yg);r;Y|di|&66;CftuZr7aCN8zE;+LYIXVZq`trKjHZ&W`?JTj*SX%;b-k~D z@9Ta2{al}+*}pb59lYjD_j~u<{Ce8{S54{3s`%#n%l~%y@Nq}kwpV^}`+oWF95iG^ z&eQ71uRI4mwr5-0y#uGe_2$l>Pw3it!;s8@d#WS$d~o~xua4iZAm_EW-g;;92|s_) zdC;RrRkp2qF{$;n@wcA%N2%+;wNEyGaQBsC9Q!SPKQyXw<_`;I{yHpoX6=EGH#$GK zXYu{5Emt0U;_pvx{Nc*dGlzM`f9)9l;$@+uQmuPr1aIp;`p1L+eZ`1pGRC&%zOnJ7 z_fGolAfM}r_qyI+`Ci?>s}9;LW6Vhp>@lqMxb9;{w78!9(fj^g!LQzUJ$3#`JEi~s zt9#&rQPUkizBqZ%UBg;09k_hw#g!*KH1qoh?~+Zimk_8QTpY$Eki!) zIQP`|9$V}F~OX;+8!gdU^eQ>#bR-^(hxV z{Yl!JBfqylbz{xEV}=%&mpnFN`fH~iHT${7+>R>;%>OKDgX{g3M>s$H>88a`%|GDT z=LS5q?bW{>-@bnP18)zk&h}gOShi-+Uo%!ZzItiM#n&Ho>ZPf7R+QbER66t9os%!Q zWXAN0%&qQOi_fsk_~k!$45+x~p`_uj?M%JloYp;ld-Id#S>ErT-}B$=U%92G{)Nz& zBR-!o{-{s){QfoUfTNJ>fp|g zKDhY%i^hgNnVX$oKj-nb^}bIpKPoxzUn6YCUsyc&(YI@cd_H=9iuci6>tRl({goxI zw6_m=w)~uD7SD4HYM=eW-?mME*Wv%-f|YN7a`-_j+nU#{`S`7UPkrXxg+taIeM;%e z&p%%AVvC$LdG484?@s&rIosXuKUMXYf)D@w zi!U9rhWAA5TO8Z&RfBFn>W$^UB<AgAUY+&ggEJ)jIE3m)x!aml6jyW{t ztXEEX@r^9|%TM1nZQYT{7e7<_i2C^TW4E+Dd&_;Fj2iL87w0vcNYz z7<~Js*1r!JwCeN|9X~9dGw`y#&atH2Q1t2@=~u7+`iUc-x+Z7%b7}W1d;hi}uYCBg z=YQ&`Iq=KR?CtM=uw=~F?LY5&=JWEob)O#a&wXB5c;2Be{QlK~=6MSWp3nGpT55ge z#e1lKoHAf`sXb|^x^LFjQPk^l@7%_No4QaMO?P5BYd%UGf>PKV$pL^h4)7 z^2a{DwuuE7jsI-H+|!CKe(#BnX&-$u+y14e>y)i0o%zIuzrS(cOJ7{S<>`X&)wAx* zUtWIs=GR~Rhx_(t&V2a6bt6+wYSH`s$od4nF$o+0U#mn%-(1UVi?H zBj+7)(ku3L_b*G^IQ+|$X-j{y9wpZ$%86o^zIlZ2TZBKu##bgzkZ)dOyNYH_pLmqEuFIxZ9Fxe6S9kfs7MH>8CIrVc`MOS+TR22NR5`Ldd%Aq6j$(?Io<2Zr zlwFi)9y|?`&1`d4&~)I1W4;}z>q6M-`xs0o&Jjiua`{!4&X~v5obrTIsSAT|goeNS z!%0|q;Zv8X_SnzA+CMnk7vfwW=-kz#w*JF_=| zteEP>I4$X^ms|E6cmTh7t2EWk$K+cq&VhW2Ak~L)VQ&J(e=Wv?y%TpnAeCBz$-v%d z*=yh_{I16EHTXeomZ1ZO^1B?9g}oVsL25mw5PKKllleUrlWy5N^&7(T<@i)&AT=BJ zO@tr9?=s9t>}x>rzX+3ueLLZWUnz#K(GOZ_NgsG7ziTjjHGa@m^0P0$Il!Ab3j2C6 z4by-r#=eX2+|!Xd1+ypdKS=xs^P3l_Q;);FmH6%ao`E?C`)Uv^k$MAW4EAk=rvOu@ zVfMqmg80Ys`)bU|*xQMJFMeN)IRg7SP|EXWOcC~-gr^cy&&KRy@sO3h1|HAvD>1y` zI%qTT^JYcrY|Nq9*Md^sOECG^cMyIMzc0Y-k9`&K&*b-Y7_M+0)It2i`OQ1ZsYheq z05WAtU4}UWd&pwc|77e#$$y<$|MRhPcy!R~@R#&X#~g_L0Wb-(5R;4jYuqJ0=VFFo zzs;-(O_lWCgc*e=YV?v43jT|E1WE!u}#C^0X8)5qp5} zQvV_|dy)T*X8m7|oq8Dbrdj_|rUzqx7!?0?n6cQuCA`%Cc^Jxh&|l5^zXtm$*grDs z{}SxT^`PfKk*8ZQ6R`hIc*)N>n0;gFe*yNBaDUgV|2fzX!~O&)@!g0i!2ToQr93ah z&~69aXV(Aq*iXm)g<1deupfi{6;R}9Ic5^}9<%=YYyYpoU+Uk7apC`d(1NMOc(8wk zyVQRPCIkDeX8l)V&%yqlS^wqOv#>t}N`2L13bFr8c&Y#X+W*^T{g>fqB>w*nivLBJ zJnY{SUig(_GO^!f)_)E5(bzvR>%Ri~DC{qQX_y8~F?K)Ur9S&>|8JP}KLbAp;r}7f zin#$Z2K&DVFZD4Evmf?5%=*6?`^nfpH0%Fj>_=dK7L@Y58B>J)H^NK(_t*aaY1aR2 z{2Yq^$3ZFYC768d{~^58{{@)+vEOUf|8>|;!~VHh|8ub)js0cNfmwz*1AF(MwEvCp zm-J4@9Ekr1!6eK=OfL3saF_I)iy4Of_PF-{fm#0-;eI&o&w!HNn=s?C|4MkN&;Hu~ zJ7)dQ!p|Z2e+-oJT8tTo{RhHJ{hyB+f&Ct{{;$P;D)!IJ`o9$WQP^JshhUasCSnf~ zUh2QU_Wzby|1_=jM9<*a_ z!A!vZ2jL|@{k8usX8q5>&tdp~5|sFE#1vrviSSaM;r9PGv;M>F|4Xy}=i%oV{J#qB zfmx23gk5p}{!q)F(xiE7VUT5jWw0g1Vz(r7f0NBJgsYw$yr@73{m8q1)V_Ydk67`^ z_{01gs`>Cy2>#Of+nc|A_}iDi4E~1kw;zAQ`OD;Q1b-g>l8D1bd?`BqA#fRHInZ*f zCD$_Dve5FHB`IlPQj#^vmXw?{ASpE|EypBpCwY>5L?4MiHXY%#>`BffJ>fKk z(`O`yupDeT(sI1z6w6r4nS6oca!Z}%LCZ$V zHx{cD1dof?tp8;Gk!Y%61UCN*D=P-cq9iQTg4Bm`hn5pWvszpjMr4$j#p1)%Vp=d1 zpr!Wzhk=AOpZMTXuaX8NO{W75fIL|A9bS^2bd014jjPj@1xnh`_&R-F(1)qS)MA=2 zEtpPBpC`#`OHLUuFg111puvOfcDdtBz9l7}n38+P|MkOs1uWl$-syvOvj{QGBH-no*2=~`(XxP_Q5zX`(u(YLotIe z!!Yu#%#un!mPzqV0K_KF{?18m=4Tn%mz#i zCWNtKZorJeypA~t^8jWB=4;HJnA}V5#}G5BQTF*F2?*D zvmfSe%rwlWn3FLtVy?ynFat14F!`7_F^6Iv#>~cii`fVBSIpU%k1!`SBMnUDDyGYE4NW<2I?%;A{7V=lscj~Rx!3v({!6U<*QFJP|1_%R|mi!tLc zZ(t6=JcOBr`4?ty%pI7sFdt%0z&wk&0`nVY2xci}BIci%qcD$SF2(!@GXirj=6uZO zm{Tz?W3I(?WA-8kdnFCB+z#Fjo(Y}_egJ*|9uFQ5J_9}jUJhOk{tEsI+Ce*b3wR4S z0h|E71HJ+rF$ZHF#LUEegF*WR8em8^rHn?)=a=C&cX}Il_Z44HNlgO50ze1r|oHP9@3-o{< zu=XmyTFG+TYB0p$@nO)(l=jqX{Hkq+#WDtTm+_u2xQ->X<{G~$k?_~~)gsVR=U1bc zepfE>t9q~#TnD=A{Ys`~&EROzeUo2#LFdhWRSj0&;#aFdOM_pn2Rp&d;=a_cwu2rp znL)058S#Uz<$mP@y|?*QD_FV0uQHf+cHKcbz~;aD)h4h7>;x@$5tN#B;8&%f z*!7)XWim@Teh$a|XTK^3U4Qu1Hqf_=@;L&#pYjw8kWR1}>;x?# zzZ!WY_1HtbgH7N%uo>J0x{?Blft1A!rh_eDDcF<}P;0^30RgpBa9}`I{XEZ4N`8&K7td%u8c1v`gBKL+|C0p$Z-hX+(M=sq%_LSWl50aeUItkWG( zD?!h(0kt0V9v@K2EazHs0?G@zPY$ScVAE-&lXmCKB^+2=fPb)gazM%Qr{~OonhILZ zCLYiWwt=;C0!ls{URx1Rm7wd&fNB9P3j(SO^j;NEZkBIruMem~umC5p`=N9~f?gq*gYy#Vb zzBHhAfnG3;NvRLyst=208TkY|!3MBtIq3#Hw+7S>uo9GI>&6uUl?S@+p!~tkyNMsP z+!Ih6KrgrzY-yr?S?05>rar(*uoi4wL;k?#N2#wc z;(wWNpyic-S`Bu+N;!hgjmXET@Bw{bXDj&>d?TPXfo*RFR0rsK3;$r#mVok{MmpL9 zss`-(5PzWSC4J7_s6sJ4Udzrb%i{7(%kFX%o! zs8)*I1HU5jIhOQ;P2+;9UNAqX)`86hLA48P8y{3tC*ZFrsLH|S2|=|MYyn%qPOx3v z&wyVs{wI-Nu+ke;ji6<6P;CM|Q-UgOBKZPcpbyLj-6gn#ZPS7(gXLUzX;77cwbO&D zP3$u$FRmp@?7E3^7WbP;-&FDqW`nLl}m{ibS@*Fvxs*& z`2#z_TClm1^ntavB6nvK?`_mK*t~*z0DUV754u(bRn|F#yEmvxz%H-?wA=?D&EEU>oQKw}C!z7uX4=l@RW4)GO!$vqA6uK~)Vlf(>97*aSKsfFIZb%96YD zp`h}BjSmw)*afZxD<44)!4_~6So=8qr@{Y;pehADU?u1S7lD=FO0c$>e1e^z^E~*0 zBSFhk)C=eYi$NFY1AWiZe!yn19<)41I~8|uJ?I8E3;p?^>I7>+*{boqgge-@0l7V& zdU}=m02^N;9ia2|plTI-hjxAe>3NTM!OHjX2Uv653uq#^Z{u3o&18G;5u>t1Ni_O!Q`3b z1Iz&1z)_%U7jg}Hz*4XltOPs3deG;m{KY+h{sJq(5ZDMh%SdOC_(3mN0lGqzpV-0G zU@f>_?A^pai*Vpbum$vhmLAFz^n&$ZEw~D72AhSh&}Tviw}VX}3o*#Sv1O<@nztq$VA>`4J36Ea!Io^|0Xs*B)OOJ438|b4!jB25MWC-Rq}oBx_>juFlyF5M zRRem8p$nctymR3@DWpb&m7o`NO$n)WU?;c(Y&nyB%!BXLkSYg#=Y-T&uo+CQr2fDR z&{M*<-UKfoJm@Rqd&To9uUR3L2YP4o9XPNFYy>;O)u3w*--ZKy;AXJ)BJyz=d@d$E zU>Dz(YXh6FfZyem*8=hbdce_OE$9VXz%p^?yL8p!4mN;|;99WxD!x$%IcK{E9oY2mkP3laplbpAe?T6Hs^Fx|JN^a3*&vFX&F`Rx3aY z-`;8ieSC*2^BU?Um3uS6X0QsZwRfuxVCRr-)g|=3yVd9#`0v}TR)H;Gv*0l9-n65E1G`ld=o#6qwuA0NyH)me_#4%&YQfH<;S0L6xu5fT;yIOYpldAQz%Fnb=q~71 z#kGV3D?rNx@&h(cB0mf92WEmkZ?|%T-pSpn6l|W-t=5B{skq-jd4q1S6U+lWXOTb9 zat`?io#&FiI^qWl!7i`^bWS7Rpcl+o1Rb0TT1vZB1Ly&pK=*~*JGvNo@O7(2g44TI zC)hHB_?F;*X16Kfxas%C9ay@baW`LCy-Kqw3 z&FxkpuxlRWc@umpyVY8-4Qv6umlN;J_ypW0pz|)|0(65u&otHEY)Gw6PdyJJBw=xoIONzxBCgH@ob zxm&FRTh@`^TZ!j6(gj+cCtaWytQA~Oe4zUU${nnIiSoUT{DXyH6Icp1gOy-y3vwrR zFzt5ugD$WW%m%%$;U8=USBN{f25bX2fSq6)=zX2~1)D+l3f#dwunQ~!n_5Xf=zWv? z-GTdCv~SS!Hst}f{75>$rk|0+zmndaIrNDTfkVnRHfj4J!&1;G8}&QlK&C# z1APZ@_7Utlm^%^gBm5!o6Fj^}tpY2L=uydkqkfL;QH5aJs2;Ui>__*gcERI%R9O>p zaUyom=i?0J{rCe*z^3UvstW7^>p|yC!h^Noda!dA;lzD*kJ=8p=5W>$^nlI>h#wpY zHi9`|Ggu6^fj+PctOA|o@CV)CD$olygN1vY~9p!0g_1N4H;U?tcp?%-Ci4cq~CftEG+ukBIkpc~8rz2Ioj2YSIu zuncSjtHEZl0kkY6y`T%+40^y$um#)&wt;DXC*KXE6Kn>nz{;hRBUlTr1)a+%N6-bf zgFbLOSlLLuJ_@cNA7Ilxlq=}DpL%+X^sM0=G3a`Xa#;(Xwa5+VdK|uDe}eRYP2f(@ z{Uq(}aj+RV13SSAu<_|0RSWw5LA;>lpXB=q!oN#-g6{W_6VL}bpCsG|ga=(8l7G^;wH@p{mH3_|+-XW>gDs~kRS0?tm1+i^wT~| zocWH7qCM;jQfn=z?|1SM$B#Tnf=c*2Oy_v^3WQ)jLNCSag6@&<=92|hVZ1Z_>PF(R zjB_}bSYcgfJHz3!otNau$aOd;I#O{G)zE}lSLRnwCG#WS;aqMV-O&;gS zYDk&ja4#8<>&U4anCECpvfet_k(29i=Q^_Rg4Zz)=NLz7zTK8*b*xF6;Al>o0*(={ zQ~6N}p%~1CPy$|v{T$PS;4ITF?$$zhPjtBRd-EP=FCl4#+Uuqoy#PhOKsyE zu7>0Zj;tjqB&u#eo})I&I%TjB^(&?ZjLjX+25X)pV~K67!&R4TJ#(WJL120)LHj{pvi)gZ8KMo9A%b zPEInS!)LBt;%UKe>pZ_&!f$zm)(*{6=~tg=igD&^JG8X5vJ9-r z)R_ynBgAc@BV)Y7r3FyZ;=(N(x9`NQS6Zwe#w10yO)SOu-G$$;`ug1x>sOq8m>T@A zzs#==0~5+NGGoeifunh#_0@#3U0}BzV0Gls4hnk>$U05tF51u>+R!9W z+R&v4d0ubPE3#MjZ4f#>5A2(WtE}3uw7Sx9Mcb8*OSh{6X`Z+Au+mR{gcKmfk{6*yU^RV2C+!f<*J$t}|#2=5) ze9+d#(W;;|LwisAvgkHm53S~Ezd9`<^EwXFV*LWy$#0O`2<`=?#U5hjV@rEJXL0gq!>|Ay=byk zgo{-6?3mx8r`N(~J!cxUo~9h?tUg_iQf8ZQ+lpXyPRKmTa85@R!Va zh^69Br-iYHnHIA+NXZ0yZY1tJdlp`^NP8*aW=pteS(Aqv!zU3S(z-mR;{>q?L;qGnps~3=C3$nOejFB--FTKCF?cWqi0-aoFw|ylpwD!2+&KSGy z*E)!24QD#EZ0R)5*5&0P+FiJ9#*JyZnIGN9GN!mVlAi+mq?q65M}ChdpE(2@J(zOg zj7YY~ANg1+W1a?^Zil3(PWk~`kPbzL8j*%L#x8YPP1sR)aehJcowXH_T|g0yvy05H zz^(RfzxvJWUm9e*vqbnZ-Z16Y&<5xl{I}xYy9#}1_M^+J1=3!NBK?u>BN)!aHP|tB z>-0Dh8rFD3t~0T${F`5m5z=%Sca;u)(~&yXPF=eojmCWw?pKSuE??`}Iui&F!mP{4 zho6y6el;SJ7uu*PZ`K!#A|)^Ry#x++QVy#Kn|i-rHAucFU$Y$axXV@*Z7E~%SBRI* zVEJmlI@zobQ?3|;E=}$uS03y5gtCJcle*1FL*6-W<1*77+ehfSMe3}GL@ynSg!>3P zm9U;i{OY#e>Cj{LXgbEqn7zQ^nVC?y$JuR}iN$`5UDCInIBNdxSC>Z0HAbhTB6Fq| zDT*st3A>Z9&5!!km(u>?^-)i>T=Noybq^tbPcgPc_x9EU)=MG{gz3g*wunvCpwH4v*9&QXZ!V z3hbo`>0|8YB%~v=qT|!)>|HPVm9#B+M7FY^RX}@L2$b1UX=7$v*L^PIPwN$NO}&u5 zqgUHE`nM{0b;3*f2BQqax~D4K)#x}^;V<4* zZ--aI%ght{;}xrO;dORm;nRJ5Is9_=puN4yc`j4u>^5!9N!AzpDRA3ayNQT+MqySH zSKI4;^&`Kfyy~phv1ph=`<47JveR)hGGZPk9gyU;9siA-U3+M^dCfEC%#BI5(%mFM z##4r9xXeWgWD`gjP@^J)PIIK>bEW-_jCqv;wk-QHT)OBzjhO6 z{1}%S_1tfNnCBq92PHXHCY?)6lfhh}TqHSQ)E5^4?QjoNK?0%B_2?ry4!T>i|LIpJ zMA{s3-KQ_sWi`R!wJz$1oAv5MvA{k9Q$`%lcl~OE#AnpsbJFgmUDe{Y4!3S`o0DKH zzT_|47xfk{KVU(BXD>t-sXv_GWP$xypED!$k6N!bi(Q5dV!sq>n{@A_DKSqDj zpBziNHooSp&af&c%-Et%LNKqK^(jf2Z}+7l=IUgqNGMwM+Od zXw0$J;^i_Vjb}6?`c$IN}_>n(v82JfJDC>-vXRXFg~7$*;vx zSvPRWfQFQ%$;)iZt;YBd_m=d4I*563jP8w_f9X0aax~d&SuDXMR3HSGG99@e{qX() zbyGxkqva4+Z+Q-ntXC#zrN}@Dyei?f?SO!K)+|$VpG2=+Qq|_#r8Lj8C{C$;ru{^R zxG+sdcQR*=UqO}$mXyn8co!bT*?NAP^DAQ^6RYT(9k^HHelX*nKPeZjzh+6fP%m*J zm?vGD@EbiG{lz;9Dk5w2BZ=E|fuqr8Yfr2Xwf+)*4e(3lU57g(`jz$Q-SE3;P{QHGpYqn6MAp~BCud?n z1%#s4Tl9J-YgX3p!r75AU_1VtX9Rk!!*7R{7DMykF9a_$`9>0KT?z8*Vap$s(9%1nU7_^bNm7rpz@Oy|&2?qZBf7Ys>>G@VgSf$BN%Vna9o2(|=T! zr5?8p3EW7cWi@V{xV0s#dhOY{Kl*b@K>Z$xYc5euv|F2iLc87q)PO1%-qE_0weU&d?GqPH zUHEIo-)*Kp`cB${u{J9tk)QMfsMoW2heQZGf?3c;LkrI&)J zXb_aq_$|lpTKvApZ_A`e9pTs9vq0*skM>GCwW-DPF1p`v{wN9(@PDW9mi9NE(x&gNmYi45GJI5T=PR zFG^wSbnAUN+PQ5KD%1?5)ts)IR{XoC2Nc6U{YZYcx~Ly$1ww%b^(0sj5t@ot|?zMJhjECF@(jI3A)QJ&Y7VQiBjE6k5odnDCvR*6gx&~e=FXEjs zew+Q(3|;70rCqPWeLL>Mq<_)lCH8-o$-e*6gwLE$pTci> zr2pIutpwV2Qm?waqIDBDPSO4GC^DO%z;qlnu*jq_)bozuV}Cx5Dq#F~w6J4qFmAX& zt5`oEVMMs}yUge!{#C@kzBZtq;kO0xMTn){R2aKihK#h}XX?U$`bx@?I$3U}V-p6F5y>EioDBio&V*_Jty-V7X z$jUa{oV<(qJ-_7<+Ae52pvB5h+9Bw9-qoxkTufQUjhoH+XtUime_+CDMf)0hrWAf9 zyqoz>vcWI5U)KE{g=ZU#M(d?#jJd~3!tS_(_aS@NYjnMXuuC{kq|ZHhuTNMLGC(LL z>TU3H-5F4aM#`Cbjor^S+S*zpA*_EI&2+4tEjbx8L|SqoJ72vHC>b)CcPRZT{EtcL zr`&W}%{d}#;cOcvXm)veU$7Bg?W=fy7gnZDERuQ@d0C5F#=Z2xW_g;jo~V9g0`Xen z=54Ht$otnFO#ziLpr15TCg!=AB1enOdSk*g7wENuyu;W}dYE^UBXy<6?TOnUYg5UI z6Q<`ClFt?JbFB%e9&0#lyJ?4%CmT-*$}`_s|AALK@AFQIwCUaGL=LBw_rpv2t5I3> ztGolencrrcW;;|Y#@VxC-0Pp<9d03LU8K_;Er(t*%ebs0-{C88l;k?RQxfGsbZ`?q z+u`|iB>mB{&^kSqXQiA*OHdT!?AJP~r?Ewp=cs0OZJm(N*LZuOqq;2O%NVn}4re^b z`_8BfgwT<}Aw@j~mOgtlZdthfHIlYy*~X0pX7*kA&bM>OqOT@qc_W@E;|1y8))HUI zvjO!(M9vcJRTLWgs$ScY#A3!KACKt35d3yM7f=@pfk$Z0BN(qe&)Siu81asT=7F{~ zB9C$TjI9H9W9B6ui0A=Z8GNhY*Y-j{4Uh1PtJ7%PlRhgyVQtZQ)|nYZm!bnAT1v-* z*jPGPeUv7W_uTs|CKT@NG8v_BpF%^li-X zdW|D>Bam|C;wVe@I|22!8Q$F2W?mIDFZ0D^DbId&?>^gTC&lnu53jxVfLXtFuKPji zJjpg?Hw{$swhDgrpPJ)8_${-t-(dFJbj0SFV(V?avnCla($his)XxIyAAc^>tan*$ z5A0?QyBMCMjwU@{m}|j0f4UCiWZKMMr`2}tpR9M)z;FB40W~->Zs@no6*y{bwy*z$ z-)8u&`Hs6YcAMXPLqB#V*&a^ZhD9alb8DH$Ah-VxsQXPlwTxqqlz(CGb4B{-ft*zl zwH>=yDN989e0&*v+I9rgDcHl0=-L|SyP)g71-r;&BeeAYaF0i%ooihiZ6{hcn(f4A zeK29$U<4}sJK&Y^BX?QwTOOfx34ds5nnK$Klij#M%aVLX^`uQ9pH60ivbHYrI0}Cm zT>;gUj77^MX^UMS)NRdHY>sGqDdaqYR1m(JyEo46owr2tV@oIQ_#_3aE3SO){@-5IGE=Av0D!^%|oG z=QjLq!*5!oY_$9&Dr4);J|#@Q1&{RO7|(_RYR^d8<9O))Ubl1Gg$e43J^lIwthM}A z!n>*`pym;eJRZyAD{dt;g6O;OKcEV#5JVM;lBC13lp>;sp1&!rV{bcdK3tBSw zxJ;A0^;%o9-V+%V&`(NR%sifXoRvERBwczvVRB^srH`C>IhN9oIC%(O4zC&;_YUwo zzHf-~((T%MUEeI~a|~j~Y_^xLOeukJ4zVlmpo4&qv~XHY$&DaIIqi$yJYdvUME zAc)a5v$+1o?9Ng?!hX{465V*o3g32ex5MVjLu}du?k)#BZ6u#v%gs` zYnF-2hCO(z?a{>J7j_?vx!ex;WgQq)drR8%avJN^OkhQR<+BB&4(cu6a#vRtw7qbb zN7CemmJMyWnZMXRA-tv|RneLZQ`=heP1U0GUx!CviwTaq=f*no6KHFIk@i_6;$^` z%7OmP)J2iLF^z`Qt02beKDQT1kCF`el)KGxj^<7ziIZm}rU_aeG`clYUx)Ynj00^9 zPqdEPguhb!HALht(cIYRv*snxaUR&G{e|{%40qy4rnR2XJlI28n#{SN*mL=|)2)4~ zLhmhj;n99<&{&6rN9?|sSuS4dZE?k7&dVAIyYjf8df3cEY(H;1ld_aKD?Pnbl9Z9$ z>6VclRO9(=nXLB{nY0zLjFD=b|Hr)$_d~>8uZf_emYM^ z9^>fZMcT+H-0E@LLkK)V^FUh!O~T59s)e@SJ(tn2E`2G#9Q=$v zk^8B{j~+)D<>7^%2mLOg^N3C?gVqM^@rZ0j+jz9^*Rq+<-2DM`B8fs;7_~(P(dfiH zc**^H**QUVt1#Cxs@EE|j24NE>am#~N9425e@>!aQTXhFPs9JnXEb~~{M!bf@Y#^q zeH;omJV#w)NPKK=44qs{`0SH|>NLrZF2^b@qr!U?|4MLsSKP>JAKv7Z{ecy6y!Dwu z$zuoMw-f$NGyHNnv%btWLE3X%xyxD2I}#PU@ELh3`-P|U;lukSecr1OK6fSJBl)R- z&o20!XX=+e`yGspIA0-qaMCy;g(V%B$dTNkm~mQAJsFwb?q>e&vj!u5E2|k1W^4)w zuU+t}$qlM!{wrQKTXaYi%Pd#FuaigRb>#)sDz4z-S!J;}wU)8FjfS=znhc%f@nF2rwm~~e>X`mKcFl%8TeCeBJDRN4 zUG(N-d)M?heeQS#JlYD)K5v%8Dd}7TEd=dse#;~Jb_29R?rIz^1j@b6dX{cGQombq zE5_|%af@p^XqNChqUf|>#^OQcv*-ylDe$s zOY&QEUq3n*{dA_Oi{WdYi;(k3ynCCG_a^TMzA|WIXVQ zKe>-}+qpqCK~oGlUk%MQ&8$|B=;aISmpPopj?}gI8#xyJg1@b%u3Tz0-)DB)9uWP8Xi{2} z^mz$}Qv5FJ_jd*U!+xx6+se@k065l?6E+lXL7AEpL82UX`?78M)iSnnyLz+|RIEJEhH)$YB+EcPk5T>j={|GicmL z5$$gn!pSsCni|~=tGJTZPW`5h9=Q^Sbq!rJxb0X18a_8^X3hoXafQ2!x?E!Mm(K69x<+wFm&RP<`E!H}R$fVF~p(j@b zjrUuuwVEz&E1}mw-@$KrBrj{Bm0S^wyyqHQuW{oU%H1jlsL=#*<4ERP!haXM)>gwy znDclrY59z6xjXl|WGs|b?D!;BuTZ6ky)cd)rR3_hN-sRBt_`YZP1%c_hxEx2HB$|u zgCq?#_)Wc@F*(2GDaJHHONTa_x|aTPxvX`X`$RgAh@^S$VZ6Naw}6x+$ffQ>B#ut_ zWiJdG?=51_#O#FD32g(vEk61cPNH#|@?7aW#XY@%dbuI7yVO}W?yfqse=c)4#}hCM zdNK4u=;1RPz0S#1CWUja*RZScyNY{<0|N*c*GA*&GN1F{hbL}BY=T}VE=5|+$4abB zt9AZ~C!2eP!{Y`w(d~p*3(e1Oi90r(vS7uATl6fUc|I@;0W5By%}W^F=8UteBeCY; z=ELnksWW3;C53813tG`$93+D*X{o?p`7*{4{FX=h=2~d0p)D49nHE{oZ9?Q#oBti8zSlJ(lllH>;4QmY;tZG~?K_atWtU+ecWIJ#&f^(5)oiCb5r znHTI?82PMU+O0u#F~5y6VQjsGvvwXUJMyO7B2`j;+4%M1_o0a2=z6>;R5noilwUbv zHWQ{;(lbG(lQ&Z|6ZH6b5pI^-&2?Q}wne-?V`Wk+imbpcUD8;6YRc#j*WurX|Ia1< z3F4J05M7Aqpf=n_t_UioySkoa;4Ml;^1TDMSsCX0Y!F4(4} zoiCIshqH|O65gw!d!g3~9p2=Lwr|xss|B}pxP2*ZdJLxL9%u4)*#x zk!kV6BeWK1tD(7tfG$F`Epj(|3$#|D#pxEk-mUv*J>C^@y#WORC9a=9M@ybvDCNAB z>>UWNBIDi3)WSC@%q3RIvj_Jw+((JKE)zp9NZ3-`s(XdyHKlwbtmusz+*jhBCt>w_ znT)^A(Dj@DCS8m4_maoe_-n!6f#Q!xXzQVMKx2zrKQ8`nhPDgZeL~SP$OL1M+zTWk zW84?jg`cXsqIE5DmyFOhLJQZm1eZ86p|6Cl_gk<_I^EFH?+&Vk{Fb}0V%L8uLA@u) zwoI?Zt$aDhEo1T&LqX*bv>HC8@VQO+(9gx{U@N;E5skyCN%OZ}DP4j0b%bpp?8hla z*w}j>bl<^f&U|N>16H<^5_gf@wo;YY1-;E%HaUsL4%WvLI^^0VUBze6ew%{oqe!|~ zb%^b|wcP1301c%zF53c$m3}42BZ5S!yG4-jgZ!9O?G^j@p@|-kIcBpH#^ClBr-W z)ARY@IoR_}yX`0O;f2B(9K(z46C1y#Kq@gQ*4OzVT+RWHW|J0lG%r8T}EHRjF`G& zRI>n0ZS=p{`0K=*vGbrfetB{q#kRz4Mb8n0U-FrZ2ixe^BlB6U zw-V10N#D}l@RR;`D*RmSe9J*Pf1N)4?y%ldjT_s`Ipy)9?fPcdc;~taUg;n4eFM>{ zf0kF$cJ*%FDv{xI$ZhgmK-c;nJBdFeof6V$? z+#a&tlaTQS%o6l1x%O)emhWzXon5dqSg6d~!L(w%mMjPBkc7D>}jkNVQ!wm!NEiK;|HnO`!qjV80`z-3WlW$E358Rhn zC-Vl@%i&>$ZbK#bN&70gmgmE31+)xk`d*f(Zjh0Vac><$VEu`r&fCZo=S_Nu%|!lB znI^Ct(yIbE@vz;qm4MqzG1DC-8KgE(J#1vZ`am%@|2XUV+y|gmeFk{R6YTH1Ik*%RPnM>>?N4m`h>f?ACiDmhmzv zGV5lnoK-bFv0k(?)>0O+nET9G#J7|9YQHnboqC+8=L~3iUSAicdbDVa0bOijuEy^H zk|*Xr(obYVYlf!hOhr=0QZAg9Wq7+${P9#`O7XV~e?e)xtTV)}lf~&N+Z(p9oa*!2 z(KouUHC9?;=k{al)Jgn!9c@-ZH1fTkMgJkaqH7sp^wEvTnE74<6A)P(j^)giasiZE zJa5X*4ZBf9Q21+5?JIIW+2PW+osBnd9-2W30Z#Xxpno5W3;oCPa z^4ns4La*u7@UsH?cIaydVIkjr>PC<8%y}98)^mx6!MUOha%lH)Gd9M4b0q|&*T+Sl z-`qj`8GOU$d8xlrkz4liSc^>ENKx0xYdKCNzsNq%Y^5x=h|<$qL-I9h8hY6pQWGV- zEjKB=u8;@4&BixPAj>25QUWa$N2`FAmE7B3Ewrg|v=z{5V`ws$Tmx+_wDA&wS9C6i zvT1S*Tv8=%n{e;IJyX(V{m9{*;z%9E&rayuQbOtieoL8~;}-USmn2hA^BgYDtr#P5 zoo@MlRQiBWWKB}?BHxm7K|4u!@JJt@1Faa^J>sF?x-|PdpDjN*VFxuquMIDPSJOTr z^}EO>w>?U^%D7||^!j0Z<3$?E?&Hw+6_m-ir0=Xvj_>O6?GE90VMr~LGUBeLI;-tC z1cvT~rO$$mD84$YWGB6p_UQ|$Y2uGZXj#xk&j_hsWc(UV+~pB}yP%aqJ4#awS{e&a)zF5T zG^qm@v_;Ui2(8~bK$Z5=qfAJb#*x^MaKoY!e#!Isu9L~HLGC^`*W0A~XBZ#N6FOb` ztJQ>QA{e%tXoSY(MZGj%IU-n^TcNa_YKfl9SqP2G#8 zpiUyE1N4~KMbHcy%qqUm=Zqz}$orBFgsraPTTtdWAU5s#ED3MoS>@Gwxga2tHPhdx zABplCPbTcrDI{Vi^=0u<9t%TiqqH&7X6i@I6Gg_Po<8Rp(I_I9qX}DI7mC~oY2I@z zWqx0588qOx9KV^1LTY}3IaYK|WZnttvmGI6?yJhUq)lFS?E8{6T~(W-ywFjZ@2Hk@ zvXdP?uEQ6`a+_FbeW?Z%MtPOz4jNc}w)Njqzx(xygEM_%xIkd(I`FXC73QSjML zO>&g8LsdD>QC&o|lN|M|G&Ck%=I|k=qM6L0q?Wr1_^iJP{bH7Ntb9|~OXS|_x&gcz zlx*FesA)=lHN#`Y%~82qYAuTB0=)+!Gc2|idflOc+>6}EH~q5s7Mj-UQ8|p8=W00| z4;QZRNFX-69WUjVGlTkX;QMC$Hrkt6e(v7wP5hSOw++8H_VpWGq$iD1){XehUK&zw zSq;9i`IC#0zD6*j+dmWRybZ4_Jdcu>%OMeXt!KBwXT$Q4x-i0rvtQ;JL=jM`C(6bw zpR}2b&u*n`%|2^4?TQ0|Y1Z0=GCILd*J3GwSH)c+^|V>n=Gik{)=_yk+kB<9$5A~2 z`58|x#u&Mf1MPj+_w>6-qI=iFfAig;$X=T0na$8r?+Gc3&3sV{_Ioc!rB(Rxek0KIOLlvoL9Jt(rW z0e)*945_cpI!=5(P#>F@Ye3`sI(<%1+J$^G()(~o{U~*%%T1rFW87<=6O8Ip5uN)J zDwc^x8}q_z=OZC?%WieOdDf`WZv8T$4CU!Nj#t4e=ZR3{+YPZ}1=~n+WDb2$e&&Tm zdZj|QqpgI^Y!0bODMnexhLzjp%%Hh;^r`uKtlc(Yp=<#d?ys};ise8>d?Pfl#EA6(#^-pUx)^aw$uXJ`^=3BSZB55-|NmJiz>6ke8 zbDbcm%_N#~;^}yk??OtPx)0 b4npnU2&7NcFfEzr`3&(lLFvZCBO|Ka!z7%S3J# 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 R?fMbsuig=n3NZ1E^gnYEk|6*9 literal 14040 zcmeHOU1%It6uz4uo7$RXQwIyvNny%J}t;vI^Oefh%va)~9PUt2N zb)g8>Qs{$pHkc#NbD9gRfJWerrmd2^OTtTHhwy-b7UX;RvX{M;@m>;MQb*Vr2Z-?w z5RY~FuML;^pp3WLbvP+{0>upU$uKXuHrfF;6Pu#RCEUI;k*;ZR*qOB zRofcP743X(%29TqGLkEd<#WT`mQyX4T+hjRPQ@E7Dp~Fd_X*bLyj;kt+z0TV6Mt)O zIAQo<&+QHUtT~@M+Lf4JmV6MJkNI(pIj|V>V=bbVMy-HWKr5gX&C-u!3g=+8}=ojLkt)5U=3@BES6zxxmWM38P*oKM!Lf%Oa# zPW1f1yc3PzGCZ~D-AkoD;69aF>(8azYh37}AmyJ9@^^mBuyrYOY(8`0*S(nwi}jh* zZ04IKZvzz=kOEEq+-SO;#sQzluk|<-RukKXGDmwhayN7AvbR2Syr-XxE3f#zeECjQmK6qNaJz4Tc>eRknQ!xMDMksgr(JbT@=0$KsBfL1^&pcT*xXa%$a zS^=$qRzNFodn=G?tKZ#0r@+6l8S}p1OV~*`PN;tK{Td@R{%w_8YU-d$Ra;VR>(?~# zZ?w#PkUrmE^Zno_z~+|z=GN!a>kc>7)ZUG|9(lauA?7ik{)|^M$YUop=DbFqDvcTa z*2w|gv;tZIt$U_NVgSrrZ#}vE-N7o|nz0!5(z7r)85V_5`6awhsz&o1OfXxx&=6=^uzvz0kqsVH-#R46z_FR8<=+PqG9EnrV`@;v|}Q5fq4 z?#aXG^8anPftMVAH^ulIz{mXnJjrBg*h>#S)^#7n zcuj+k`wNKsiED6+?+IsnKYe&^;NyM*;(kibALH{rdajB48Sird@!X)4prH=z&!`jU z8}d8?iivcTjque3zf%anf8%Ep{9YjdzlufyKMK~-LCKpv$8 z4L0x;d3o(%d^{)d9?&5^IcoU+01wx}q8O)ukM|$uXh#w^BRDP}zz3eDP@J!NCATv~ ztaI^3-*4c5PJuWd&+}H{BQME^eV#g;gZUf1VZ>O4&tt{g7i6$c(xVXg+agcc0Y8oy RJD$2<3eLuz)CUjlzW~JhZ2JHJ diff --git a/build_linux64/objstore/amscimglib4_bitmap.o b/build_linux64/objstore/amscimglib4_bitmap.o new file mode 100644 index 0000000000000000000000000000000000000000..c6a3e28725a77a78e3689fe1db1e3a3515e85295 GIT binary patch literal 8648 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 CSrt40 delta 251 zcmdm?wSj$thPVME0~|PjSq=06Pj(a%hl{EMML5tz1z17q48ZCl zgcVp#fjq{^irm7CIY3exWSW#KP>dajnSdA>6fjJ_B&;^MLPSDz0#w`pN`tInn!Hp* Yo9h5nM4VyrEfF)$>rigQ<5KOY4IHUIX3l= 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 sXm`mi=tVa*{m+kA z_h6+`S#qz`>YbM9xSppMYoww#@XY5`4kW0v)=hzLxWheh4ch4#Grfxg#6Q@vd^0yqDPmBZ2Vj8|5j7O;V z_@w9_XHxv2Cvx+sbpNbeLt+vSev~wVXgv(-rL~R;Le&_dnn9?OU`InU(Rve_Mu#EQ zKF1AcHl)7}hH@dr(+q{bn&Q*vUFK=Csnr9hq#GH(j%eZ`Zip4@&{sxp8&FSu1i?_n<0ETX1G z`pf<$CjAAMFd(*^A$*;7Qg-(2U5w43j=UlC-*Ar0C?N9_zm5jg%;taK17${mZ2l?+ zChf1l1!YgPKgyMS;V1Q`UN(Q|E;%SCP-#cm{A0``jL1vQzdpi_&-ygRv%9C1BHw@T L)2C{1*}u#m-OGzq delta 224 zcmaFBy@7p#hJ*nl0~|PjSq=AUXl+LIWtx0i>BG`?6|t W9)OC7O>Sg0=e!2xMNDpFmInaJ4lyqP diff --git a/build_mingw64/libamscimglib4.mingw64.a b/build_mingw64/libamscimglib4.mingw64.a new file mode 100644 index 0000000000000000000000000000000000000000..223ae182609ba8942c2704b62eecf3be53a60fe4 GIT binary patch literal 8938 zcmeHM&5s*36o1Wj+a-Ke)e0>wlz@uFp-Lvn%xr>IRp|jZa{+|V?2t^iBPH1=8L6Q{ z96535fg^{W`xo?t_7CBJsvas%9J#@J_Kf4Pow3tX)QzR*&!5NR_kMo%cs@LeXM_8< z>#asPcv6w)<+#x}?D;w3xDEgZ0J}c}T>1-O?;)4^-vA_Ue#7PMKLALsUgNTlc#?OX zae4Pk0FvuZxZHRPfTZyg$te9H9?u8q_ylu)G)^Zc4?;g0jz&>BiN^^<_mg-St%iZz zJ)6ao`Sf(2MCmv_!OoaYqbh{lHczr>nl6%2^wk%4KQnYz0CHb8UNlSQ=|j`7rDna~ zBza&Mj(4Iqy~n*#I{k5FAKq&2wW#d1FpM=!MoG4MR(Z2N+TgU}6l!X_TwiZsk+ib| zS1>MVmAz@HM%ObNUDq@9qUQtCHOpXBgU>OxZnsv`v<}0yEE9w>_qjdp;42b$nPswM zk+D3FsQyos1DXZ~N*drD=N1&4CcQmJ`AEV62+Ify((_)R+%n^Y1qt^LN@&J~*u+8u z<9~TpioLV{h}iJxkyI(Nua|aR^%TRcMHb^LXC0)^LiZ#fzQd)y-{+t`K zcj0WyYuKE~BFizbz%-YUed~S(!&Q7+^-;an+gG&u3OX)?4j%vCT5x73-V| zCSMzb?VO+F3C<_q>Lsfv$J*SMWY10G+XtLj65sCRHI&pK##rW?GBcfSD!}%!fouyp zIel1SWm}+owQ<%fzyt9|K=!Sr08~W7!qS+EpyOCgG}B zcGHa0Sk^S-1j`OkyX&%S&tMPwb|!XhBE#^ygoWkaDW=cf_-l-HhS_ck9QMmjr*w3d ziDuj{1AV_dZyxNj!4mwAg>!2Y`9+?Z!jfN~@(LE$;5$rpe!1K$xo|8jeFSVdMoO># z2Dr4s8Vl^XsXpxGIcB?sbl_OmTkqVzJ&ECMhrZ(T>)Vax*vp;7-0rMhSmv*H-uL_3 z*X4QJEiW2a#;*G}*ppo+2aRF5TlRPbi)-*Lruy2k|KV_9SWn&_?PvY%c?_*&um$@! z^s4QZ{EyeF56ZmN{ypip*E{oX@5pdJlsTsSMnrG0sb{iv@5q#y=~Pnz4r~k7JN<9j YhIi^R+ms*AuMpdmndxj(0amvC4^H76w*UYD literal 0 HcmV?d00001 diff --git a/build_mingw64/libamscimglib4.mingw64.dll b/build_mingw64/libamscimglib4.mingw64.dll new file mode 100644 index 0000000000000000000000000000000000000000..443782ba3ad0935b7c8f2fe45b8a70f0a3e8ceed GIT binary patch literal 43008 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%0DR2$+*r(CH8L7o`ZQ-?xEoo&V))G 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 literal 0 HcmV?d00001 diff --git a/build_mingw64/objstore/ams_template_cppdll_src2.o b/build_mingw64/objstore/ams_template_cppdll_src2.o deleted file mode 100644 index 8b5fe1544c5b800770279dc0c07a2b525967cc24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1765 zcmbVMO=#3m5T0z-wraIS6h!<9C5P48G|kphdP;4jDXy|$mC`Q0{mZtI-EG*7ZP|ke z1tDOe2hW~7+q2-IqBjfPM9`CXQ1C2xvCh1gY?Jl+zCv?~h2*ZbmO-g3h(dCPXlyo%tWZNq3+&-UDWwh>I<6;lDKD&4I}$o`IyJh3Qxg+oN^0u%-OI|5 zKCt4{(}rT`hM^A)rO^$_fW7K2HN3IDLakYH-Ey_+*)_LX@N6bLcG<(VRO)>|r8$LP z5-zk+AJ@s&)kaqko#)ypj>M&v08lw(js>DWPI4O#{D0vkyUg{|9MQgnjdmswd4yN1 zIMuN1e|7*C=xE>;4KaBTXtWktqI0HI2no@nKu>}K2_7e8?9NXEC=rL_mpIbOgeCei zPzYHHYr)BUh`tK^EDp#OeG%y7;sPoaD;QhJ0OhVzP<$<>MB_xPS9qEh!gGZ zPR^k^$0gd?yap2OIWEzzK8h|`qQ0iAarqsnbgN~FZb)3B-Ar$a{!1GB_) zvbo!73}G0e(b|zjcNsU9DZxKG@c)+0m{W5ZV}(+~W6n~M(W?TC)tvgm3R|v-V}ZXL CY61iR diff --git a/build_mingw64/objstore/ams_template_cppdll_template.o b/build_mingw64/objstore/ams_template_cppdll_template.o deleted file mode 100644 index 605096d03d45f4632a9968ee930be3cecbd9e9f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1459 zcmbVMPiqrV5TDIPqs2l*Jopdxu!kzT*=%YE;vuD#ZZVbxBa|9=`M0SH$#zNBw&WyM zggq4c8N@Fjc<~ldJoy0xZyrR!k092W_jZ%rG`)0S=kM>$ycynX`}G_UjZy&DxRwUZ zxA%Om3zkLkRsyIYhKPg$R$Xg1{08@&%*tSmwB}%NGD1XNATGC^;?f}|%23Yg<=o=k$mEi6S;V~xu`=3()B4FqsNd_;`M@e`dr4dxakr1*FrSyi zQC%HzZ{l?U?^i5hWI_t6_mAbX%I3j5fqoM^L|UpoHuwLO%!8V`VFp!oV=egl0p|pj zU`4H0f{Oag3~K7a(PcWZ7JRD&Kg{6cFS5-2&!wkJwNI2MA}J$7rYY;G5g`Cpgn+6& z@RiPUx8*zAt~Li$f{6MdT3uegr!1_lKe?&o^*g(cTQC$uHw-!en8c>g0a>EiMEL|Xz9kfqXJn3V2z5LQL)qRDLpp<> zsKrgrqN-m)*V!>f%#hrKiNAI}O^M!nlHxC&W-UuJwgYX6XR??ZcN90uyeYLG3N9<##p1(_nEWZWVCz0 PSkG~{cG*rxG!Fj(8j{CT diff --git a/build_mingw64/objstore/amscimglib4_bitmap.o b/build_mingw64/objstore/amscimglib4_bitmap.o new file mode 100644 index 0000000000000000000000000000000000000000..518a960d8888162701e6dbd9b40d81c183f1fb88 GIT binary patch literal 5856 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 V$K()>Z~8oaVu^U>u?6^X_CJ3<)g%A_ literal 0 HcmV?d00001 diff --git a/build_mingw64/objstore/amscimglib4_image.o b/build_mingw64/objstore/amscimglib4_image.o new file mode 100644 index 0000000000000000000000000000000000000000..471c9869edf1d205b7d51093148dc70f28db2f62 GIT binary patch literal 4603 zcmbtYeN0=|6~E7ZfY-3SB(QW{^MN8Z5h-DIR#iBeCO>#iF5;2VK)Oyz3dGnc69gAb z>d?frGp=~Maz-jmViIe$5ADyf4;5vTD%rRRB-twJOo_5gYxmEFmTl@ZsZFyi?04R? z-?IZrJMBsMo_o%@_nq@Q=l?V_Qr~W{t6MJZ8$)PxMoa?UWe1TW!tP zW2j>tJ&k?6vECBDwZs7H$TS`s8ClC#s(Xq2;^iAY2ZxzQO1&5hFmIqSTJ9Hzi@XlL zpSFCrVj#aSJyE{44%5@{E4>h3ps{Z_9EzO`7xg{Jb!L^HH*@IgPj~X<-x|2_TjQE$ zUJ`4wEZ-j68TG{%Z(TmcZVJzV&B>Vw#BUF-u0 z|0ED<91!+diHLQ4p^{>;GGB0$?8{jD=ORw56u){%?Q$@G+qhoDdTN6XTNuKG#Rz;^KgZ(jC&$wdSsx z_+rra_x4a8+bi2%GH>MnLn4S9H#Mi_?~_6k`(zYmT9=k@ZFO?gl(}jN;A@k51=FP^ z|J7K9>R%fFi<-kX-pWey_KGs`Gu(tH6CS2a{KynvByk#|aHE}ZHqM@*NhhMs zn!!Fl#l_QzGYc4NU0if}w8>f*9PEI&cv%VG(TBghFFVvuFaUl z1}<7@(ULTeN}mI20DAKVWFgw@Ca_JDu$ZvT3pe4!1;SPRnKRXB0HCLQ=Oi#QyCeA# zQfR}B=;Fx|y7=sBx*%{$2*bp@>F~2TTQKiK8}0g^HnI-LFUk%GGpjWY+*0}Yi@{VT zeo{#Or9@Qot8(I-grAO+AuVO!bMfgQK_}_JNE2O16;|8QB}tCSd!NarDYJk_^{CPk zRyL{Fu051#p6p_7UnZw)V`gx<$Q1fX9I0>8@e|PD%FO_OVg{&8zDDIn-6y{bfdW;| z3P=>Ja`t6N?Ktk6=;mBJUyNFrlPgt2;;Eal$E*-bqEnSQO_B_EJFK5y+v-vc1lgX- z#~!CNkOGlKF$HC=%jH&$jVKWDHw93oE}%ov=h(B-qI=pNYLoiSRB5~4s0%LgyOneJ zksh|*RmbT%yh@K#ZmH#jKsgg_bR4`Ao>~;6JqEZKAQl*~$iYY93aQ|3ed#|r*rbGaDJqzV_SI4F6GBTVcOvr8FUkFghj>!FKc{5iUE zGvo}$07~VBOyi?6WAu7ihcRD4@0*Ohhw%j7Zgj{|j1j!;A#4`KcpN2vhGdL=c%SZp zyuYPoPhG?Q1BZ6h`MkTLLnHn1y4~L0yS+Z&mtkggyTbA4&~R+e_TIsfQ2*fZf&ODp zboUST9uId%2Ku9?wtt*Q`~e=v!?EsYe>^8G}|U`urTEx#kS6hKc{x^LJL0$}t><3=<^2@6<_ zsiTiE%Syd!Nwv21bGDA6w5)Zuwcge>*wRkhN$9cjZ0mrni`r7mwl+rk2f~=qb#Ddd4fVkb5dD;0UntBZ zR>xeXPnp@A?8PtffazmuC~jf{M>7Zwae|{sK|{>oXl9@xesDDBp&^!VG*_V^u5dK} zAPpG9(a<{{@rI=-{W_-v+!FB#^?-Agewiak_&BzrRQgqpu-En}`65Rm@S%E?U!`B; zNDV%5{L(jg`L(qW1CoW$mU1IzrC;Inne3L1u8KM`91c4RQ9(A?J1{U5D(XnH1FIT` z=|2SZV`F1%6?Ha-qS4jbZg9dHT8m89Fjz#ihQZ{pwe%prGWC7TS!OGz-ZE1;b(fi( NCqw)J`ctLI{1>7Dv{wKC literal 0 HcmV?d00001 diff --git a/build_mingw64/objstore/amscimglib4_jpeg.o b/build_mingw64/objstore/amscimglib4_jpeg.o new file mode 100644 index 0000000000000000000000000000000000000000..ef485abc183ba3e79340e90aabe3e2284a2e08ef GIT binary patch literal 439 zcmYdkV_^V+D?rQzX0bBpm84dbfZ4bS1%`kGy_Cd~MBGZiG7by@2lSGPiwP)WXaK6y zH$hdU0OW2#6=DFI=iu(_Y^9*#?iZ@5U}&IQkYAixpWnQ2=kCxdW2io$;TVYQ|Ltr9(as^-1u?i^@bW&4=XJ{;sQjEbZF`~r-!V^mPH zqn?)x1eA)S8i?sK$($AUSVN}6rHol?MP|B7f1YpK%WyWk52Miz)72f6I3r)Fqa9ve v?&8eZsV!nMBqT#K<$L-cVIAZ&?~@H7XVZ@3#u06K9D+n6PPXttpKEA zFw6^Za13<}@o0XdVR*@L2NO_@XXlw0ARRuP55csn;Q_--K#pVQQ83@7^MyzA5e>%} z$JoOYfPj&MnSsNJBg!CDSpBJVFbl6DnO1~ zR-hC!SPiOsKsqd;+CZt7nNb$XLr`hOsj1m;F3|4`X(g#SIVd77K%QO^C@rZ}RaG%0 i<`ySs=BDRlCYi*SmSpDWB^MN+2!evVII}7hSrY)!kzs)V literal 0 HcmV?d00001 diff --git a/build_mingw64/tests.exe b/build_mingw64/tests.exe new file mode 100644 index 0000000000000000000000000000000000000000..092ec74c2efa4bb5027a36964821ce6cfe8cf62c GIT binary patch literal 296804 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%0A{#d}9B4ksVnhjUgin(x*H7z4_!8U* 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.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

dbZJbEm?1Qos~)EeVE*rj92d^ai8 zJ&ra{+=0Eb^qw{ro7H$uWxX2PG4KsTQ|NY$%A}{$!7uHD>{8hp^yn5e@(Ao~uUM{j zR@>CDLkAgS4m3mQTDUOGT+VGmlvw4n_rZri1aC@qED90O}fo(G# z5)aSkkT{h>B1NtQ9HD-ZcMOb;sBnI#+Um_=-QYT>jAxrxwRQrF?BFwm<3AS13G2>u zf3_!;$G1@iGI%GYz52ADFNECwu!~8$919{DoH8RT$AU=uQ)6VHIQYgE@bZ#-Q?_piVUGI>U)PA}vonJymB(tNzc z0mUJuIE?G~BEW$fs$X%5nWAo}yfiY(;%dcW*#sM*UZWUngS<*H$^exAeEm<cku+V$>6_C! zLyr$@IlrpDwQ5y;jdKI%N4WeP>h`!+)HmEwwW5B`?QUCr)2&n5>KEMNwbi%mPqx)B z+gE*Y{h@?=X;p3gvbIO+TiPD2U(ohgeN)?4>gTL@qP}6pll3+0>#E*Xp*SMnp++s= z@tVDZ_H;r#BmawIlsE9RX!vo5x=?>J)i0-C(n}X~C(p1^_@E2*hNvE`VyS$D>0YZ! z9jC3nVSiOy{hWO+X|T1nehxIy01ecvQ7R{XRL|j~eSH2*UFGB;`18P*2XW-3&Xw@z zU>GzHWQ;+79?I7MUmi7B#Q11u2mEAR-KEr8$JxMmd6xTT#8mXm|@H4JM$E&iPe#RT&!^q>Qt+)j5R_ZsmP`}wv{bpZsRsEhs z)qm8Yw>*O0@+f-CV`#uv&|98Rz4qcVMeB7>-Uiwvmz=}>g!#cfw^Bd-D|bbG)16aR z)GxThTT$O~JN46Bs@v*Y_t&)5uh}=1*sqzEbS|rXr0vnR$5uSC;>i`?SnL<71Hvw`!(ngKMwW_}B2I*f^{vw~BOw+|>>5-kE0lsWoAEds5OX&?xS@ot` zqmu2MTvc}kr`qbu$+-$N@R|}wb|J4*RDFBgLiX5C_SomGs&B8l0!DZQMtBrPcuaFt zHK-pDou(!okA|5J^n451e?QULHwB%4Q!T1Lg6fZ=|36k=v$C%0vJj}PPQ?+TH_G(> zmrrjW0x)&L22ertsG>$vaxGbW3CqzkSIcoYRIi_rFRH7$Usuxz<@7`FcI=GF*2xJ> zPv9-QrGj7gsY~GP3}3@=(ht!YW%vPxi{JbDsd{rj8|35{*RAt4MgXcx{zdd!PuA_c zndy-$kb_D2Aud0|FYhG^Qtr&t^{HRdMfLjv_48c5Ko?VaH`SkqylM}Z-{O~74XW{U z1ECqbmQysJzYXBQWoz2%-l*`(>7V!gw_%b&h5B_I>FH>E?*IfSmH>`ocYR6f*Bh!5yzJBhcQdrGm zlL3!(2M(^CP1)-+m-VV|q&q9{y!U0j^u;k}Q>JuzPJds6zVDF9m$HL7{;WJ{y)?H9Ra;1`mB_cV^__X}XuBEtltreir)|*JpavM_t=`dZ4A^Wxe>KX<@he z%7&vF8__2lGgRNm)C0BanwR1GLJ%R>x5=^xzFP#X)9>@>gJ*5dr9%VTGlk1~J9ehq zay>++=ooL%U;K4e_4luoZ_whvB->qdj9iXty)vGdgua9qa*Hy;Sf60nFo>t{3K#XK zVT&v2n;=Y2e@#Sb!(vm&^mY%zKOK`urQ)?7Kh4sh4?%CCmNf+V6rv46S zVvYJDjnl8(8cx<@y4~gto4Wa{Pk>pwZ%zt&Z(r^E_!amK=}@}A9iIe6KZ>GrPbO>W zezsCIwTPVhP~A>+E9`Og8s>U**KIzzcfu%oiG?h z{1WNWVK-T8oN{FW?hReA?2g56bAJ(eZB;{bLngg56Rw8NkST_mu^O2fPW!c^4FBvlk*Xyi1xBV%1DW?i|}@;uc&Zje*N+dm><$L zhwlleLz1U4Xo~Y6i4K`-X>9!ExwCVC6MxN%f-0xwfTXAMf(+q?BU*zO7K1hQe$9$(oN&43e zL)#O~b%qhhsN)1~IAJ`$aGV4v&cN#)ZFaj>l9Z~8KH0lQy>u~y~dd5ieGY4 zs3)8&BzauGI+E@)%&!O=5jDf|Oi75Mo@CKnr=}(1QBFdNm9c#ujklN=^VjcXVkVS%C{{>X`Bv5y;7<;?RRkUejg;sj~I~DV}QO1kuD!ik^!A?VeD<5 zUsIB@V;4UJ1gS`kgtJkS!O9yW?h;?QGp=%H*~%?Ug-$=|LiCs9J2eFFl%UZ|avxwQ z5GDBu3z0LCTa?qrI8Ga5IBksMR9+!bPMvX_I%7C>#&L>jk36%BTPUOhntLl3#Tz|g zstR6}vp8a)cowE1Qk7W5%O`T(%EBa^O_G$#2!+ED#xy8&aUJpdTF31i;jk_+Ap*LL zUFO!wa41NU!c;3raEkB7J5s*`g_w|I2a%;aC=6p%J7#DsG2}>&w`9gw^2Av(Lt2T4-Y80MmRhyRM++Kv7;NmBHPPFXszgBcAOhH;&& zN*hKf{Kh9L$r-F$MN~3J85?X8jlSZ8q^%-CO#iNO{*&>gUX`;%da-G86f5DROerUP zB;Q3Ny}!!2o0~Su_bTVC7=B@_Sbl=!cdrA4iUwQnNRyj zf&LfM0B1g{>|DOnj9StXZDQ6eK~l7BP8S9oNy>>~!r7+F%Ky!C(R=s~Dw51{GzS$) zmKdamJjuP&N0j7OEJVpQnXzM=Bu_P<4oTi&K;xEP+ziuBNs7qOo+L$Hl78a>$-UP| zzgdzZuSS%dhzyF76p_JKlD_nj1yr0BME@do!Z8ye5gV>5Ns*ZZ>ohHRw`sv9Ns7!G zQF2R+W;aRlA_i$h$#wXMlH6_~O3rU>Txe&x_LuiD`XVk}@G%imbPJFqMYnLyDC0OM zVXFB4v?lNTi0_!SNYZD0MU?dw!spFK6IV#`b^~gcq_2j^u7?gOq5?59^>ayo)yUQn zZgAWJ+i_mt=D9`?nUXRkeQW33RX%-5iq6RD(LFtjigS`*U6OBLP!-;OAn7)SjZIQ& zpwmb)SlRSoTMW)gjfB%JNvT}z{Ku64ocUz@zK9T$N(rY&l2-l3G3pB)eQ)3_98;3} z3}~Aq#rRq^l9TB-{9Kas*=f2!PLjXS5MIAZt|pX5Hm72__ul$DFAd2{7W*< zoB2*1MHKs304C`t80I=tUpXL|?*tGxT5PHiSzL2-MPY!5k}eIjNz%gxc9v1xc=aJ$V5ARex(F2?v5a^o zv4ey;gF9my+!@#4&X@*w#x=O}K(xV~aSb+8GHIK-V=ITf zV776PO_Ds;fI5!jq%ezFdf*vFMw)Bt#Z9Ob-xpbm*~ac2lI$~}O_JQfAnmD=+wCJ- zZ9)bm97B$0q=kH^zAb6F!$l;y%+TzRWQPH5jB?%>=1l83y5@!WA~pz*HyDELlJt3W zM0rG3#Wv48XJtXxL4I<`tE7^IkA(WqtP?VKFpyX(Ah z!2!t#bp)=kT-8P@Ay$4iGonM4^HIJ-en}oSpiW87Vo7x52=k@9JgxAGsoXJzD@kRr zh}IOOI!1=o!bpiY;$bAm`7(1BnXwliMLNVtzL+uW!j#Hs@kI&dew$@PrMI}z6)Ob& z_<$}Ms$&%+1F4S`>AVR?C@p1*w;*GFnQU;fDI&hlxfr^Ngl%>tq;ka;Uh|N zk%h=S0yo(!kuf9I^oO`Yy`djj{3e_*rTFIJF=BPev+6NXBjFs$NHRtt-pmnYa1kxW znmBzn-(zKWoK`Nr*hiD(Z44^sR``%7WB7wzha{!)k+kP?vKfq!IVmD69!O_GZ!uB` zgaOnygX|L~JvVf^bEa5LZchwgvL`HPv}A-=b;+_Lp6o4Sl{ZvV!3zvH`%&vKSC%*pUC|J!{35#OKZ`_K9QZ+w?yONURZ!t_f_cNgE~k*+&AFEb#S@P+Fi zX1pKs{datSh3|3}D94K7`X6ICKgIXY^8F#c%h}!`&WG#c(|PJThwtI@yf8jKjc4J9 zPw~R|_cP#Qd_Tzdhr)=QU&8(&3r^_=vhyi^w2|?`WMpS_3zy5det#K!=})o=@+9MZ zw+#Nv443qp#m%*0@EYDznYv%hBzMso?dDPM8^yk!MG|=3OA6cMc8vp+A3SL%`z{@`Lhqf$o z{;6`49;ZTq68iP&-IMW~#EoO-pI0Mo&My*?cfeZZkTfJ)pS2M&$S<#6ctT?PF9j6B@u{x7I?s6s8$ z2CbJL9s`Hw5igE`LoxC27&sIc55YR5d9cN`2@ra&8s>o9&HeZ(PtPvrX9hwzR|Dro zQwuowm06+mvcb`{@L^Vrwwexp5JNw3bLh7tKCgbzX+bUA%J%oSp|G_APBSQju)2ts zo1h<|$a^C+ytxNI0@O*>N;d(5p{sd&u_z#Auf&;>HTULWpAeXU7j=_bQ%;HIypKa% z+ypJEW>JxKeFW_y&!m6hSSN^|1WwZ!IA0{?;iCBBCf>0N_Eh=cpT`+zy28nj=#lFg z#+iWQP&Zl5zNRrw1Hf)# z8dJ4#=m#wa@sA4Kgscc{oRgT&5elaZjEJj$$%s|}h)1;Dee`?Qg&5hkXJnz{ECL<+ zWxVpiGJGI*J9hwo#~I& z56N;B+N9;7wi89$7KD=p&M@xfbVxX~X6wftH_%c2j=Zaqhja~CfVz%uZq2{#o3)b!V(VID-YMx_L5aE zmG~Fgq6=AVizcLE7($2dgL<_sj)}E9*@EU<+7@#`Cwh@BS}NE=^!yD})p`zmU5&|2 zM9<`7TF+5gqI!mKF&F9iG3>AFesLHW0E8~m^ZC$^)^l^HRA))gdypJU&kq4X>-oZ1 zI;2C2EhI&pKZ_1uK)KeT|Jk@8L7Kg4Uu}x_Rh}{W{!B5<_6_l8U(Zn;ik{n1Tl;ei z4$m0x0S=l5d17#Q#&|EvsWfg(X~q|l=5?-Jxd7!9QOnI3$)+E~GgsQCWYbZA$BJXWH8#Bu*tQOdD)k+DM_U8ZZi2ihdXe4p73@wmXcqT8$m=*JR`F?x zZ_uh<`-cBO3-Va6X2Be(^2G!gI+grA>U*!`bp%;E8N69{6%LATsnqtShWT))zZ)oC!sRV%GOFa z1%HP@Yn3R5+OEcnRa?6(I>-br&1+Sg(R|#TP0`t~6#*q6bASkvEOXnkN;q(-d0V$` zrFN56V%Mj@L6N%3;ZPyd&MCY^aWh4*-+A*1x1L z(*qhh9tOT+$!OAd8dPs0UVeQ^O{DMaK_%UH(14hW>~-zi#a`v(;px!fSn-fz)L8NG zb5QbF@$kh8dKMktV00Mxm?yXI)z;w%=xQBC6{!2y%B|!(e%!F}7^jV(m2uW?Z5bP< zZB7Lo;z2gO_%5;O)6kUdhlE3Yu+!KyMWDz<{fo{*#TNXm^hDT_CO7)e7lpt>RxYHhl)5vBsunfI~er zZhb)%$)?A@Lu~pSqD*wYPB#6tv1v8riCz>}XCr{?xH=s;_Si%<$nJFFGge$(1|qsI z{{pq5>?p2|f)@1+y{AXi?Tg|n&F6s@>l=hk>kB$Z({Z&E5PQfF|M@gT&~Y{J$yy?S zOWp-W@4YOyODyj&GdN~fO+!dRlGDCkHIL%e=pm5T-a`IhUow+<4qz&+ODAmkk!6>w*==g7lHDtI`d(ReWoIy#axz$#=p|B_xnPd4aY z5O}Ah-wB-W!BC@6V7c*vDE>Qe4&ttSL$P=TkQb$viAb6bwQC!&AY9;@h#wkWaqB@I zL1>>%`xvdl>`Q#C5jap2_tbMEr6r&gU*i(4Y zSNqr{u{h*otz-BY30rrxj50q5qbMozpEUky{~?aii~Q%{IQ)m+L$Cd(9Yl}`T;f0U z91O4H{BP`Sb|iWjG?b6U>`@a-ve!5NAoltmAOM6eve&tI*g@N?IaI2% zYR+$L(F9;r&!moD8e5bkz7GJ=3^jUlPNq@96#&gTrG1Jwr(ra1#sg*WTxsK6obRkY`nz#eL)zvFSBe zIZhL>?Tc)hF*f}*xJEDPgL8qS`(P`H6}i-$-`Kqc{2|4uV;E)po0d4F6x5? z{L_8#q)@5OQXhP=f^QHO#c=wzgYJXn=ls_~Ozl6|pyH3=2AM7dpMxMmF+8ph67D5r za5P2PT~)pc$-_wbkSvl-Xp}#1xfPJ-Eu41&GHT&`7LXRGUDuMBpyeUEcR~776i4|p z5nnwl+!Jf0y19$59*1^mUp>>5NkaUPe&h>PLmskwbj+aGQgc-m@9DiXAJ3r)33Deu zyc$D^jx9T5oJXJ0r-7sW@UNkp=tX|`FltwtZ;-He{Wg&_!j!|SYrXLyR|KvKsl;svc(f9(zdt&IMIvr+)_c$qQg6l z4vEH-mVZn{hwZ2hQnC7p>X0y_7wPcZdqsyWXn52fkvHBt8-vXya`6|X-Rl6RX+bziPfQ(v@#elS8rsqe< z%K$lKLHYopiKLHnJs^1t@|S>&T96L`(t`2Jj-q~VqF*)Jix=rlphnMA04WBW_|Cjf_SU@+fb=cvROljzee5_C+4G$avJ@Sl6V{yy`@WqT5KLk&B{e z3;tD#qO@wG-VGzd6AnZAmJZ zW_~0#{S{$`DCwQ{BhcirA}!6Q#)=X*pDMOk9pOU&((}OzdXDJF5p8s#Ho2Q?o&Yp$ zcbc0a??)xL$yC%hbLxg*Og!_^R_v<6vcT9>q z?WkH>T}r?Cvmi@o6=^}vq4gI-xX0m3jFa&BRT1vnBHZUixbKK?AD$HV)(H2_5$?3Q zvD@Ai;l5{5+?PkVZ-{WGeE^&L6%p>YO^W-n2=`SH?$aXNFO6^?nH2XW5$?+)+^0mi z)9)*6ue)bb+-bFCX?5w62>0J%6tZy6Sr*|wIw|h-x^9c|(&HlBpNnvx6XE{Aq_{Ul zxHm?)e?P*VzU*Ra{@|pz(}#lWwoi$0ez;~mri(z*FoU0k`Sv}a0p*AH`X{b=f@&T zjha4YWVRgllpz0B(afLYc=1Wi2+GiW@UnN6h@-444+94s95}Qyhen1jT7zu+v8+M< z9zE9HZ6Ts z;d;$T)S?%yWe&k+V28GsUo#SpUNg1=6U`4?vSxfgh-lxS!c;`r-vtePT^f=$fmeV4 zC;41LJq@MSg9`rpKrPMpI8eq{r!^gg(;9$Onf0mWMeV|3KP)ppK$_@i+j+Xv3%?W;AkJi_N-d*D&fr^^05Dn?R$9eIqXZ5XH9urwerOKYRn3K)Xnx5~DO7!XYi$ZI>9e2PIS| zOa~yd#@~ag<@Ptke@20${l{*%qQk$Ap?Lz8R*F%7ho73L2$tw!ibTP`$bVMP75~}m z7X(t|8;9|4EZ_Ly>EavPQ5)<+7ulU`s`Xqxw$Rs&wcT4lfwbvgV)yTXNWkvh_;M}2 zr0X001EA3|hTT5_oIL1gd5{UnOkBn8nhxo?yxm8DPj&uSyMJIDcBdyp#~yxm)%UajZycBijYk7f5?fk?pa>T|=s)o~gR z8m(j4{aN7b0Ua$5G69)`cGq+&+kF(ZUk$rIFb=!ZnrJM$UwfX|eSKNG|HVnt-^<&* zbsToT-`G8E=@1!pQGaiTddIRmeQkU!yUzqIZTH^vbs6EH?>lno0Rs8+)!x#Mq1<(N z1_nBy=>qmnc~7QY`3Bk4ra?K0;Rlh{HjTmIIlvy&FB`-4KJ8-KNmtwxlp-zo7w_dR z@nx3X-3l^CC5(4i_<2>0a??hpFhd6c;UbjF%p_;h4; z5#Yr!^I>TPqzGTH_UwY_E6rD!UHCG~>>?mDx1G)_%e7rbqSvuqOYSo5qM5mUNh_WZ zD_0m{>0LuwKeRVuUy*iAXpB2k#%>u;m!9c+lpb@JybOj`zc{B^RB+vH_4)NRquYq!SSFXALO1|TwP((U>oAPq)Bs`a0M^q|nEOq=eqO47BC0AvKXzC0%Y(g}!fuNFXLZmesq z2V{YTvjq@2*V8yTK=PJ6w*fL@^qk&4SfI6qe)2&){KLR$FgPf7z6FRcPb!6X0;N(^ z5b*FH1ILE^8W5QuYI&yP(c^X?QBFhXT?L0NUgr@6g#a?nT0m^grvRB}=ybCu>@l8z zB4-zHnsE2&+zbeD_x1dCKpq4y-#P~Xxxs=w2#D_q_}y_fSL${0hS#S4OePPivij5Q zdYpI}&8K*$d5^{Yd%z(J`&Rx}Kn?;zG&G%G0n%^DGXEB`lT-x$c3yv&^bRKkCB201&$T7`_LP+bx_s04Z6JcXKV`O#d9`?*M7S-PiNOfV5b8{%5KM zbf4EtfZS!Z>qz_*<6+fyp?o4B`Wc2M=Cu%z5z99&24u4(VFw`hT97m#5GTNWCm_#R z+;0WMAFY7w+yw~jEo&cBqd7dP9VNP@DH^IcN)SF!as4%F$qs{tJOW6UrHy9+S#Bs( zt>*#pXDP~i(_ugSCDE~LIt`CY>*rfUKgR+>Gd;gw(68b5fCI^*m*;lsbigO#$(J{yyM5V0rk50r{jQ^XCCM zXyH5o2$_(m>sI^#kZqQPKL=!l%Qem)0C~tzRu=4boL1oYEuD$q1dwz3^Nl7z9yPU4 zKt;=OdI6aSh;N-CKn@yhP_4HD;{64so2k#amPj4Xu zU%_}`AWxu1b5CabP+uxtNay-8MagD!y@QfYZ{J?X?37%8HkXlfZ-Gvgm;w|aNt&uM zl*!^v!RnnD+1$=_f3~L`>;^KWOkqtr*VCUVIQc>*)t$=b@V0mT(t>%-g-mb0RA`oZ z*;0S0*i#rRrFsVo-QcQz&sqj;cWxY5#i7Bmu-NWlW~o$mAl;WqZBG|72>P+2r1SYy zX?H&345V|w?Lj__$U!kwU8YYF>`T^OdhwO1wU=(%+_qsuYSro$mtUN^q;2z>)g2vL zf8ZFWL5U=edf&dbtgXCM&!D_m7Aw^fz0?`2i%s-;{-LPUDZK1AyA$uw(B&yu`?`p* zVI&|UQte0=Q{COAL3m0?f>aM|MoT_wL5e21+tYDmwL1*<_hg2<^X7NiQF7UVdgg_)?gRxUQvsExuF!=kja;_gE{$qd4vuB zhKS#mx3aB`Q)?-udv1lU>UYCX_qIEGuuH36tZj4s^=P){p*wmih1ZRz3Yora5nVSG z1omV?V6}bN%r3%@eEC`RbdJeli8Yw&>mS^n?oai=If`&XA42YexD@u6m76c?NNrfV zX)`(?nK_HNa($-98Q7ib?;gzU)Lj9D*sq8%(G9p+geWhm(FOX^9IjEwyVs+Tx{yIr6Ra_WsP;+{&RsA(Ja91VcBI8ydjKqujASyS_(U!z^I){ zS&tSw+OB<>5*$tqxG8w59&t^mNmVX3u2G2uJf}i&S>9xs6ykHbd!VO37wriucypmb zOE)+>!W=E=&9*$I$X+CG^(zBOBwlTUE5hD-K1K?WBmD*5=pn8uf z1+U)@f5+eJGKE~G|Ln!7G!&&hh#sTWgC{yQc&!RVGEIdi2AeXa%X9h(-=5VnR9uwp zNAP8Kycxu`NTs@oph{z@3co6H=($uXepE(NHl&Lsgakw>ZFh=Om~Z)0q*MwqFke*B zj0wXUaZ@xi_d>A6&KXUi(%ldlJu-{_O-(K$Ql|!cNxtsu)O-hHz8|yjnBq`>CY3D` z0cz>s_Ehgsj-1B!44V%6V5Wd5p$Mg~9W11ZL)(kHF;)$vc4i7i8fTTl>4h%Xju-7{ zs;e^nn2@eS56nWVCJ1PbmHk}wkV*vyr7Ngg-?AO!#3!z%@DLujQ&5bJBguAjinu4VI^D75>HmF%U+sh0GKDF{=k8hTkNmq>h zeV5tXUxa5N&JI!B#6w}G?cB`N%2Y9*>CX0MyZxwCsqg7=(D$DmnRGtrKHM*TXEqJA zCb)#A7DH^JcC0Eee6#DDiM!}NACh}RCcQJpQMA_cWDztsrfDLK-^2Xnh4fEdR#wyF zQI2-BJa0%TZ$MWVEC%|(>KyuG#MLXUFGP0UjWSs?V=C(TPYUC0Uv2>z6d$uxYC0{!ScAFDE_%wDDd)TMVh|N| zbtls9$D1d1rxnk{*hmuN19li(;buK?5uLr-?wNj*?DeXNy*sQHD;UJdVv}14=;+V0k>Sl(2xfv^+ z)$4^wC$Lo!bc0Hjh$zQvO3K~~8aSW^BCGf5hT^ZpZsqd!XvF8d8nx0qKvbaJE)cs& zjuh{s*>eo3!g82-77cPC0{XZ|1omfaWkR6hNgvFxmJ?>USK&H1O6yQn3b>;`Vq@G% z2Zli+Z4W3RHl|hnY>?{65mulLHbQ6&Kp&xg6buxhfm}6`Y=;;+5Qt#Z-Tk>wWWa#{ z{xl}OyO<`RTLiY3l%ptSx)JCv>TD8GT*!J7bn?o{Et20GYT50TL*Aumsn`oAwg30pVu%?G* MB$#7oLY+MQe@=?pHUIzs literal 0 HcmV?d00001 diff --git a/dependencies/README_PrecompiledDependencies.txt b/dependencies/README_PrecompiledDependencies.txt index 72564c1..83f2d7c 100644 --- a/dependencies/README_PrecompiledDependencies.txt +++ b/dependencies/README_PrecompiledDependencies.txt @@ -4,8 +4,11 @@ This is a folder containing precompiled dependencies for this project from exter A list of libraries, their sources and licenses is given below: LIBRARY LIST: - + libpng + libjpeg + libz A list of each library's own depenencies is given below: LIBRARY DEPENDENCY LIST: + diff --git a/dependencies/linux64/include/jconfig.h b/dependencies/linux64/include/jconfig.h new file mode 100644 index 0000000..9594ec5 --- /dev/null +++ b/dependencies/linux64/include/jconfig.h @@ -0,0 +1,45 @@ +/* jconfig.h. Generated automatically by configure. */ +/* jconfig.cfg --- source file edited by configure script */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +#undef void +#undef const +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +/* Define this if you get warnings about undefined structures. */ +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED +#define INLINE __inline__ +/* These are for configuring the JPEG memory manager. */ +#undef DEFAULT_MAX_MEM +#undef NO_MKTEMP + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ +#undef PROGRESS_REPORT + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/dependencies/linux64/include/jmorecfg.h b/dependencies/linux64/include/jmorecfg.h new file mode 100644 index 0000000..54a7d1c --- /dev/null +++ b/dependencies/linux64/include/jmorecfg.h @@ -0,0 +1,363 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ +typedef long INT32; +#endif + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +/* a function called through method pointers: */ +#define METHODDEF(type) static type +/* a function used only in its module: */ +#define LOCAL(type) static type +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type +/* a reference to a GLOBAL function: */ +#define EXTERN(type) extern type + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (*methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (*methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +#ifdef NEED_FAR_POINTERS +#define FAR far +#else +#define FAR +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/dependencies/linux64/include/jpeglib.h b/dependencies/linux64/include/jpeglib.h new file mode 100644 index 0000000..d1be8dd --- /dev/null +++ b/dependencies/linux64/include/jpeglib.h @@ -0,0 +1,1096 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ + +#define JPEG_LIB_VERSION 62 /* Version 6b */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples. Always DCTSIZE for compression. + * For decompression this is the size of the output from one DCT block, + * reflecting any scaling we choose to apply during the IDCT step. + * Values of 1,2,4,8 are likely to be supported. Note that different + * components may receive different IDCT scalings. + */ + int DCT_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface), thus + * downsampled_width = ceil(image_width * Hi/Hmax) + * and similarly for height. For decompression, IDCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.doc concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#endif /* JPEGLIB_H */ diff --git a/dependencies/linux64/include/png.h b/dependencies/linux64/include/png.h new file mode 100644 index 0000000..9b069e4 --- /dev/null +++ b/dependencies/linux64/include/png.h @@ -0,0 +1,3358 @@ +/* png.h - header file for PNG reference library + * + * libpng version 1.6.47 + * + * Copyright (c) 2018-2025 Cosmin Truta + * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson + * Copyright (c) 1996-1997 Andreas Dilger + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + * + * This code is released under the libpng license. (See LICENSE, below.) + * + * Authors and maintainers: + * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat + * libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger + * libpng versions 0.97, January 1998, through 1.6.35, July 2018: + * Glenn Randers-Pehrson + * libpng versions 1.6.36, December 2018, through 1.6.47, February 2025: + * Cosmin Truta + * See also "Contributing Authors", below. + */ + +/* + * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE + * ========================================= + * + * PNG Reference Library License version 2 + * --------------------------------------- + * + * * Copyright (c) 1995-2025 The PNG Reference Library Authors. + * * Copyright (c) 2018-2025 Cosmin Truta. + * * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. + * * Copyright (c) 1996-1997 Andreas Dilger. + * * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + * + * The software is supplied "as is", without warranty of any kind, + * express or implied, including, without limitation, the warranties + * of merchantability, fitness for a particular purpose, title, and + * non-infringement. In no event shall the Copyright owners, or + * anyone distributing the software, be liable for any damages or + * other liability, whether in contract, tort or otherwise, arising + * from, out of, or in connection with the software, or the use or + * other dealings in the software, even if advised of the possibility + * of such damage. + * + * Permission is hereby granted to use, copy, modify, and distribute + * this software, or portions hereof, for any purpose, without fee, + * subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you + * use this software in a product, an acknowledgment in the product + * documentation would be appreciated, but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must + * not be misrepresented as being the original software. + * + * 3. This Copyright notice may not be removed or altered from any + * source or altered source distribution. + * + * + * PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) + * ----------------------------------------------------------------------- + * + * libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are + * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are + * derived from libpng-1.0.6, and are distributed according to the same + * disclaimer and license as libpng-1.0.6 with the following individuals + * added to the list of Contributing Authors: + * + * Simon-Pierre Cadieux + * Eric S. Raymond + * Mans Rullgard + * Cosmin Truta + * Gilles Vollant + * James Yu + * Mandar Sahastrabuddhe + * Google Inc. + * Vadim Barkov + * + * and with the following additions to the disclaimer: + * + * There is no warranty against interference with your enjoyment of + * the library or against infringement. There is no warranty that our + * efforts or the library will fulfill any of your particular purposes + * or needs. This library is provided with all faults, and the entire + * risk of satisfactory quality, performance, accuracy, and effort is + * with the user. + * + * Some files in the "contrib" directory and some configure-generated + * files that are distributed with libpng have other copyright owners, and + * are released under other open source licenses. + * + * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are + * Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from + * libpng-0.96, and are distributed according to the same disclaimer and + * license as libpng-0.96, with the following individuals added to the + * list of Contributing Authors: + * + * Tom Lane + * Glenn Randers-Pehrson + * Willem van Schaik + * + * libpng versions 0.89, June 1996, through 0.96, May 1997, are + * Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, + * and are distributed according to the same disclaimer and license as + * libpng-0.88, with the following individuals added to the list of + * Contributing Authors: + * + * John Bowler + * Kevin Bracey + * Sam Bushell + * Magnus Holmgren + * Greg Roelofs + * Tom Tanner + * + * Some files in the "scripts" directory have other copyright owners, + * but are released under this license. + * + * libpng versions 0.5, May 1995, through 0.88, January 1996, are + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + * + * For the purposes of this copyright and license, "Contributing Authors" + * is defined as the following set of individuals: + * + * Andreas Dilger + * Dave Martindale + * Guy Eric Schalnat + * Paul Schmidt + * Tim Wegner + * + * The PNG Reference Library is supplied "AS IS". The Contributing + * Authors and Group 42, Inc. disclaim all warranties, expressed or + * implied, including, without limitation, the warranties of + * merchantability and of fitness for any purpose. The Contributing + * Authors and Group 42, Inc. assume no liability for direct, indirect, + * incidental, special, exemplary, or consequential damages, which may + * result from the use of the PNG Reference Library, even if advised of + * the possibility of such damage. + * + * Permission is hereby granted to use, copy, modify, and distribute this + * source code, or portions hereof, for any purpose, without fee, subject + * to the following restrictions: + * + * 1. The origin of this source code must not be misrepresented. + * + * 2. Altered versions must be plainly marked as such and must not + * be misrepresented as being the original source. + * + * 3. This Copyright notice may not be removed or altered from any + * source or altered source distribution. + * + * The Contributing Authors and Group 42, Inc. specifically permit, + * without fee, and encourage the use of this source code as a component + * to supporting the PNG file format in commercial products. If you use + * this source code in a product, acknowledgment is not required but would + * be appreciated. + * + * END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE. + * + * TRADEMARK + * ========= + * + * The name "libpng" has not been registered by the Copyright owners + * as a trademark in any jurisdiction. However, because libpng has + * been distributed and maintained world-wide, continually since 1995, + * the Copyright owners claim "common-law trademark protection" in any + * jurisdiction where common-law trademark is recognized. + */ + +/* + * A "png_get_copyright" function is available, for convenient use in "about" + * boxes and the like: + * + * printf("%s", png_get_copyright(NULL)); + * + * Also, the PNG logo (in PNG format, of course) is supplied in the + * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + */ + +/* + * The contributing authors would like to thank all those who helped + * with testing, bug fixes, and patience. This wouldn't have been + * possible without all of you. + * + * Thanks to Frank J. T. Wojcik for helping with the documentation. + */ + +/* Note about libpng version numbers: + * + * Due to various miscommunications, unforeseen code incompatibilities + * and occasional factors outside the authors' control, version numbering + * on the library has not always been consistent and straightforward. + * The following table summarizes matters since version 0.89c, which was + * the first widely used release: + * + * source png.h png.h shared-lib + * version string int version + * ------- ------ ----- ---------- + * 0.89c "1.0 beta 3" 0.89 89 1.0.89 + * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] + * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] + * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] + * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] + * 0.97c 0.97 97 2.0.97 + * 0.98 0.98 98 2.0.98 + * 0.99 0.99 98 2.0.99 + * 0.99a-m 0.99 99 2.0.99 + * 1.00 1.00 100 2.1.0 [100 should be 10000] + * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] + * 1.0.1 png.h string is 10001 2.1.0 + * 1.0.1a-e identical to the 10002 from here on, the shared library + * 1.0.2 source version) 10002 is 2.V where V is the source code + * 1.0.2a-b 10003 version, except as noted. + * 1.0.3 10003 + * 1.0.3a-d 10004 + * 1.0.4 10004 + * 1.0.4a-f 10005 + * 1.0.5 (+ 2 patches) 10005 + * 1.0.5a-d 10006 + * 1.0.5e-r 10100 (not source compatible) + * 1.0.5s-v 10006 (not binary compatible) + * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) + * 1.0.6d-f 10007 (still binary incompatible) + * 1.0.6g 10007 + * 1.0.6h 10007 10.6h (testing xy.z so-numbering) + * 1.0.6i 10007 10.6i + * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) + * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) + * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) + * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) + * 1.0.7 1 10007 (still compatible) + * ... + * 1.0.69 10 10069 10.so.0.69[.0] + * ... + * 1.2.59 13 10259 12.so.0.59[.0] + * ... + * 1.4.20 14 10420 14.so.0.20[.0] + * ... + * 1.5.30 15 10530 15.so.15.30[.0] + * ... + * 1.6.47 16 10647 16.so.16.47[.0] + * + * Henceforth the source version will match the shared-library major and + * minor numbers; the shared-library major version number will be used for + * changes in backward compatibility, as it is intended. + * The PNG_LIBPNG_VER macro, which is not used within libpng but is + * available for applications, is an unsigned integer of the form XYYZZ + * corresponding to the source version X.Y.Z (leading zeros in Y and Z). + * Beta versions were given the previous public release number plus a + * letter, until version 1.0.6j; from then on they were given the upcoming + * public release number plus "betaNN" or "rcNN". + * + * Binary incompatibility exists only when applications make direct access + * to the info_ptr or png_ptr members through png.h, and the compiled + * application is loaded with a different version of the library. + * + * See libpng.txt or libpng.3 for more information. The PNG specification + * is available as a W3C Recommendation and as an ISO/IEC Standard; see + * + */ + +#ifndef PNG_H +#define PNG_H + +/* This is not the place to learn how to use libpng. The file libpng-manual.txt + * describes how to use libpng, and the file example.c summarizes it + * with some code on which to build. This file is useful for looking + * at the actual function definitions and structure components. If that + * file has been stripped from your copy of libpng, you can find it at + * + * + * If you just need to read a PNG file and don't want to read the documentation + * skip to the end of this file and read the section entitled 'simplified API'. + */ + +/* Version information for png.h - this should match the version in png.c */ +#define PNG_LIBPNG_VER_STRING "1.6.47" +#define PNG_HEADER_VERSION_STRING " libpng version " PNG_LIBPNG_VER_STRING "\n" + +/* The versions of shared library builds should stay in sync, going forward */ +#define PNG_LIBPNG_VER_SHAREDLIB 16 +#define PNG_LIBPNG_VER_SONUM PNG_LIBPNG_VER_SHAREDLIB /* [Deprecated] */ +#define PNG_LIBPNG_VER_DLLNUM PNG_LIBPNG_VER_SHAREDLIB /* [Deprecated] */ + +/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ +#define PNG_LIBPNG_VER_MAJOR 1 +#define PNG_LIBPNG_VER_MINOR 6 +#define PNG_LIBPNG_VER_RELEASE 47 + +/* This should be zero for a public release, or non-zero for a + * development version. + */ +#define PNG_LIBPNG_VER_BUILD 0 + +/* Release Status */ +#define PNG_LIBPNG_BUILD_ALPHA 1 +#define PNG_LIBPNG_BUILD_BETA 2 +#define PNG_LIBPNG_BUILD_RC 3 +#define PNG_LIBPNG_BUILD_STABLE 4 +#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7 + +/* Release-Specific Flags */ +#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with + PNG_LIBPNG_BUILD_STABLE only */ +#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with + PNG_LIBPNG_BUILD_SPECIAL */ +#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with + PNG_LIBPNG_BUILD_PRIVATE */ + +#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE + +/* Careful here. At one time, Guy wanted to use 082, but that + * would be octal. We must not include leading zeros. + * Versions 0.7 through 1.0.0 were in the range 0 to 100 here + * (only version 1.0.0 was mis-numbered 100 instead of 10000). + * From version 1.0.1 it is: + * XXYYZZ, where XX=major, YY=minor, ZZ=release + */ +#define PNG_LIBPNG_VER 10647 /* 1.6.47 */ + +/* Library configuration: these options cannot be changed after + * the library has been built. + */ +#ifndef PNGLCONF_H +/* If pnglibconf.h is missing, you can + * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h + */ +# include "pnglibconf.h" +#endif + +#ifndef PNG_VERSION_INFO_ONLY +/* Machine specific configuration. */ +# include "pngconf.h" +#endif + +/* + * Added at libpng-1.2.8 + * + * Ref MSDN: Private as priority over Special + * VS_FF_PRIVATEBUILD File *was not* built using standard release + * procedures. If this value is given, the StringFileInfo block must + * contain a PrivateBuild string. + * + * VS_FF_SPECIALBUILD File *was* built by the original company using + * standard release procedures but is a variation of the standard + * file of the same version number. If this value is given, the + * StringFileInfo block must contain a SpecialBuild string. + */ + +#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */ +# define PNG_LIBPNG_BUILD_TYPE \ + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) +#else +# ifdef PNG_LIBPNG_SPECIALBUILD +# define PNG_LIBPNG_BUILD_TYPE \ + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) +# else +# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE) +# endif +#endif + +#ifndef PNG_VERSION_INFO_ONLY + +/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Version information for C files, stored in png.c. This had better match + * the version above. + */ +#define png_libpng_ver png_get_header_ver(NULL) + +/* This file is arranged in several sections: + * + * 1. [omitted] + * 2. Any configuration options that can be specified by for the application + * code when it is built. (Build time configuration is in pnglibconf.h) + * 3. Type definitions (base types are defined in pngconf.h), structure + * definitions. + * 4. Exported library functions. + * 5. Simplified API. + * 6. Implementation options. + * + * The library source code has additional files (principally pngpriv.h) that + * allow configuration of the library. + */ + +/* Section 1: [omitted] */ + +/* Section 2: run time configuration + * See pnglibconf.h for build time configuration + * + * Run time configuration allows the application to choose between + * implementations of certain arithmetic APIs. The default is set + * at build time and recorded in pnglibconf.h, but it is safe to + * override these (and only these) settings. Note that this won't + * change what the library does, only application code, and the + * settings can (and probably should) be made on a per-file basis + * by setting the #defines before including png.h + * + * Use macros to read integers from PNG data or use the exported + * functions? + * PNG_USE_READ_MACROS: use the macros (see below) Note that + * the macros evaluate their argument multiple times. + * PNG_NO_USE_READ_MACROS: call the relevant library function. + * + * Use the alternative algorithm for compositing alpha samples that + * does not use division? + * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division' + * algorithm. + * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm. + * + * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is + * false? + * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error + * APIs to png_warning. + * Otherwise the calls are mapped to png_error. + */ + +/* Section 3: type definitions, including structures and compile time + * constants. + * See pngconf.h for base types that vary by machine/system + */ + +/* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +typedef char* png_libpng_version_1_6_47; + +/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. + * + * png_struct is the cache of information used while reading or writing a single + * PNG file. One of these is always required, although the simplified API + * (below) hides the creation and destruction of it. + */ +typedef struct png_struct_def png_struct; +typedef const png_struct * png_const_structp; +typedef png_struct * png_structp; +typedef png_struct * * png_structpp; + +/* png_info contains information read from or to be written to a PNG file. One + * or more of these must exist while reading or creating a PNG file. The + * information is not used by libpng during read but is used to control what + * gets written when a PNG file is created. "png_get_" function calls read + * information during read and "png_set_" functions calls write information + * when creating a PNG. + * been moved into a separate header file that is not accessible to + * applications. Read libpng-manual.txt or libpng.3 for more info. + */ +typedef struct png_info_def png_info; +typedef png_info * png_infop; +typedef const png_info * png_const_infop; +typedef png_info * * png_infopp; + +/* Types with names ending 'p' are pointer types. The corresponding types with + * names ending 'rp' are identical pointer types except that the pointer is + * marked 'restrict', which means that it is the only pointer to the object + * passed to the function. Applications should not use the 'restrict' types; + * it is always valid to pass 'p' to a pointer with a function argument of the + * corresponding 'rp' type. Different compilers have different rules with + * regard to type matching in the presence of 'restrict'. For backward + * compatibility libpng callbacks never have 'restrict' in their parameters and, + * consequentially, writing portable application code is extremely difficult if + * an attempt is made to use 'restrict'. + */ +typedef png_struct * PNG_RESTRICT png_structrp; +typedef const png_struct * PNG_RESTRICT png_const_structrp; +typedef png_info * PNG_RESTRICT png_inforp; +typedef const png_info * PNG_RESTRICT png_const_inforp; + +/* Three color definitions. The order of the red, green, and blue, (and the + * exact size) is not important, although the size of the fields need to + * be png_byte or png_uint_16 (as defined below). + */ +typedef struct png_color_struct +{ + png_byte red; + png_byte green; + png_byte blue; +} png_color; +typedef png_color * png_colorp; +typedef const png_color * png_const_colorp; +typedef png_color * * png_colorpp; + +typedef struct png_color_16_struct +{ + png_byte index; /* used for palette files */ + png_uint_16 red; /* for use in red green blue files */ + png_uint_16 green; + png_uint_16 blue; + png_uint_16 gray; /* for use in grayscale files */ +} png_color_16; +typedef png_color_16 * png_color_16p; +typedef const png_color_16 * png_const_color_16p; +typedef png_color_16 * * png_color_16pp; + +typedef struct png_color_8_struct +{ + png_byte red; /* for use in red green blue files */ + png_byte green; + png_byte blue; + png_byte gray; /* for use in grayscale files */ + png_byte alpha; /* for alpha channel files */ +} png_color_8; +typedef png_color_8 * png_color_8p; +typedef const png_color_8 * png_const_color_8p; +typedef png_color_8 * * png_color_8pp; + +/* + * The following two structures are used for the in-core representation + * of sPLT chunks. + */ +typedef struct png_sPLT_entry_struct +{ + png_uint_16 red; + png_uint_16 green; + png_uint_16 blue; + png_uint_16 alpha; + png_uint_16 frequency; +} png_sPLT_entry; +typedef png_sPLT_entry * png_sPLT_entryp; +typedef const png_sPLT_entry * png_const_sPLT_entryp; +typedef png_sPLT_entry * * png_sPLT_entrypp; + +/* When the depth of the sPLT palette is 8 bits, the color and alpha samples + * occupy the LSB of their respective members, and the MSB of each member + * is zero-filled. The frequency member always occupies the full 16 bits. + */ + +typedef struct png_sPLT_struct +{ + png_charp name; /* palette name */ + png_byte depth; /* depth of palette samples */ + png_sPLT_entryp entries; /* palette entries */ + png_int_32 nentries; /* number of palette entries */ +} png_sPLT_t; +typedef png_sPLT_t * png_sPLT_tp; +typedef const png_sPLT_t * png_const_sPLT_tp; +typedef png_sPLT_t * * png_sPLT_tpp; + +#ifdef PNG_TEXT_SUPPORTED +/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, + * and whether that contents is compressed or not. The "key" field + * points to a regular zero-terminated C string. The "text" fields can be a + * regular C string, an empty string, or a NULL pointer. + * However, the structure returned by png_get_text() will always contain + * the "text" field as a regular zero-terminated C string (possibly + * empty), never a NULL pointer, so it can be safely used in printf() and + * other string-handling functions. Note that the "itxt_length", "lang", and + * "lang_key" members of the structure only exist when the library is built + * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by + * default without iTXt support. Also note that when iTXt *is* supported, + * the "lang" and "lang_key" fields contain NULL pointers when the + * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or + * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the + * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag" + * which is always 0 or 1, or its "compression method" which is always 0. + */ +typedef struct png_text_struct +{ + int compression; /* compression value: + -1: tEXt, none + 0: zTXt, deflate + 1: iTXt, none + 2: iTXt, deflate */ + png_charp key; /* keyword, 1-79 character description of "text" */ + png_charp text; /* comment, may be an empty string (ie "") + or a NULL pointer */ + size_t text_length; /* length of the text string */ + size_t itxt_length; /* length of the itxt string */ + png_charp lang; /* language code, 0-79 characters + or a NULL pointer */ + png_charp lang_key; /* keyword translated UTF-8 string, 0 or more + chars or a NULL pointer */ +} png_text; +typedef png_text * png_textp; +typedef const png_text * png_const_textp; +typedef png_text * * png_textpp; +#endif + +/* Supported compression types for text in PNG files (tEXt, and zTXt). + * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ +#define PNG_TEXT_COMPRESSION_NONE_WR -3 +#define PNG_TEXT_COMPRESSION_zTXt_WR -2 +#define PNG_TEXT_COMPRESSION_NONE -1 +#define PNG_TEXT_COMPRESSION_zTXt 0 +#define PNG_ITXT_COMPRESSION_NONE 1 +#define PNG_ITXT_COMPRESSION_zTXt 2 +#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ + +/* png_time is a way to hold the time in an machine independent way. + * Two conversions are provided, both from time_t and struct tm. There + * is no portable way to convert to either of these structures, as far + * as I know. If you know of a portable way, send it to me. As a side + * note - PNG has always been Year 2000 compliant! + */ +typedef struct png_time_struct +{ + png_uint_16 year; /* full year, as in, 1995 */ + png_byte month; /* month of year, 1 - 12 */ + png_byte day; /* day of month, 1 - 31 */ + png_byte hour; /* hour of day, 0 - 23 */ + png_byte minute; /* minute of hour, 0 - 59 */ + png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ +} png_time; +typedef png_time * png_timep; +typedef const png_time * png_const_timep; +typedef png_time * * png_timepp; + +#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\ + defined(PNG_USER_CHUNKS_SUPPORTED) +/* png_unknown_chunk is a structure to hold queued chunks for which there is + * no specific support. The idea is that we can use this to queue + * up private chunks for output even though the library doesn't actually + * know about their semantics. + * + * The data in the structure is set by libpng on read and used on write. + */ +typedef struct png_unknown_chunk_t +{ + png_byte name[5]; /* Textual chunk name with '\0' terminator */ + png_byte *data; /* Data, should not be modified on read! */ + size_t size; + + /* On write 'location' must be set using the flag values listed below. + * Notice that on read it is set by libpng however the values stored have + * more bits set than are listed below. Always treat the value as a + * bitmask. On write set only one bit - setting multiple bits may cause the + * chunk to be written in multiple places. + */ + png_byte location; /* mode of operation at read time */ +} +png_unknown_chunk; + +typedef png_unknown_chunk * png_unknown_chunkp; +typedef const png_unknown_chunk * png_const_unknown_chunkp; +typedef png_unknown_chunk * * png_unknown_chunkpp; +#endif + +/* Flag values for the unknown chunk location byte. */ +#define PNG_HAVE_IHDR 0x01 +#define PNG_HAVE_PLTE 0x02 +#define PNG_AFTER_IDAT 0x08 + +/* Maximum positive integer used in PNG is (2^31)-1 */ +#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) +#define PNG_UINT_32_MAX ((png_uint_32)(-1)) +#define PNG_SIZE_MAX ((size_t)(-1)) + +/* These are constants for fixed point values encoded in the + * PNG specification manner (x100000) + */ +#define PNG_FP_1 100000 +#define PNG_FP_HALF 50000 +#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) +#define PNG_FP_MIN (-PNG_FP_MAX) + +/* These describe the color_type field in png_info. */ +/* color type masks */ +#define PNG_COLOR_MASK_PALETTE 1 +#define PNG_COLOR_MASK_COLOR 2 +#define PNG_COLOR_MASK_ALPHA 4 + +/* color types. Note that not all combinations are legal */ +#define PNG_COLOR_TYPE_GRAY 0 +#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) +#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) +#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) +#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) +/* aliases */ +#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA +#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA + +/* This is for compression type. PNG 1.0-1.2 only define the single type. */ +#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ +#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE + +/* This is for filter type. PNG 1.0-1.2 only define the single type. */ +#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ +#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ +#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE + +/* These are for the interlacing type. These values should NOT be changed. */ +#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ +#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ +#define PNG_INTERLACE_LAST 2 /* Not a valid value */ + +/* These are for the oFFs chunk. These values should NOT be changed. */ +#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ +#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ +#define PNG_OFFSET_LAST 2 /* Not a valid value */ + +/* These are for the pCAL chunk. These values should NOT be changed. */ +#define PNG_EQUATION_LINEAR 0 /* Linear transformation */ +#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ +#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ +#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ +#define PNG_EQUATION_LAST 4 /* Not a valid value */ + +/* These are for the sCAL chunk. These values should NOT be changed. */ +#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ +#define PNG_SCALE_METER 1 /* meters per pixel */ +#define PNG_SCALE_RADIAN 2 /* radians per pixel */ +#define PNG_SCALE_LAST 3 /* Not a valid value */ + +/* These are for the pHYs chunk. These values should NOT be changed. */ +#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ +#define PNG_RESOLUTION_METER 1 /* pixels/meter */ +#define PNG_RESOLUTION_LAST 2 /* Not a valid value */ + +/* These are for the sRGB chunk. These values should NOT be changed. */ +#define PNG_sRGB_INTENT_PERCEPTUAL 0 +#define PNG_sRGB_INTENT_RELATIVE 1 +#define PNG_sRGB_INTENT_SATURATION 2 +#define PNG_sRGB_INTENT_ABSOLUTE 3 +#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ + +/* This is for text chunks */ +#define PNG_KEYWORD_MAX_LENGTH 79 + +/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ +#define PNG_MAX_PALETTE_LENGTH 256 + +/* These determine if an ancillary chunk's data has been successfully read + * from the PNG header, or if the application has filled in the corresponding + * data in the info_struct to be written into the output file. The values + * of the PNG_INFO_ defines should NOT be changed. + */ +#define PNG_INFO_gAMA 0x0001U +#define PNG_INFO_sBIT 0x0002U +#define PNG_INFO_cHRM 0x0004U +#define PNG_INFO_PLTE 0x0008U +#define PNG_INFO_tRNS 0x0010U +#define PNG_INFO_bKGD 0x0020U +#define PNG_INFO_hIST 0x0040U +#define PNG_INFO_pHYs 0x0080U +#define PNG_INFO_oFFs 0x0100U +#define PNG_INFO_tIME 0x0200U +#define PNG_INFO_pCAL 0x0400U +#define PNG_INFO_sRGB 0x0800U /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000U /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */ +#define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */ +#define PNG_INFO_eXIf 0x10000U /* GR-P, 1.6.31 */ +#define PNG_INFO_cICP 0x20000U /* PNGv3: 1.6.45 */ +#define PNG_INFO_cLLI 0x40000U /* PNGv3: 1.6.45 */ +#define PNG_INFO_mDCV 0x80000U /* PNGv3: 1.6.45 */ +/* APNG: these chunks are stored as unknown, these flags are never set + * however they are provided as a convenience for implementors of APNG and + * avoids any merge conflicts. + * + * Private chunks: these chunk names violate the chunk name recommendations + * because the chunk definitions have no signature and because the private + * chunks with these names have been reserved. Private definitions should + * avoid them. + */ +#define PNG_INFO_acTL 0x100000U /* PNGv3: 1.6.45: unknown */ +#define PNG_INFO_fcTL 0x200000U /* PNGv3: 1.6.45: unknown */ +#define PNG_INFO_fdAT 0x400000U /* PNGv3: 1.6.45: unknown */ + +/* This is used for the transformation routines, as some of them + * change these values for the row. It also should enable using + * the routines for other purposes. + */ +typedef struct png_row_info_struct +{ + png_uint_32 width; /* width of row */ + size_t rowbytes; /* number of bytes in row */ + png_byte color_type; /* color type of row */ + png_byte bit_depth; /* bit depth of row */ + png_byte channels; /* number of channels (1, 2, 3, or 4) */ + png_byte pixel_depth; /* bits per pixel (depth * channels) */ +} png_row_info; + +typedef png_row_info * png_row_infop; +typedef png_row_info * * png_row_infopp; + +/* These are the function types for the I/O functions and for the functions + * that allow the user to override the default I/O functions with his or her + * own. The png_error_ptr type should match that of user-supplied warning + * and error functions, while the png_rw_ptr type should match that of the + * user read/write data functions. Note that the 'write' function must not + * modify the buffer it is passed. The 'read' function, on the other hand, is + * expected to return the read data in the buffer. + */ +typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp)); +typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, size_t)); +typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp)); +typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32, + int)); +typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32, + int)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); +typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); + +/* The following callback receives png_uint_32 row_number, int pass for the + * png_bytep data of the row. When transforming an interlaced image the + * row number is the row number within the sub-image of the interlace pass, so + * the value will increase to the height of the sub-image (not the full image) + * then reset to 0 for the next pass. + * + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to + * find the output pixel (x,y) given an interlaced sub-image pixel + * (row,col,pass). (See below for these macros.) + */ +typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep, + png_uint_32, int)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop, + png_bytep)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp, + png_unknown_chunkp)); +#endif +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +/* not used anywhere */ +/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */ +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* This must match the function definition in , and the application + * must include this before png.h to obtain the definition of jmp_buf. The + * function is required to be PNG_NORETURN, but this is not checked. If the + * function does return the application will crash via an abort() or similar + * system level call. + * + * If you get a warning here while building the library you may need to make + * changes to ensure that pnglibconf.h records the calling convention used by + * your compiler. This may be very difficult - try using a different compiler + * to build the library! + */ +PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), (jmp_buf, int), typedef); +#endif + +/* Transform masks for the high-level interface */ +#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ +#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ +#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ +#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ +#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ +#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ +#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ +#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ +#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ +#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ +#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ +#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ +/* Added to libpng-1.2.34 */ +#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER +#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ +/* Added to libpng-1.4.0 */ +#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ +/* Added to libpng-1.5.4 */ +#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ +#if ~0U > 0xffffU /* or else this might break on a 16-bit machine */ +#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */ +#endif + +/* Flags for MNG supported features */ +#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 +#define PNG_FLAG_MNG_FILTER_64 0x04 +#define PNG_ALL_MNG_FEATURES 0x05 + +/* NOTE: prior to 1.5 these functions had no 'API' style declaration, + * this allowed the zlib default functions to be used on Windows + * platforms. In 1.5 the zlib default malloc (which just calls malloc and + * ignores the first argument) should be completely compatible with the + * following. + */ +typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp, + png_alloc_size_t)); +typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp)); + +/* Section 4: exported functions + * Here are the function definitions most commonly used. This is not + * the place to find out how to use libpng. See libpng-manual.txt for the + * full explanation, see example.c for the summary. This just provides + * a simple one line description of the use of each function. + * + * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in + * pngconf.h and in the *.dfn files in the scripts directory. + * + * PNG_EXPORT(ordinal, type, name, (args)); + * + * ordinal: ordinal that is used while building + * *.def files. The ordinal value is only + * relevant when preprocessing png.h with + * the *.dfn files for building symbol table + * entries, and are removed by pngconf.h. + * type: return type of the function + * name: function name + * args: function arguments, with types + * + * When we wish to append attributes to a function prototype we use + * the PNG_EXPORTA() macro instead. + * + * PNG_EXPORTA(ordinal, type, name, (args), attributes); + * + * ordinal, type, name, and args: same as in PNG_EXPORT(). + * attributes: function attributes + */ + +/* Returns the version number of the library */ +PNG_EXPORT(1, png_uint_32, png_access_version_number, (void)); + +/* Tell lib we have already handled the first magic bytes. + * Handling more than 8 bytes from the beginning of the file is an error. + */ +PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes)); + +/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a + * PNG file. Returns zero if the supplied bytes match the 8-byte PNG + * signature, and non-zero otherwise. Having num_to_check == 0 or + * start > 7 will always fail (i.e. return non-zero). + */ +PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, size_t start, + size_t num_to_check)); + +/* Simple signature checking function. This is the same as calling + * png_check_sig(sig, n) := (png_sig_cmp(sig, 0, n) == 0). + */ +#define png_check_sig(sig, n) (png_sig_cmp((sig), 0, (n)) == 0) /* DEPRECATED */ + +/* Allocate and initialize png_ptr struct for reading, and any other memory. */ +PNG_EXPORTA(4, png_structp, png_create_read_struct, + (png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn), + PNG_ALLOCATED); + +/* Allocate and initialize png_ptr struct for writing, and any other memory */ +PNG_EXPORTA(5, png_structp, png_create_write_struct, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn), + PNG_ALLOCATED); + +PNG_EXPORT(6, size_t, png_get_compression_buffer_size, + (png_const_structrp png_ptr)); + +PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr, + size_t size)); + +/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp + * match up. + */ +#ifdef PNG_SETJMP_SUPPORTED +/* This function returns the jmp_buf built in to *png_ptr. It must be + * supplied with an appropriate 'longjmp' function to use on that jmp_buf + * unless the default error function is overridden in which case NULL is + * acceptable. The size of the jmp_buf is checked against the actual size + * allocated by the library - the call will return NULL on a mismatch + * indicating an ABI mismatch. + */ +PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr, + png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)); +# define png_jmpbuf(png_ptr) \ + (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))) +#else +# define png_jmpbuf(png_ptr) \ + (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) +#endif +/* This function should be used by libpng applications in place of + * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it + * will use it; otherwise it will call PNG_ABORT(). This function was + * added in libpng-1.5.0. + */ +PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val), + PNG_NORETURN); + +#ifdef PNG_READ_SUPPORTED +/* Reset the compression stream */ +PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED); +#endif + +/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORTA(11, png_structp, png_create_read_struct_2, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), + PNG_ALLOCATED); +PNG_EXPORTA(12, png_structp, png_create_write_struct_2, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), + PNG_ALLOCATED); +#endif + +/* Write the PNG file signature. */ +PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr)); + +/* Write a PNG chunk - size, type, (optional) data, CRC. */ +PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep + chunk_name, png_const_bytep data, size_t length)); + +/* Write the start of a PNG chunk - length and chunk name. */ +PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr, + png_const_bytep chunk_name, png_uint_32 length)); + +/* Write the data of a PNG chunk started with png_write_chunk_start(). */ +PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr, + png_const_bytep data, size_t length)); + +/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ +PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr)); + +/* Allocate and initialize the info structure */ +PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr), + PNG_ALLOCATED); + +/* DEPRECATED: this function allowed init structures to be created using the + * default allocation method (typically malloc). Use is deprecated in 1.6.0 and + * the API will be removed in the future. + */ +PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr, + size_t png_info_struct_size), PNG_DEPRECATED); + +/* Writes all the PNG information before the image. */ +PNG_EXPORT(20, void, png_write_info_before_PLTE, + (png_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(21, void, png_write_info, + (png_structrp png_ptr, png_const_inforp info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the information before the actual image data. */ +PNG_EXPORT(22, void, png_read_info, + (png_structrp png_ptr, png_inforp info_ptr)); +#endif + +#ifdef PNG_TIME_RFC1123_SUPPORTED + /* Convert to a US string format: there is no localization support in this + * routine. The original implementation used a 29 character buffer in + * png_struct, this will be removed in future versions. + */ +#if PNG_LIBPNG_VER < 10700 +/* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */ +PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123, (png_structrp png_ptr, + png_const_timep ptime),PNG_DEPRECATED); +#endif +PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer, (char out[29], + png_const_timep ptime)); +#endif + +#ifdef PNG_CONVERT_tIME_SUPPORTED +/* Convert from a struct tm to png_time */ +PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime, + const struct tm * ttime)); + +/* Convert from time_t to png_time. Uses gmtime() */ +PNG_EXPORT(25, void, png_convert_from_time_t, (png_timep ptime, time_t ttime)); +#endif /* CONVERT_tIME */ + +#ifdef PNG_READ_EXPAND_SUPPORTED +/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ +PNG_EXPORT(26, void, png_set_expand, (png_structrp png_ptr)); +PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structrp png_ptr)); +PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structrp png_ptr)); +PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_EXPAND_16_SUPPORTED +/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion + * of a tRNS chunk if present. + */ +PNG_EXPORT(221, void, png_set_expand_16, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* Use blue, green, red order for pixels. */ +PNG_EXPORT(30, void, png_set_bgr, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED +/* Expand the grayscale to 24-bit RGB if necessary. */ +PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED +/* Reduce RGB to grayscale. */ +#define PNG_ERROR_ACTION_NONE 1 +#define PNG_ERROR_ACTION_WARN 2 +#define PNG_ERROR_ACTION_ERROR 3 +#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ + +PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structrp png_ptr, + int error_action, double red, double green)) +PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structrp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green)) + +PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structrp + png_ptr)); +#endif + +#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED +PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, + png_colorp palette)); +#endif + +#ifdef PNG_READ_ALPHA_MODE_SUPPORTED +/* How the alpha channel is interpreted - this affects how the color channels + * of a PNG file are returned to the calling application when an alpha channel, + * or a tRNS chunk in a palette file, is present. + * + * This has no effect on the way pixels are written into a PNG output + * datastream. The color samples in a PNG datastream are never premultiplied + * with the alpha samples. + * + * The default is to return data according to the PNG specification: the alpha + * channel is a linear measure of the contribution of the pixel to the + * corresponding composited pixel, and the color channels are unassociated + * (not premultiplied). The gamma encoded color channels must be scaled + * according to the contribution and to do this it is necessary to undo + * the encoding, scale the color values, perform the composition and re-encode + * the values. This is the 'PNG' mode. + * + * The alternative is to 'associate' the alpha with the color information by + * storing color channel values that have been scaled by the alpha. + * image. These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes + * (the latter being the two common names for associated alpha color channels). + * + * For the 'OPTIMIZED' mode, a pixel is treated as opaque only if the alpha + * value is equal to the maximum value. + * + * The final choice is to gamma encode the alpha channel as well. This is + * broken because, in practice, no implementation that uses this choice + * correctly undoes the encoding before handling alpha composition. Use this + * choice only if other serious errors in the software or hardware you use + * mandate it; the typical serious error is for dark halos to appear around + * opaque areas of the composited PNG image because of arithmetic overflow. + * + * The API function png_set_alpha_mode specifies which of these choices to use + * with an enumerated 'mode' value and the gamma of the required output: + */ +#define PNG_ALPHA_PNG 0 /* according to the PNG standard */ +#define PNG_ALPHA_STANDARD 1 /* according to Porter/Duff */ +#define PNG_ALPHA_ASSOCIATED 1 /* as above; this is the normal practice */ +#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */ +#define PNG_ALPHA_OPTIMIZED 2 /* 'PNG' for opaque pixels, else 'STANDARD' */ +#define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ + +PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structrp png_ptr, int mode, + double output_gamma)) +PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr, + int mode, png_fixed_point output_gamma)) +#endif + +#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) +/* The output_gamma value is a screen gamma in libpng terminology: it expresses + * how to decode the output values, not how they are encoded. + */ +#define PNG_DEFAULT_sRGB -1 /* sRGB gamma and color space */ +#define PNG_GAMMA_MAC_18 -2 /* Old Mac '1.8' gamma and color space */ +#define PNG_GAMMA_sRGB 220000 /* Television standards--matches sRGB gamma */ +#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ +#endif + +/* The following are examples of calls to png_set_alpha_mode to achieve the + * required overall gamma correction and, where necessary, alpha + * premultiplication. + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); + * This is the default libpng handling of the alpha channel - it is not + * pre-multiplied into the color components. In addition the call states + * that the output is for a sRGB system and causes all PNG files without gAMA + * chunks to be assumed to be encoded using sRGB. + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); + * In this case the output is assumed to be something like an sRGB conformant + * display preceded by a power-law lookup table of power 1.45. This is how + * early Mac systems behaved. + * + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); + * This is the classic Jim Blinn approach and will work in academic + * environments where everything is done by the book. It has the shortcoming + * of assuming that input PNG data with no gamma information is linear - this + * is unlikely to be correct unless the PNG files where generated locally. + * Most of the time the output precision will be so low as to show + * significant banding in dark areas of the image. + * + * png_set_expand_16(pp); + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); + * This is a somewhat more realistic Jim Blinn inspired approach. PNG files + * are assumed to have the sRGB encoding if not marked with a gamma value and + * the output is always 16 bits per component. This permits accurate scaling + * and processing of the data. If you know that your input PNG files were + * generated locally you might need to replace PNG_DEFAULT_sRGB with the + * correct value for your system. + * + * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); + * If you just need to composite the PNG image onto an existing background + * and if you control the code that does this you can use the optimization + * setting. In this case you just copy completely opaque pixels to the + * output. For pixels that are not completely transparent (you just skip + * those) you do the composition math using png_composite or png_composite_16 + * below then encode the resultant 8-bit or 16-bit values to match the output + * encoding. + * + * Other cases + * If neither the PNG nor the standard linear encoding work for you because + * of the software or hardware you use then you have a big problem. The PNG + * case will probably result in halos around the image. The linear encoding + * will probably result in a washed out, too bright, image (it's actually too + * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably + * substantially reduce the halos. Alternatively try: + * + * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); + * This option will also reduce the halos, but there will be slight dark + * halos round the opaque parts of the image where the background is light. + * In the OPTIMIZED mode the halos will be light halos where the background + * is dark. Take your pick - the halos are unavoidable unless you can get + * your hardware/software fixed! (The OPTIMIZED approach is slightly + * faster.) + * + * When the default gamma of PNG files doesn't match the output gamma. + * If you have PNG files with no gamma information png_set_alpha_mode allows + * you to provide a default gamma, but it also sets the output gamma to the + * matching value. If you know your PNG files have a gamma that doesn't + * match the output you can take advantage of the fact that + * png_set_alpha_mode always sets the output gamma but only sets the PNG + * default if it is not already set: + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); + * The first call sets both the default and the output gamma values, the + * second call overrides the output gamma without changing the default. This + * is easier than achieving the same effect with png_set_gamma. You must use + * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will + * fire if more than one call to png_set_alpha_mode and png_set_background is + * made in the same read operation, however multiple calls with PNG_ALPHA_PNG + * are ignored. + */ + +#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED +PNG_EXPORT(36, void, png_set_strip_alpha, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +PNG_EXPORT(37, void, png_set_swap_alpha, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +/* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ +PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler, + int flags)); +/* The values of the PNG_FILLER_ defines should NOT be changed */ +# define PNG_FILLER_BEFORE 0 +# define PNG_FILLER_AFTER 1 +/* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ +PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr, + png_uint_32 filler, int flags)); +#endif /* READ_FILLER || WRITE_FILLER */ + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* Swap bytes in 16-bit depth files. */ +PNG_EXPORT(41, void, png_set_swap, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) +/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ +PNG_EXPORT(42, void, png_set_packing, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ + defined(PNG_WRITE_PACKSWAP_SUPPORTED) +/* Swap packing order of pixels in bytes. */ +PNG_EXPORT(43, void, png_set_packswap, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) +/* Converts files to legal bit depths. */ +PNG_EXPORT(44, void, png_set_shift, (png_structrp png_ptr, png_const_color_8p + true_bits)); +#endif + +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ + defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* Have the code handle the interlacing. Returns the number of passes. + * MUST be called before png_read_update_info or png_start_read_image, + * otherwise it will not have the desired effect. Note that it is still + * necessary to call png_read_row or png_read_rows png_get_image_height + * times for each pass. +*/ +PNG_EXPORT(45, int, png_set_interlace_handling, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +/* Invert monochrome files */ +PNG_EXPORT(46, void, png_set_invert_mono, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_BACKGROUND_SUPPORTED +/* Handle alpha and tRNS by replacing with a background color. Prior to + * libpng-1.5.4 this API must not be called before the PNG file header has been + * read. Doing so will result in unexpected behavior and possible warnings or + * errors if the PNG file contains a bKGD chunk. + */ +PNG_FP_EXPORT(47, void, png_set_background, (png_structrp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma)) +PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structrp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, png_fixed_point background_gamma)) +#endif +#ifdef PNG_READ_BACKGROUND_SUPPORTED +# define PNG_BACKGROUND_GAMMA_UNKNOWN 0 +# define PNG_BACKGROUND_GAMMA_SCREEN 1 +# define PNG_BACKGROUND_GAMMA_FILE 2 +# define PNG_BACKGROUND_GAMMA_UNIQUE 3 +#endif + +#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED +/* Scale a 16-bit depth file down to 8-bit, accurately. */ +PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED +#define PNG_READ_16_TO_8_SUPPORTED /* Name prior to 1.5.4 */ +/* Strip the second byte of information from a 16-bit depth file. */ +PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_QUANTIZE_SUPPORTED +/* Turn on quantizing, and reduce the palette to the number of colors + * available. + */ +PNG_EXPORT(49, void, png_set_quantize, (png_structrp png_ptr, + png_colorp palette, int num_palette, int maximum_colors, + png_const_uint_16p histogram, int full_quantize)); +#endif + +#ifdef PNG_READ_GAMMA_SUPPORTED +/* The threshold on gamma processing is configurable but hard-wired into the + * library. The following is the floating point variant. + */ +#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001) + +/* Handle gamma correction. Screen_gamma=(display_exponent). + * NOTE: this API simply sets the screen and file gamma values. It will + * therefore override the value for gamma in a PNG file if it is called after + * the file header has been read - use with care - call before reading the PNG + * file for best results! + * + * These routines accept the same gamma values as png_set_alpha_mode (described + * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either + * API (floating point or fixed.) Notice, however, that the 'file_gamma' value + * is the inverse of a 'screen gamma' value. + */ +PNG_FP_EXPORT(50, void, png_set_gamma, (png_structrp png_ptr, + double screen_gamma, double override_file_gamma)) +PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structrp png_ptr, + png_fixed_point screen_gamma, png_fixed_point override_file_gamma)) +#endif + +#ifdef PNG_WRITE_FLUSH_SUPPORTED +/* Set how many lines between output flushes - 0 for no flushing */ +PNG_EXPORT(51, void, png_set_flush, (png_structrp png_ptr, int nrows)); +/* Flush the current PNG output buffer */ +PNG_EXPORT(52, void, png_write_flush, (png_structrp png_ptr)); +#endif + +/* Optional update palette with requested transformations */ +PNG_EXPORT(53, void, png_start_read_image, (png_structrp png_ptr)); + +/* Optional call to update the users info structure */ +PNG_EXPORT(54, void, png_read_update_info, (png_structrp png_ptr, + png_inforp info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read one or more rows of image data. */ +PNG_EXPORT(55, void, png_read_rows, (png_structrp png_ptr, png_bytepp row, + png_bytepp display_row, png_uint_32 num_rows)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read a row of data. */ +PNG_EXPORT(56, void, png_read_row, (png_structrp png_ptr, png_bytep row, + png_bytep display_row)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the whole image into memory at once. */ +PNG_EXPORT(57, void, png_read_image, (png_structrp png_ptr, png_bytepp image)); +#endif + +/* Write a row of image data */ +PNG_EXPORT(58, void, png_write_row, (png_structrp png_ptr, + png_const_bytep row)); + +/* Write a few rows of image data: (*row) is not written; however, the type + * is declared as writeable to maintain compatibility with previous versions + * of libpng and to allow the 'display_row' array from read_rows to be passed + * unchanged to write_rows. + */ +PNG_EXPORT(59, void, png_write_rows, (png_structrp png_ptr, png_bytepp row, + png_uint_32 num_rows)); + +/* Write the image data */ +PNG_EXPORT(60, void, png_write_image, (png_structrp png_ptr, png_bytepp image)); + +/* Write the end of the PNG file. */ +PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr, + png_inforp info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the end of the PNG file. */ +PNG_EXPORT(62, void, png_read_end, (png_structrp png_ptr, png_inforp info_ptr)); +#endif + +/* Free any memory associated with the png_info_struct */ +PNG_EXPORT(63, void, png_destroy_info_struct, (png_const_structrp png_ptr, + png_infopp info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr, + png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr, + png_infopp info_ptr_ptr)); + +/* Set the libpng method of handling chunk CRC errors */ +PNG_EXPORT(66, void, png_set_crc_action, (png_structrp png_ptr, int crit_action, + int ancil_action)); + +/* Values for png_set_crc_action() say how to handle CRC errors in + * ancillary and critical chunks, and whether to use the data contained + * therein. Note that it is impossible to "discard" data in a critical + * chunk. For versions prior to 0.90, the action was always error/quit, + * whereas in version 0.90 and later, the action for CRC errors in ancillary + * chunks is warn/discard. These values should NOT be changed. + * + * value action:critical action:ancillary + */ +#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ +#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ +#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ +#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ +#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ +#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ + +#ifdef PNG_WRITE_SUPPORTED +/* These functions give the user control over the scan-line filtering in + * libpng and the compression methods used by zlib. These functions are + * mainly useful for testing, as the defaults should work with most users. + * Those users who are tight on memory or want faster performance at the + * expense of compression can modify them. See the compression library + * header file (zlib.h) for an explanation of the compression functions. + */ + +/* Set the filtering method(s) used by libpng. Currently, the only valid + * value for "method" is 0. + */ +PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method, + int filters)); +#endif /* WRITE */ + +/* Flags for png_set_filter() to say which filters to use. The flags + * are chosen so that they don't conflict with real filter types + * below, in case they are supplied instead of the #defined constants. + * These values should NOT be changed. + */ +#define PNG_NO_FILTERS 0x00 +#define PNG_FILTER_NONE 0x08 +#define PNG_FILTER_SUB 0x10 +#define PNG_FILTER_UP 0x20 +#define PNG_FILTER_AVG 0x40 +#define PNG_FILTER_PAETH 0x80 +#define PNG_FAST_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP) +#define PNG_ALL_FILTERS (PNG_FAST_FILTERS | PNG_FILTER_AVG | PNG_FILTER_PAETH) + +/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. + * These defines should NOT be changed. + */ +#define PNG_FILTER_VALUE_NONE 0 +#define PNG_FILTER_VALUE_SUB 1 +#define PNG_FILTER_VALUE_UP 2 +#define PNG_FILTER_VALUE_AVG 3 +#define PNG_FILTER_VALUE_PAETH 4 +#define PNG_FILTER_VALUE_LAST 5 + +#ifdef PNG_WRITE_SUPPORTED +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */ +PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr, + int heuristic_method, int num_weights, png_const_doublep filter_weights, + png_const_doublep filter_costs)) +PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, + (png_structrp png_ptr, int heuristic_method, int num_weights, + png_const_fixed_point_p filter_weights, + png_const_fixed_point_p filter_costs)) +#endif /* WRITE_WEIGHTED_FILTER */ + +/* The following are no longer used and will be removed from libpng-1.7: */ +#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ +#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ +#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ +#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ + +/* Set the library compression level. Currently, valid values range from + * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 + * (0 - no compression, 9 - "maximal" compression). Note that tests have + * shown that zlib compression levels 3-6 usually perform as well as level 9 + * for PNG images, and do considerably fewer calculations. In the future, + * these values may not correspond directly to the zlib compression levels. + */ +#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED +PNG_EXPORT(69, void, png_set_compression_level, (png_structrp png_ptr, + int level)); + +PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structrp png_ptr, + int mem_level)); + +PNG_EXPORT(71, void, png_set_compression_strategy, (png_structrp png_ptr, + int strategy)); + +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a + * smaller value of window_bits if it can do so safely. + */ +PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structrp png_ptr, + int window_bits)); + +PNG_EXPORT(73, void, png_set_compression_method, (png_structrp png_ptr, + int method)); +#endif /* WRITE_CUSTOMIZE_COMPRESSION */ + +#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED +/* Also set zlib parameters for compressing non-IDAT chunks */ +PNG_EXPORT(222, void, png_set_text_compression_level, (png_structrp png_ptr, + int level)); + +PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structrp png_ptr, + int mem_level)); + +PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structrp png_ptr, + int strategy)); + +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a + * smaller value of window_bits if it can do so safely. + */ +PNG_EXPORT(225, void, png_set_text_compression_window_bits, + (png_structrp png_ptr, int window_bits)); + +PNG_EXPORT(226, void, png_set_text_compression_method, (png_structrp png_ptr, + int method)); +#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */ +#endif /* WRITE */ + +/* These next functions are called for input/output, memory, and error + * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, + * and call standard C I/O routines such as fread(), fwrite(), and + * fprintf(). These functions can be made to use other I/O routines + * at run time for those applications that need to handle I/O in a + * different manner by calling png_set_???_fn(). See libpng-manual.txt for + * more information. + */ + +#ifdef PNG_STDIO_SUPPORTED +/* Initialize the input/output for the PNG file to the default functions. */ +PNG_EXPORT(74, void, png_init_io, (png_structrp png_ptr, png_FILE_p fp)); +#endif + +/* Replace the (error and abort), and warning functions with user + * supplied functions. If no messages are to be printed you must still + * write and use replacement functions. The replacement error_fn should + * still do a longjmp to the last setjmp location if you are using this + * method of error handling. If error_fn or warning_fn is NULL, the + * default function will be used. + */ + +PNG_EXPORT(75, void, png_set_error_fn, (png_structrp png_ptr, + png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); + +/* Return the user pointer associated with the error functions */ +PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structrp png_ptr)); + +/* Replace the default data output functions with a user supplied one(s). + * If buffered output is not used, then output_flush_fn can be set to NULL. + * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time + * output_flush_fn will be ignored (and thus can be NULL). + * It is probably a mistake to use NULL for output_flush_fn if + * write_data_fn is not also NULL unless you have built libpng with + * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's + * default flush function, which uses the standard *FILE structure, will + * be used. + */ +PNG_EXPORT(77, void, png_set_write_fn, (png_structrp png_ptr, png_voidp io_ptr, + png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); + +/* Replace the default data input function with a user supplied one. */ +PNG_EXPORT(78, void, png_set_read_fn, (png_structrp png_ptr, png_voidp io_ptr, + png_rw_ptr read_data_fn)); + +/* Return the user pointer associated with the I/O functions */ +PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_const_structrp png_ptr)); + +PNG_EXPORT(80, void, png_set_read_status_fn, (png_structrp png_ptr, + png_read_status_ptr read_row_fn)); + +PNG_EXPORT(81, void, png_set_write_status_fn, (png_structrp png_ptr, + png_write_status_ptr write_row_fn)); + +#ifdef PNG_USER_MEM_SUPPORTED +/* Replace the default memory allocation functions with user supplied one(s). */ +PNG_EXPORT(82, void, png_set_mem_fn, (png_structrp png_ptr, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +/* Return the user pointer associated with the memory functions */ +PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structrp png_ptr)); +#endif + +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structrp png_ptr, + png_user_transform_ptr read_user_transform_fn)); +#endif + +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structrp png_ptr, + png_user_transform_ptr write_user_transform_fn)); +#endif + +#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED +PNG_EXPORT(86, void, png_set_user_transform_info, (png_structrp png_ptr, + png_voidp user_transform_ptr, int user_transform_depth, + int user_transform_channels)); +/* Return the user pointer associated with the user transform functions */ +PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr, + (png_const_structrp png_ptr)); +#endif + +#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED +/* Return information about the row currently being processed. Note that these + * APIs do not fail but will return unexpected results if called outside a user + * transform callback. Also note that when transforming an interlaced image the + * row number is the row number within the sub-image of the interlace pass, so + * the value will increase to the height of the sub-image (not the full image) + * then reset to 0 for the next pass. + * + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to + * find the output pixel (x,y) given an interlaced sub-image pixel + * (row,col,pass). (See below for these macros.) + */ +PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structrp)); +PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp)); +#endif + +#ifdef PNG_READ_USER_CHUNKS_SUPPORTED +/* This callback is called only for *unknown* chunks. If + * PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known + * chunks to be treated as unknown, however in this case the callback must do + * any processing required by the chunk (e.g. by calling the appropriate + * png_set_ APIs.) + * + * There is no write support - on write, by default, all the chunks in the + * 'unknown' list are written in the specified position. + * + * The integer return from the callback function is interpreted thus: + * + * negative: An error occurred; png_chunk_error will be called. + * zero: The chunk was not handled, the chunk will be saved. A critical + * chunk will cause an error at this point unless it is to be saved. + * positive: The chunk was handled, libpng will ignore/discard it. + * + * See "INTERACTION WITH USER CHUNK CALLBACKS" below for important notes about + * how this behavior will change in libpng 1.7 + */ +PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr, + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structrp png_ptr)); +#endif + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +/* Sets the function callbacks for the push reader, and a pointer to a + * user-defined structure available to the callback functions. + */ +PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structrp png_ptr, + png_voidp progressive_ptr, png_progressive_info_ptr info_fn, + png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); + +/* Returns the user pointer associated with the push read functions */ +PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, + (png_const_structrp png_ptr)); + +/* Function to be called when data becomes available */ +PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr, + png_inforp info_ptr, png_bytep buffer, size_t buffer_size)); + +/* A function which may be called *only* within png_process_data to stop the + * processing of any more data. The function returns the number of bytes + * remaining, excluding any that libpng has cached internally. A subsequent + * call to png_process_data must supply these bytes again. If the argument + * 'save' is set to true the routine will first save all the pending data and + * will always return 0. + */ +PNG_EXPORT(219, size_t, png_process_data_pause, (png_structrp, int save)); + +/* A function which may be called *only* outside (after) a call to + * png_process_data. It returns the number of bytes of data to skip in the + * input. Normally it will return 0, but if it returns a non-zero value the + * application must skip than number of bytes of input data and pass the + * following data to the next call to png_process_data. + */ +PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structrp)); + +/* Function that combines rows. 'new_row' is a flag that should come from + * the callback and be non-NULL if anything needs to be done; the library + * stores its own version of the new data internally and ignores the passed + * in value. + */ +PNG_EXPORT(93, void, png_progressive_combine_row, (png_const_structrp png_ptr, + png_bytep old_row, png_const_bytep new_row)); +#endif /* PROGRESSIVE_READ */ + +PNG_EXPORTA(94, png_voidp, png_malloc, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); +/* Added at libpng version 1.4.0 */ +PNG_EXPORTA(95, png_voidp, png_calloc, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); + +/* Added at libpng version 1.2.4 */ +PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); + +/* Frees a pointer allocated by png_malloc() */ +PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr)); + +/* Free data that was allocated internally */ +PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_32 free_me, int num)); + +/* Reassign the responsibility for freeing existing data, whether allocated + * by libpng or by the application; this works on the png_info structure passed + * in, without changing the state for other png_info structures. + */ +PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr, + png_inforp info_ptr, int freer, png_uint_32 mask)); + +/* Assignments for png_data_freer */ +#define PNG_DESTROY_WILL_FREE_DATA 1 +#define PNG_SET_WILL_FREE_DATA 1 +#define PNG_USER_WILL_FREE_DATA 2 +/* Flags for png_ptr->free_me and info_ptr->free_me */ +#define PNG_FREE_HIST 0x0008U +#define PNG_FREE_ICCP 0x0010U +#define PNG_FREE_SPLT 0x0020U +#define PNG_FREE_ROWS 0x0040U +#define PNG_FREE_PCAL 0x0080U +#define PNG_FREE_SCAL 0x0100U +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_FREE_UNKN 0x0200U +#endif +/* PNG_FREE_LIST 0x0400U removed in 1.6.0 because it is ignored */ +#define PNG_FREE_PLTE 0x1000U +#define PNG_FREE_TRNS 0x2000U +#define PNG_FREE_TEXT 0x4000U +#define PNG_FREE_EXIF 0x8000U /* Added at libpng-1.6.31 */ +#define PNG_FREE_ALL 0xffffU +#define PNG_FREE_MUL 0x4220U /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ + +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED PNG_DEPRECATED); +PNG_EXPORTA(101, void, png_free_default, (png_const_structrp png_ptr, + png_voidp ptr), PNG_DEPRECATED); +#endif + +#ifdef PNG_ERROR_TEXT_SUPPORTED +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORTA(102, void, png_error, (png_const_structrp png_ptr, + png_const_charp error_message), PNG_NORETURN); + +/* The same, but the chunk name is prepended to the error string. */ +PNG_EXPORTA(103, void, png_chunk_error, (png_const_structrp png_ptr, + png_const_charp error_message), PNG_NORETURN); + +#else +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORTA(104, void, png_err, (png_const_structrp png_ptr), PNG_NORETURN); +# define png_error(s1,s2) png_err(s1) +# define png_chunk_error(s1,s2) png_err(s1) +#endif + +#ifdef PNG_WARNINGS_SUPPORTED +/* Non-fatal error in libpng. Can continue, but may have a problem. */ +PNG_EXPORT(105, void, png_warning, (png_const_structrp png_ptr, + png_const_charp warning_message)); + +/* Non-fatal error in libpng, chunk name is prepended to message. */ +PNG_EXPORT(106, void, png_chunk_warning, (png_const_structrp png_ptr, + png_const_charp warning_message)); +#else +# define png_warning(s1,s2) ((void)(s1)) +# define png_chunk_warning(s1,s2) ((void)(s1)) +#endif + +#ifdef PNG_BENIGN_ERRORS_SUPPORTED +/* Benign error in libpng. Can continue, but may have a problem. + * User can choose whether to handle as a fatal error or as a warning. */ +PNG_EXPORT(107, void, png_benign_error, (png_const_structrp png_ptr, + png_const_charp warning_message)); + +#ifdef PNG_READ_SUPPORTED +/* Same, chunk name is prepended to message (only during read) */ +PNG_EXPORT(108, void, png_chunk_benign_error, (png_const_structrp png_ptr, + png_const_charp warning_message)); +#endif + +PNG_EXPORT(109, void, png_set_benign_errors, + (png_structrp png_ptr, int allowed)); +#else +# ifdef PNG_ALLOW_BENIGN_ERRORS +# define png_benign_error png_warning +# define png_chunk_benign_error png_chunk_warning +# else +# define png_benign_error png_error +# define png_chunk_benign_error png_chunk_error +# endif +#endif + +/* The png_set_ functions are for storing values in the png_info_struct. + * Similarly, the png_get_ calls are used to read values from the + * png_info_struct, either storing the parameters in the passed variables, or + * setting pointers into the png_info_struct where the data is stored. The + * png_get_ functions return a non-zero value if the data was available + * in info_ptr, or return zero and do not change any of the parameters if the + * data was not available. + * + * These functions should be used instead of directly accessing png_info + * to avoid problems with future changes in the size and internal layout of + * png_info_struct. + */ +/* Returns "flag" if chunk data is valid in info_ptr. */ +PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 flag)); + +/* Returns number of bytes needed to hold a transformed row. */ +PNG_EXPORT(111, size_t, png_get_rowbytes, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* Returns row_pointers, which is an array of pointers to scanlines that was + * returned from png_read_png(). + */ +PNG_EXPORT(112, png_bytepp, png_get_rows, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Set row_pointers, which is an array of pointers to scanlines for use + * by png_write_png(). + */ +PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr, + png_inforp info_ptr, png_bytepp row_pointers)); +#endif + +/* Returns number of color channels in image. */ +PNG_EXPORT(114, png_byte, png_get_channels, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +#ifdef PNG_EASY_ACCESS_SUPPORTED +/* Returns image width in pixels. */ +PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image height in pixels. */ +PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image bit_depth. */ +PNG_EXPORT(117, png_byte, png_get_bit_depth, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image color_type. */ +PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image filter_type. */ +PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image interlace_type. */ +PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image compression_type. */ +PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image resolution in pixels per meter, from pHYs chunk data. */ +PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +/* Returns pixel aspect ratio, computed from pHYs chunk data. */ +PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) + +/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ +PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(128, png_int_32, png_get_x_offset_microns, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(129, png_int_32, png_get_y_offset_microns, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +#endif /* EASY_ACCESS */ + +#ifdef PNG_READ_SUPPORTED +/* Returns pointer to signature string read from PNG header */ +PNG_EXPORT(130, png_const_bytep, png_get_signature, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); +#endif + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(131, png_uint_32, png_get_bKGD, (png_const_structrp png_ptr, + png_inforp info_ptr, png_color_16p *background)); +#endif + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(132, void, png_set_bKGD, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_color_16p background)); +#endif + +#ifdef PNG_cHRM_SUPPORTED +PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structrp png_ptr, + png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x, + double *red_y, double *green_x, double *green_y, double *blue_x, + double *blue_y)) +PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_const_structrp png_ptr, + png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z, + double *green_X, double *green_Y, double *green_Z, double *blue_X, + double *blue_Y, double *blue_Z)) +PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + png_fixed_point *int_white_x, png_fixed_point *int_white_y, + png_fixed_point *int_red_x, png_fixed_point *int_red_y, + png_fixed_point *int_green_x, png_fixed_point *int_green_y, + png_fixed_point *int_blue_x, png_fixed_point *int_blue_y)) +PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + png_fixed_point *int_red_X, png_fixed_point *int_red_Y, + png_fixed_point *int_red_Z, png_fixed_point *int_green_X, + png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, + png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, + png_fixed_point *int_blue_Z)) +#endif + +#ifdef PNG_cHRM_SUPPORTED +PNG_FP_EXPORT(135, void, png_set_cHRM, (png_const_structrp png_ptr, + png_inforp info_ptr, + double white_x, double white_y, double red_x, double red_y, double green_x, + double green_y, double blue_x, double blue_y)) +PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_const_structrp png_ptr, + png_inforp info_ptr, double red_X, double red_Y, double red_Z, + double green_X, double green_Y, double green_Z, double blue_X, + double blue_Y, double blue_Z)) +PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, png_fixed_point int_white_x, + png_fixed_point int_white_y, png_fixed_point int_red_x, + png_fixed_point int_red_y, png_fixed_point int_green_x, + png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)) +PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, + png_fixed_point int_red_Z, png_fixed_point int_green_X, + png_fixed_point int_green_Y, png_fixed_point int_green_Z, + png_fixed_point int_blue_X, png_fixed_point int_blue_Y, + png_fixed_point int_blue_Z)) +#endif + +#ifdef PNG_cICP_SUPPORTED +PNG_EXPORT(250, png_uint_32, png_get_cICP, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_bytep colour_primaries, + png_bytep transfer_function, png_bytep matrix_coefficients, + png_bytep video_full_range_flag)); +#endif + +#ifdef PNG_cICP_SUPPORTED +PNG_EXPORT(251, void, png_set_cICP, (png_const_structrp png_ptr, + png_inforp info_ptr, png_byte colour_primaries, + png_byte transfer_function, png_byte matrix_coefficients, + png_byte video_full_range_flag)); +#endif + +#ifdef PNG_cLLI_SUPPORTED +PNG_FP_EXPORT(252, png_uint_32, png_get_cLLI, (png_const_structrp png_ptr, + png_const_inforp info_ptr, double *maximum_content_light_level, + double *maximum_frame_average_light_level)) +PNG_FIXED_EXPORT(253, png_uint_32, png_get_cLLI_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + /* The values below are in cd/m2 (nits) and are scaled by 10,000; not + * 100,000 as in the case of png_fixed_point. + */ + png_uint_32p maximum_content_light_level_scaled_by_10000, + png_uint_32p maximum_frame_average_light_level_scaled_by_10000)) +#endif + +#ifdef PNG_cLLI_SUPPORTED +PNG_FP_EXPORT(254, void, png_set_cLLI, (png_const_structrp png_ptr, + png_inforp info_ptr, double maximum_content_light_level, + double maximum_frame_average_light_level)) +PNG_FIXED_EXPORT(255, void, png_set_cLLI_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, + /* The values below are in cd/m2 (nits) and are scaled by 10,000; not + * 100,000 as in the case of png_fixed_point. + */ + png_uint_32 maximum_content_light_level_scaled_by_10000, + png_uint_32 maximum_frame_average_light_level_scaled_by_10000)) +#endif + +#ifdef PNG_eXIf_SUPPORTED +PNG_EXPORT(246, png_uint_32, png_get_eXIf, (png_const_structrp png_ptr, + png_inforp info_ptr, png_bytep *exif)); +PNG_EXPORT(247, void, png_set_eXIf, (png_const_structrp png_ptr, + png_inforp info_ptr, png_bytep exif)); + +PNG_EXPORT(248, png_uint_32, png_get_eXIf_1, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *num_exif, png_bytep *exif)); +PNG_EXPORT(249, void, png_set_eXIf_1, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_32 num_exif, png_bytep exif)); +#endif + +#ifdef PNG_gAMA_SUPPORTED +PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structrp png_ptr, + png_const_inforp info_ptr, double *file_gamma)) +PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + png_fixed_point *int_file_gamma)) +#endif + +#ifdef PNG_gAMA_SUPPORTED +PNG_FP_EXPORT(139, void, png_set_gAMA, (png_const_structrp png_ptr, + png_inforp info_ptr, double file_gamma)) +PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, png_fixed_point int_file_gamma)) +#endif + +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(141, png_uint_32, png_get_hIST, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_16p *hist)); +PNG_EXPORT(142, void, png_set_hIST, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_uint_16p hist)); +#endif + +PNG_EXPORT(143, png_uint_32, png_get_IHDR, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height, + int *bit_depth, int *color_type, int *interlace_method, + int *compression_method, int *filter_method)); + +PNG_EXPORT(144, void, png_set_IHDR, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, + int color_type, int interlace_method, int compression_method, + int filter_method)); + +#ifdef PNG_mDCV_SUPPORTED +PNG_FP_EXPORT(256, png_uint_32, png_get_mDCV, (png_const_structrp png_ptr, + png_const_inforp info_ptr, + /* The chromaticities of the mastering display. As cHRM, but independent of + * the encoding endpoints in cHRM, or cICP, or iCCP. These values will + * always be in the range 0 to 1.3107. + */ + double *white_x, double *white_y, double *red_x, double *red_y, + double *green_x, double *green_y, double *blue_x, double *blue_y, + /* Mastering display luminance in cd/m2 (nits). */ + double *mastering_display_maximum_luminance, + double *mastering_display_minimum_luminance)) + +PNG_FIXED_EXPORT(257, png_uint_32, png_get_mDCV_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + png_fixed_point *int_white_x, png_fixed_point *int_white_y, + png_fixed_point *int_red_x, png_fixed_point *int_red_y, + png_fixed_point *int_green_x, png_fixed_point *int_green_y, + png_fixed_point *int_blue_x, png_fixed_point *int_blue_y, + /* Mastering display luminance in cd/m2 (nits) multiplied (scaled) by + * 10,000. + */ + png_uint_32p mastering_display_maximum_luminance_scaled_by_10000, + png_uint_32p mastering_display_minimum_luminance_scaled_by_10000)) +#endif + +#ifdef PNG_mDCV_SUPPORTED +PNG_FP_EXPORT(258, void, png_set_mDCV, (png_const_structrp png_ptr, + png_inforp info_ptr, + /* The chromaticities of the mastering display. As cHRM, but independent of + * the encoding endpoints in cHRM, or cICP, or iCCP. + */ + double white_x, double white_y, double red_x, double red_y, double green_x, + double green_y, double blue_x, double blue_y, + /* Mastering display luminance in cd/m2 (nits). */ + double mastering_display_maximum_luminance, + double mastering_display_minimum_luminance)) + +PNG_FIXED_EXPORT(259, void, png_set_mDCV_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, + /* The admissible range of these values is not the full range of a PNG + * fixed point value. Negative values cannot be encoded and the maximum + * value is about 1.3 */ + png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, + png_fixed_point int_green_x, png_fixed_point int_green_y, + png_fixed_point int_blue_x, png_fixed_point int_blue_y, + /* These are PNG unsigned 4 byte values: 31-bit unsigned values. The MSB + * must be zero. + */ + png_uint_32 mastering_display_maximum_luminance_scaled_by_10000, + png_uint_32 mastering_display_minimum_luminance_scaled_by_10000)) +#endif + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(145, png_uint_32, png_get_oFFs, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, + int *unit_type)); +#endif + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(146, void, png_set_oFFs, (png_const_structrp png_ptr, + png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y, + int unit_type)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(147, png_uint_32, png_get_pCAL, (png_const_structrp png_ptr, + png_inforp info_ptr, png_charp *purpose, png_int_32 *X0, + png_int_32 *X1, int *type, int *nparams, png_charp *units, + png_charpp *params)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(148, void, png_set_pCAL, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1, + int type, int nparams, png_const_charp units, png_charpp params)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(149, png_uint_32, png_get_pHYs, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, + int *unit_type)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(150, void, png_set_pHYs, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); +#endif + +PNG_EXPORT(151, png_uint_32, png_get_PLTE, (png_const_structrp png_ptr, + png_inforp info_ptr, png_colorp *palette, int *num_palette)); + +PNG_EXPORT(152, void, png_set_PLTE, (png_structrp png_ptr, + png_inforp info_ptr, png_const_colorp palette, int num_palette)); + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(153, png_uint_32, png_get_sBIT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_color_8p *sig_bit)); +#endif + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(154, void, png_set_sBIT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_color_8p sig_bit)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structrp png_ptr, + png_const_inforp info_ptr, int *file_srgb_intent)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(156, void, png_set_sRGB, (png_const_structrp png_ptr, + png_inforp info_ptr, int srgb_intent)); +PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_const_structrp png_ptr, + png_inforp info_ptr, int srgb_intent)); +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(158, png_uint_32, png_get_iCCP, (png_const_structrp png_ptr, + png_inforp info_ptr, png_charpp name, int *compression_type, + png_bytepp profile, png_uint_32 *proflen)); +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(159, void, png_set_iCCP, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_charp name, int compression_type, + png_const_bytep profile, png_uint_32 proflen)); +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(160, int, png_get_sPLT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_sPLT_tpp entries)); +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(161, void, png_set_sPLT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)); +#endif + +#ifdef PNG_TEXT_SUPPORTED +/* png_get_text also returns the number of text chunks in *num_text */ +PNG_EXPORT(162, int, png_get_text, (png_const_structrp png_ptr, + png_inforp info_ptr, png_textp *text_ptr, int *num_text)); +#endif + +/* Note while png_set_text() will accept a structure whose text, + * language, and translated keywords are NULL pointers, the structure + * returned by png_get_text will always contain regular + * zero-terminated C strings. They might be empty strings but + * they will never be NULL pointers. + */ + +#ifdef PNG_TEXT_SUPPORTED +PNG_EXPORT(163, void, png_set_text, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_textp text_ptr, int num_text)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(164, png_uint_32, png_get_tIME, (png_const_structrp png_ptr, + png_inforp info_ptr, png_timep *mod_time)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(165, void, png_set_tIME, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_timep mod_time)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(166, png_uint_32, png_get_tRNS, (png_const_structrp png_ptr, + png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans, + png_color_16p *trans_color)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr, + png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans, + png_const_color_16p trans_color)); +#endif + +#ifdef PNG_sCAL_SUPPORTED +PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr, + png_const_inforp info_ptr, int *unit, double *width, double *height)) +#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \ + defined(PNG_FLOATING_POINT_SUPPORTED) +/* NOTE: this API is currently implemented using floating point arithmetic, + * consequently it can only be used on systems with floating point support. + * In any case the range of values supported by png_fixed_point is small and it + * is highly recommended that png_get_sCAL_s be used instead. + */ +PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, + png_fixed_point *width, png_fixed_point *height)) +#endif +PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, + (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, + png_charpp swidth, png_charpp sheight)); + +PNG_FP_EXPORT(170, void, png_set_sCAL, (png_const_structrp png_ptr, + png_inforp info_ptr, int unit, double width, double height)) +PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, int unit, png_fixed_point width, + png_fixed_point height)) +PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr, + png_inforp info_ptr, int unit, + png_const_charp swidth, png_const_charp sheight)); +#endif /* sCAL */ + +#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED +/* Provide the default handling for all unknown chunks or, optionally, for + * specific unknown chunks. + * + * NOTE: prior to 1.6.0 the handling specified for particular chunks on read was + * ignored and the default was used, the per-chunk setting only had an effect on + * write. If you wish to have chunk-specific handling on read in code that must + * work on earlier versions you must use a user chunk callback to specify the + * desired handling (keep or discard.) + * + * The 'keep' parameter is a PNG_HANDLE_CHUNK_ value as listed below. The + * parameter is interpreted as follows: + * + * READ: + * PNG_HANDLE_CHUNK_AS_DEFAULT: + * Known chunks: do normal libpng processing, do not keep the chunk (but + * see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED) + * Unknown chunks: for a specific chunk use the global default, when used + * as the default discard the chunk data. + * PNG_HANDLE_CHUNK_NEVER: + * Discard the chunk data. + * PNG_HANDLE_CHUNK_IF_SAFE: + * Keep the chunk data if the chunk is not critical else raise a chunk + * error. + * PNG_HANDLE_CHUNK_ALWAYS: + * Keep the chunk data. + * + * If the chunk data is saved it can be retrieved using png_get_unknown_chunks, + * below. Notice that specifying "AS_DEFAULT" as a global default is equivalent + * to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks + * it simply resets the behavior to the libpng default. + * + * INTERACTION WITH USER CHUNK CALLBACKS: + * The per-chunk handling is always used when there is a png_user_chunk_ptr + * callback and the callback returns 0; the chunk is then always stored *unless* + * it is critical and the per-chunk setting is other than ALWAYS. Notice that + * the global default is *not* used in this case. (In effect the per-chunk + * value is incremented to at least IF_SAFE.) + * + * IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and + * per-chunk defaults will be honored. If you want to preserve the current + * behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE + * as the default - if you don't do this libpng 1.6 will issue a warning. + * + * If you want unhandled unknown chunks to be discarded in libpng 1.6 and + * earlier simply return '1' (handled). + * + * PNG_HANDLE_AS_UNKNOWN_SUPPORTED: + * If this is *not* set known chunks will always be handled by libpng and + * will never be stored in the unknown chunk list. Known chunks listed to + * png_set_keep_unknown_chunks will have no effect. If it is set then known + * chunks listed with a keep other than AS_DEFAULT will *never* be processed + * by libpng, in addition critical chunks must either be processed by the + * callback or saved. + * + * The IHDR and IEND chunks must not be listed. Because this turns off the + * default handling for chunks that would otherwise be recognized the + * behavior of libpng transformations may well become incorrect! + * + * WRITE: + * When writing chunks the options only apply to the chunks specified by + * png_set_unknown_chunks (below), libpng will *always* write known chunks + * required by png_set_ calls and will always write the core critical chunks + * (as required for PLTE). + * + * Each chunk in the png_set_unknown_chunks list is looked up in the + * png_set_keep_unknown_chunks list to find the keep setting, this is then + * interpreted as follows: + * + * PNG_HANDLE_CHUNK_AS_DEFAULT: + * Write safe-to-copy chunks and write other chunks if the global + * default is set to _ALWAYS, otherwise don't write this chunk. + * PNG_HANDLE_CHUNK_NEVER: + * Do not write the chunk. + * PNG_HANDLE_CHUNK_IF_SAFE: + * Write the chunk if it is safe-to-copy, otherwise do not write it. + * PNG_HANDLE_CHUNK_ALWAYS: + * Write the chunk. + * + * Note that the default behavior is effectively the opposite of the read case - + * in read unknown chunks are not stored by default, in write they are written + * by default. Also the behavior of PNG_HANDLE_CHUNK_IF_SAFE is very different + * - on write the safe-to-copy bit is checked, on read the critical bit is + * checked and on read if the chunk is critical an error will be raised. + * + * num_chunks: + * =========== + * If num_chunks is positive, then the "keep" parameter specifies the manner + * for handling only those chunks appearing in the chunk_list array, + * otherwise the chunk list array is ignored. + * + * If num_chunks is 0 the "keep" parameter specifies the default behavior for + * unknown chunks, as described above. + * + * If num_chunks is negative, then the "keep" parameter specifies the manner + * for handling all unknown chunks plus all chunks recognized by libpng + * except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to + * be processed by libpng. + */ +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr, + int keep, png_const_bytep chunk_list, int num_chunks)); +#endif /* HANDLE_AS_UNKNOWN */ + +/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned; + * the result is therefore true (non-zero) if special handling is required, + * false for the default handling. + */ +PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr, + png_const_bytep chunk_name)); +#endif /* SET_UNKNOWN_CHUNKS */ + +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_unknown_chunkp unknowns, + int num_unknowns)); + /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added + * unknowns to the location currently stored in the png_struct. This is + * invariably the wrong value on write. To fix this call the following API + * for each chunk in the list with the correct location. If you know your + * code won't be compiled on earlier versions you can rely on + * png_set_unknown_chunks(write-ptr, png_get_unknown_chunks(read-ptr)) doing + * the correct thing. + */ + +PNG_EXPORT(175, void, png_set_unknown_chunk_location, + (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location)); + +PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structrp png_ptr, + png_inforp info_ptr, png_unknown_chunkpp entries)); +#endif + +/* Png_free_data() will turn off the "valid" flag for anything it frees. + * If you need to turn it off for a chunk that your application has freed, + * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); + */ +PNG_EXPORT(177, void, png_set_invalid, (png_const_structrp png_ptr, + png_inforp info_ptr, int mask)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* The "params" pointer is currently not used and is for future expansion. */ +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +PNG_EXPORT(178, void, png_read_png, (png_structrp png_ptr, png_inforp info_ptr, + int transforms, png_voidp params)); +#endif +#ifdef PNG_WRITE_SUPPORTED +PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr, + int transforms, png_voidp params)); +#endif +#endif + +PNG_EXPORT(180, png_const_charp, png_get_copyright, + (png_const_structrp png_ptr)); +PNG_EXPORT(181, png_const_charp, png_get_header_ver, + (png_const_structrp png_ptr)); +PNG_EXPORT(182, png_const_charp, png_get_header_version, + (png_const_structrp png_ptr)); +PNG_EXPORT(183, png_const_charp, png_get_libpng_ver, + (png_const_structrp png_ptr)); + +#ifdef PNG_MNG_FEATURES_SUPPORTED +PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structrp png_ptr, + png_uint_32 mng_features_permitted)); +#endif + +/* For use in png_set_keep_unknown, added to version 1.2.6 */ +#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 +#define PNG_HANDLE_CHUNK_NEVER 1 +#define PNG_HANDLE_CHUNK_IF_SAFE 2 +#define PNG_HANDLE_CHUNK_ALWAYS 3 +#define PNG_HANDLE_CHUNK_LAST 4 + +/* Strip the prepended error numbers ("#nnn ") from error and warning + * messages before passing them to the error or warning handler. + */ +#ifdef PNG_ERROR_NUMBERS_SUPPORTED +PNG_EXPORT(185, void, png_set_strip_error_numbers, (png_structrp png_ptr, + png_uint_32 strip_mode)); +#endif + +/* Added in libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +PNG_EXPORT(186, void, png_set_user_limits, (png_structrp png_ptr, + png_uint_32 user_width_max, png_uint_32 user_height_max)); +PNG_EXPORT(187, png_uint_32, png_get_user_width_max, + (png_const_structrp png_ptr)); +PNG_EXPORT(188, png_uint_32, png_get_user_height_max, + (png_const_structrp png_ptr)); +/* Added in libpng-1.4.0 */ +PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structrp png_ptr, + png_uint_32 user_chunk_cache_max)); +PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max, + (png_const_structrp png_ptr)); +/* Added in libpng-1.4.1 */ +PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structrp png_ptr, + png_alloc_size_t user_chunk_cache_max)); +PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max, + (png_const_structrp png_ptr)); +#endif + +#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) +PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +PNG_FP_EXPORT(196, float, png_get_x_offset_inches, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ +PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +#endif + +PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structrp png_ptr, + png_const_inforp info_ptr)) +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ +PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +#endif + +# ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, + int *unit_type)); +# endif /* pHYs */ +#endif /* INCH_CONVERSIONS */ + +/* Added in libpng-1.4.0 */ +#ifdef PNG_IO_STATE_SUPPORTED +PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_const_structrp png_ptr)); + +/* Removed from libpng 1.6; use png_get_io_chunk_type. */ +PNG_REMOVED(200, png_const_bytep, png_get_io_chunk_name, (png_structrp png_ptr), + PNG_DEPRECATED) + +PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type, + (png_const_structrp png_ptr)); + +/* The flags returned by png_get_io_state() are the following: */ +# define PNG_IO_NONE 0x0000 /* no I/O at this moment */ +# define PNG_IO_READING 0x0001 /* currently reading */ +# define PNG_IO_WRITING 0x0002 /* currently writing */ +# define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ +# define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ +# define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ +# define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ +# define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ +# define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ +#endif /* IO_STATE */ + +/* Interlace support. The following macros are always defined so that if + * libpng interlace handling is turned off the macros may be used to handle + * interlaced images within the application. + */ +#define PNG_INTERLACE_ADAM7_PASSES 7 + +/* Two macros to return the first row and first column of the original, + * full, image which appears in a given pass. 'pass' is in the range 0 + * to 6 and the result is in the range 0 to 7. + */ +#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) +#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7) + +/* A macro to return the offset between pixels in the output row for a pair of + * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that + * follows. Note that ROW_OFFSET is the offset from one row to the next whereas + * COL_OFFSET is from one column to the next, within a row. + */ +#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) +#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1)) + +/* Two macros to help evaluate the number of rows or columns in each + * pass. This is expressed as a shift - effectively log2 of the number or + * rows or columns in each 8x8 tile of the original image. + */ +#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) +#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3) + +/* Hence two macros to determine the number of rows or columns in a given + * pass of an image given its height or width. In fact these macros may + * return non-zero even though the sub-image is empty, because the other + * dimension may be empty for a small image. + */ +#define PNG_PASS_ROWS(height, pass) (((height)+(((1<>PNG_PASS_ROW_SHIFT(pass)) +#define PNG_PASS_COLS(width, pass) (((width)+(((1<>PNG_PASS_COL_SHIFT(pass)) + +/* For the reader row callbacks (both progressive and sequential) it is + * necessary to find the row in the output image given a row in an interlaced + * image, so two more macros: + */ +#define PNG_ROW_FROM_PASS_ROW(y_in, pass) \ + (((y_in)<>(((7-(off))-(pass))<<2)) & 0xF) | \ + ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)) + +#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \ + ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1) +#define PNG_COL_IN_INTERLACE_PASS(x, pass) \ + ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1) + +#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED +/* With these routines we avoid an integer divide, which will be slower on + * most machines. However, it does take more operations than the corresponding + * divide method, so it may be slower on a few RISC systems. There are two + * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. + * + * Note that the rounding factors are NOT supposed to be the same! 128 and + * 32768 are correct for the NODIV code; 127 and 32767 are correct for the + * standard method. + * + * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] + */ + + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ + +# define png_composite(composite, fg, alpha, bg) \ + { \ + png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ + * (png_uint_16)(alpha) \ + + (png_uint_16)(bg)*(png_uint_16)(255 \ + - (png_uint_16)(alpha)) + 128); \ + (composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); \ + } + +# define png_composite_16(composite, fg, alpha, bg) \ + { \ + png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ + * (png_uint_32)(alpha) \ + + (png_uint_32)(bg)*(65535 \ + - (png_uint_32)(alpha)) + 32768); \ + (composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); \ + } + +#else /* Standard method using integer division */ + +# define png_composite(composite, fg, alpha, bg) \ + (composite) = \ + (png_byte)(0xff & (((png_uint_16)(fg) * (png_uint_16)(alpha) + \ + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ + 127) / 255)) + +# define png_composite_16(composite, fg, alpha, bg) \ + (composite) = \ + (png_uint_16)(0xffff & (((png_uint_32)(fg) * (png_uint_32)(alpha) + \ + (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \ + 32767) / 65535)) +#endif /* READ_COMPOSITE_NODIV */ + +#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf)); +PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf)); +PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf)); +#endif + +PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_const_structrp png_ptr, + png_const_bytep buf)); +/* No png_get_int_16 -- may be added if there's a real need for it. */ + +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i)); +#endif +#ifdef PNG_SAVE_INT_32_SUPPORTED +PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i)); +#endif + +/* Place a 16-bit number into a buffer in PNG byte order. + * The parameter is declared unsigned int, not png_uint_16, + * just to avoid potential problems on pre-ANSI C compilers. + */ +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i)); +/* No png_save_int_16 -- may be added if there's a real need for it. */ +#endif + +#ifdef PNG_USE_READ_MACROS +/* Inline macros to do direct reads of bytes from the input buffer. + * The png_get_int_32() routine assumes we are using two's complement + * format for negative values, which is almost certainly true. + */ +# define PNG_get_uint_32(buf) \ + (((png_uint_32)(*(buf)) << 24) + \ + ((png_uint_32)(*((buf) + 1)) << 16) + \ + ((png_uint_32)(*((buf) + 2)) << 8) + \ + ((png_uint_32)(*((buf) + 3)))) + + /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the + * function) incorrectly returned a value of type png_uint_32. + */ +# define PNG_get_uint_16(buf) \ + ((png_uint_16) \ + (((unsigned int)(*(buf)) << 8) + \ + ((unsigned int)(*((buf) + 1))))) + +# define PNG_get_int_32(buf) \ + ((png_int_32)((*(buf) & 0x80) \ + ? -((png_int_32)(((png_get_uint_32(buf)^0xffffffffU)+1U)&0x7fffffffU)) \ + : (png_int_32)png_get_uint_32(buf))) + +/* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h, + * but defining a macro name prefixed with PNG_PREFIX. + */ +# ifndef PNG_PREFIX +# define png_get_uint_32(buf) PNG_get_uint_32(buf) +# define png_get_uint_16(buf) PNG_get_uint_16(buf) +# define png_get_int_32(buf) PNG_get_int_32(buf) +# endif +#else +# ifdef PNG_PREFIX + /* No macros; revert to the (redefined) function */ +# define PNG_get_uint_32 (png_get_uint_32) +# define PNG_get_uint_16 (png_get_uint_16) +# define PNG_get_int_32 (png_get_int_32) +# endif +#endif + +#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED +PNG_EXPORT(242, void, png_set_check_for_invalid_index, + (png_structrp png_ptr, int allowed)); +# ifdef PNG_GET_PALETTE_MAX_SUPPORTED +PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr, + png_const_infop info_ptr)); +# endif +#endif /* CHECK_FOR_INVALID_INDEX */ + +/******************************************************************************* + * Section 5: SIMPLIFIED API + ******************************************************************************* + * + * Please read the documentation in libpng-manual.txt (TODO: write said + * documentation) if you don't understand what follows. + * + * The simplified API hides the details of both libpng and the PNG file format + * itself. It allows PNG files to be read into a very limited number of + * in-memory bitmap formats or to be written from the same formats. If these + * formats do not accommodate your needs then you can, and should, use the more + * sophisticated APIs above - these support a wide variety of in-memory formats + * and a wide variety of sophisticated transformations to those formats as well + * as a wide variety of APIs to manipulate ancillary information. + * + * To read a PNG file using the simplified API: + * + * 1) Declare a 'png_image' structure (see below) on the stack, set the + * version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL + * (this is REQUIRED, your program may crash if you don't do it.) + * 2) Call the appropriate png_image_begin_read... function. + * 3) Set the png_image 'format' member to the required sample format. + * 4) Allocate a buffer for the image and, if required, the color-map. + * 5) Call png_image_finish_read to read the image and, if required, the + * color-map into your buffers. + * + * There are no restrictions on the format of the PNG input itself; all valid + * color types, bit depths, and interlace methods are acceptable, and the + * input image is transformed as necessary to the requested in-memory format + * during the png_image_finish_read() step. The only caveat is that if you + * request a color-mapped image from a PNG that is full-color or makes + * complex use of an alpha channel the transformation is extremely lossy and the + * result may look terrible. + * + * To write a PNG file using the simplified API: + * + * 1) Declare a 'png_image' structure on the stack and memset() it to all zero. + * 2) Initialize the members of the structure that describe the image, setting + * the 'format' member to the format of the image samples. + * 3) Call the appropriate png_image_write... function with a pointer to the + * image and, if necessary, the color-map to write the PNG data. + * + * png_image is a structure that describes the in-memory format of an image + * when it is being read or defines the in-memory format of an image that you + * need to write: + */ +#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \ + defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) + +#define PNG_IMAGE_VERSION 1 + +typedef struct png_control *png_controlp; +typedef struct +{ + png_controlp opaque; /* Initialize to NULL, free with png_image_free */ + png_uint_32 version; /* Set to PNG_IMAGE_VERSION */ + png_uint_32 width; /* Image width in pixels (columns) */ + png_uint_32 height; /* Image height in pixels (rows) */ + png_uint_32 format; /* Image format as defined below */ + png_uint_32 flags; /* A bit mask containing informational flags */ + png_uint_32 colormap_entries; + /* Number of entries in the color-map */ + + /* In the event of an error or warning the following field will be set to a + * non-zero value and the 'message' field will contain a '\0' terminated + * string with the libpng error or warning message. If both warnings and + * an error were encountered, only the error is recorded. If there + * are multiple warnings, only the first one is recorded. + * + * The upper 30 bits of this value are reserved, the low two bits contain + * a value as follows: + */ +# define PNG_IMAGE_WARNING 1 +# define PNG_IMAGE_ERROR 2 + /* + * The result is a two-bit code such that a value more than 1 indicates + * a failure in the API just called: + * + * 0 - no warning or error + * 1 - warning + * 2 - error + * 3 - error preceded by warning + */ +# define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1) + + png_uint_32 warning_or_error; + + char message[64]; +} png_image, *png_imagep; + +/* The samples of the image have one to four channels whose components have + * original values in the range 0 to 1.0: + * + * 1: A single gray or luminance channel (G). + * 2: A gray/luminance channel and an alpha channel (GA). + * 3: Three red, green, blue color channels (RGB). + * 4: Three color channels and an alpha channel (RGBA). + * + * The components are encoded in one of two ways: + * + * a) As a small integer, value 0..255, contained in a single byte. For the + * alpha channel the original value is simply value/255. For the color or + * luminance channels the value is encoded according to the sRGB specification + * and matches the 8-bit format expected by typical display devices. + * + * The color/gray channels are not scaled (pre-multiplied) by the alpha + * channel and are suitable for passing to color management software. + * + * b) As a value in the range 0..65535, contained in a 2-byte integer. All + * channels can be converted to the original value by dividing by 65535; all + * channels are linear. Color channels use the RGB encoding (RGB end-points) of + * the sRGB specification. This encoding is identified by the + * PNG_FORMAT_FLAG_LINEAR flag below. + * + * When the simplified API needs to convert between sRGB and linear colorspaces, + * the actual sRGB transfer curve defined in the sRGB specification (see the + * article at ) is used, not the gamma=1/2.2 + * approximation used elsewhere in libpng. + * + * When an alpha channel is present it is expected to denote pixel coverage + * of the color or luminance channels and is returned as an associated alpha + * channel: the color/gray channels are scaled (pre-multiplied) by the alpha + * value. + * + * The samples are either contained directly in the image data, between 1 and 8 + * bytes per pixel according to the encoding, or are held in a color-map indexed + * by bytes in the image data. In the case of a color-map the color-map entries + * are individual samples, encoded as above, and the image data has one byte per + * pixel to select the relevant sample from the color-map. + */ + +/* PNG_FORMAT_* + * + * #defines to be used in png_image::format. Each #define identifies a + * particular layout of sample data and, if present, alpha values. There are + * separate defines for each of the two component encodings. + * + * A format is built up using single bit flag values. All combinations are + * valid. Formats can be built up from the flag values or you can use one of + * the predefined values below. When testing formats always use the FORMAT_FLAG + * macros to test for individual features - future versions of the library may + * add new flags. + * + * When reading or writing color-mapped images the format should be set to the + * format of the entries in the color-map then png_image_{read,write}_colormap + * called to read or write the color-map and set the format correctly for the + * image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly! + * + * NOTE: libpng can be built with particular features disabled. If you see + * compiler errors because the definition of one of the following flags has been + * compiled out it is because libpng does not have the required support. It is + * possible, however, for the libpng configuration to enable the format on just + * read or just write; in that case you may see an error at run time. You can + * guard against this by checking for the definition of the appropriate + * "_SUPPORTED" macro, one of: + * + * PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED + */ +#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */ +#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */ +#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2-byte channels else 1-byte */ +#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */ + +#ifdef PNG_FORMAT_BGR_SUPPORTED +# define PNG_FORMAT_FLAG_BGR 0x10U /* BGR colors, else order is RGB */ +#endif + +#ifdef PNG_FORMAT_AFIRST_SUPPORTED +# define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */ +#endif + +#define PNG_FORMAT_FLAG_ASSOCIATED_ALPHA 0x40U /* alpha channel is associated */ + +/* Commonly used formats have predefined macros. + * + * First the single byte (sRGB) formats: + */ +#define PNG_FORMAT_GRAY 0 +#define PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA +#define PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST) +#define PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR +#define PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR) +#define PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA) +#define PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST) +#define PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA) +#define PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST) + +/* Then the linear 2-byte formats. When naming these "Y" is used to + * indicate a luminance (gray) channel. + */ +#define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR +#define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA) +#define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR) +#define PNG_FORMAT_LINEAR_RGB_ALPHA \ + (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA) + +/* With color-mapped formats the image data is one byte for each pixel, the byte + * is an index into the color-map which is formatted as above. To obtain a + * color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP + * to one of the above definitions, or you can use one of the definitions below. + */ +#define PNG_FORMAT_RGB_COLORMAP (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_BGR_COLORMAP (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP) + +/* PNG_IMAGE macros + * + * These are convenience macros to derive information from a png_image + * structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the + * actual image sample values - either the entries in the color-map or the + * pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values + * for the pixels and will always return 1 for color-mapped formats. The + * remaining macros return information about the rows in the image and the + * complete image. + * + * NOTE: All the macros that take a png_image::format parameter are compile time + * constants if the format parameter is, itself, a constant. Therefore these + * macros can be used in array declarations and case labels where required. + * Similarly the macros are also pre-processor constants (sizeof is not used) so + * they can be used in #if tests. + * + * First the information about the samples. + */ +#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\ + (((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1) + /* Return the total number of channels in a given format: 1..4 */ + +#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\ + ((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1) + /* Return the size in bytes of a single component of a pixel or color-map + * entry (as appropriate) in the image: 1 or 2. + */ + +#define PNG_IMAGE_SAMPLE_SIZE(fmt)\ + (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)) + /* This is the size of the sample data for one sample. If the image is + * color-mapped it is the size of one color-map entry (and image pixels are + * one byte in size), otherwise it is the size of one image pixel. + */ + +#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\ + (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256) + /* The maximum size of the color-map required by the format expressed in a + * count of components. This can be used to compile-time allocate a + * color-map: + * + * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)]; + * + * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)]; + * + * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the + * information from one of the png_image_begin_read_ APIs and dynamically + * allocate the required memory. + */ + +/* Corresponding information about the pixels */ +#define PNG_IMAGE_PIXEL_(test,fmt)\ + (((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt)) + +#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\ + PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt) + /* The number of separate channels (components) in a pixel; 1 for a + * color-mapped image. + */ + +#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\ + PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt) + /* The size, in bytes, of each component in a pixel; 1 for a color-mapped + * image. + */ + +#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt) + /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */ + +/* Information about the whole row, or whole image */ +#define PNG_IMAGE_ROW_STRIDE(image)\ + (PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width) + /* Return the total number of components in a single row of the image; this + * is the minimum 'row stride', the minimum count of components between each + * row. For a color-mapped image this is the minimum number of bytes in a + * row. + * + * WARNING: this macro overflows for some images with more than one component + * and very large image widths. libpng will refuse to process an image where + * this macro would overflow. + */ + +#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\ + (PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride)) + /* Return the size, in bytes, of an image buffer given a png_image and a row + * stride - the number of components to leave space for in each row. + * + * WARNING: this macro overflows a 32-bit integer for some large PNG images, + * libpng will refuse to process an image where such an overflow would occur. + */ + +#define PNG_IMAGE_SIZE(image)\ + PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image)) + /* Return the size, in bytes, of the image in memory given just a png_image; + * the row stride is the minimum stride required for the image. + */ + +#define PNG_IMAGE_COLORMAP_SIZE(image)\ + (PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries) + /* Return the size, in bytes, of the color-map of this image. If the image + * format is not a color-map format this will return a size sufficient for + * 256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if + * you don't want to allocate a color-map in this case. + */ + +/* PNG_IMAGE_FLAG_* + * + * Flags containing additional information about the image are held in the + * 'flags' field of png_image. + */ +#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01 + /* This indicates that the RGB values of the in-memory bitmap do not + * correspond to the red, green and blue end-points defined by sRGB. + */ + +#define PNG_IMAGE_FLAG_FAST 0x02 + /* On write emphasise speed over compression; the resultant PNG file will be + * larger but will be produced significantly faster, particular for large + * images. Do not use this option for images which will be distributed, only + * used it when producing intermediate files that will be read back in + * repeatedly. For a typical 24-bit image the option will double the read + * speed at the cost of increasing the image size by 25%, however for many + * more compressible images the PNG file can be 10 times larger with only a + * slight speed gain. + */ + +#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04 + /* On read if the image is a 16-bit per component image and there is no gAMA + * or sRGB chunk assume that the components are sRGB encoded. Notice that + * images output by the simplified API always have gamma information; setting + * this flag only affects the interpretation of 16-bit images from an + * external source. It is recommended that the application expose this flag + * to the user; the user can normally easily recognize the difference between + * linear and sRGB encoding. This flag has no effect on write - the data + * passed to the write APIs must have the correct encoding (as defined + * above.) + * + * If the flag is not set (the default) input 16-bit per component data is + * assumed to be linear. + * + * NOTE: the flag can only be set after the png_image_begin_read_ call, + * because that call initializes the 'flags' field. + */ + +#ifdef PNG_SIMPLIFIED_READ_SUPPORTED +/* READ APIs + * --------- + * + * The png_image passed to the read APIs must have been initialized by setting + * the png_controlp field 'opaque' to NULL (or, safer, memset the whole thing.) + */ +#ifdef PNG_STDIO_SUPPORTED +PNG_EXPORT(234, int, png_image_begin_read_from_file, (png_imagep image, + const char *file_name)); + /* The named file is opened for read and the image header is filled in + * from the PNG header in the file. + */ + +PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image, + FILE* file)); + /* The PNG header is read from the stdio FILE object. */ +#endif /* STDIO */ + +PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image, + png_const_voidp memory, size_t size)); + /* The PNG header is read from the given memory buffer. */ + +PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image, + png_const_colorp background, void *buffer, png_int_32 row_stride, + void *colormap)); + /* Finish reading the image into the supplied buffer and clean up the + * png_image structure. + * + * row_stride is the step, in byte or 2-byte units as appropriate, + * between adjacent rows. A positive stride indicates that the top-most row + * is first in the buffer - the normal top-down arrangement. A negative + * stride indicates that the bottom-most row is first in the buffer. + * + * background need only be supplied if an alpha channel must be removed from + * a png_byte format and the removal is to be done by compositing on a solid + * color; otherwise it may be NULL and any composition will be done directly + * onto the buffer. The value is an sRGB color to use for the background, + * for grayscale output the green channel is used. + * + * background must be supplied when an alpha channel must be removed from a + * single byte color-mapped output format, in other words if: + * + * 1) The original format from png_image_begin_read_from_* had + * PNG_FORMAT_FLAG_ALPHA set. + * 2) The format set by the application does not. + * 3) The format set by the application has PNG_FORMAT_FLAG_COLORMAP set and + * PNG_FORMAT_FLAG_LINEAR *not* set. + * + * For linear output removing the alpha channel is always done by compositing + * on black and background is ignored. + * + * colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set. It must + * be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE. + * image->colormap_entries will be updated to the actual number of entries + * written to the colormap; this may be less than the original value. + */ + +PNG_EXPORT(238, void, png_image_free, (png_imagep image)); + /* Free any data allocated by libpng in image->opaque, setting the pointer to + * NULL. May be called at any time after the structure is initialized. + */ +#endif /* SIMPLIFIED_READ */ + +#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED +/* WRITE APIS + * ---------- + * For write you must initialize a png_image structure to describe the image to + * be written. To do this use memset to set the whole structure to 0 then + * initialize fields describing your image. + * + * version: must be set to PNG_IMAGE_VERSION + * opaque: must be initialized to NULL + * width: image width in pixels + * height: image height in rows + * format: the format of the data (image and color-map) you wish to write + * flags: set to 0 unless one of the defined flags applies; set + * PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images where the RGB + * values do not correspond to the colors in sRGB. + * colormap_entries: set to the number of entries in the color-map (0 to 256) + */ +#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED +PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image, + const char *file, int convert_to_8bit, const void *buffer, + png_int_32 row_stride, const void *colormap)); + /* Write the image to the named file. */ + +PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file, + int convert_to_8_bit, const void *buffer, png_int_32 row_stride, + const void *colormap)); + /* Write the image to the given (FILE*). */ +#endif /* SIMPLIFIED_WRITE_STDIO */ + +/* With all write APIs if image is in one of the linear formats with 16-bit + * data then setting convert_to_8_bit will cause the output to be an 8-bit PNG + * gamma encoded according to the sRGB specification, otherwise a 16-bit linear + * encoded PNG file is written. + * + * With color-mapped data formats the colormap parameter point to a color-map + * with at least image->colormap_entries encoded in the specified format. If + * the format is linear the written PNG color-map will be converted to sRGB + * regardless of the convert_to_8_bit flag. + * + * With all APIs row_stride is handled as in the read APIs - it is the spacing + * from one row to the next in component sized units (1 or 2 bytes) and if + * negative indicates a bottom-up row layout in the buffer. If row_stride is + * zero, libpng will calculate it for you from the image width and number of + * channels. + * + * Note that the write API does not support interlacing, sub-8-bit pixels or + * most ancillary chunks. If you need to write text chunks (e.g. for copyright + * notices) you need to use one of the other APIs. + */ + +PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory, + png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8_bit, + const void *buffer, png_int_32 row_stride, const void *colormap)); + /* Write the image to the given memory buffer. The function both writes the + * whole PNG data stream to *memory and updates *memory_bytes with the count + * of bytes written. + * + * 'memory' may be NULL. In this case *memory_bytes is not read however on + * success the number of bytes which would have been written will still be + * stored in *memory_bytes. On failure *memory_bytes will contain 0. + * + * If 'memory' is not NULL it must point to memory[*memory_bytes] of + * writeable memory. + * + * If the function returns success memory[*memory_bytes] (if 'memory' is not + * NULL) contains the written PNG data. *memory_bytes will always be less + * than or equal to the original value. + * + * If the function returns false and *memory_bytes was not changed an error + * occurred during write. If *memory_bytes was changed, or is not 0 if + * 'memory' was NULL, the write would have succeeded but for the memory + * buffer being too small. *memory_bytes contains the required number of + * bytes and will be bigger that the original value. + */ + +#define png_image_write_get_memory_size(image, size, convert_to_8_bit, buffer,\ + row_stride, colormap)\ + png_image_write_to_memory(&(image), 0, &(size), convert_to_8_bit, buffer,\ + row_stride, colormap) + /* Return the amount of memory in 'size' required to compress this image. + * The png_image structure 'image' must be filled in as in the above + * function and must not be changed before the actual write call, the buffer + * and all other parameters must also be identical to that in the final + * write call. The 'size' variable need not be initialized. + * + * NOTE: the macro returns true/false, if false is returned 'size' will be + * set to zero and the write failed and probably will fail if tried again. + */ + +/* You can pre-allocate the buffer by making sure it is of sufficient size + * regardless of the amount of compression achieved. The buffer size will + * always be bigger than the original image and it will never be filled. The + * following macros are provided to assist in allocating the buffer. + */ +#define PNG_IMAGE_DATA_SIZE(image) (PNG_IMAGE_SIZE(image)+(image).height) + /* The number of uncompressed bytes in the PNG byte encoding of the image; + * uncompressing the PNG IDAT data will give this number of bytes. + * + * NOTE: while PNG_IMAGE_SIZE cannot overflow for an image in memory this + * macro can because of the extra bytes used in the PNG byte encoding. You + * need to avoid this macro if your image size approaches 2^30 in width or + * height. The same goes for the remainder of these macros; they all produce + * bigger numbers than the actual in-memory image size. + */ +#ifndef PNG_ZLIB_MAX_SIZE +# define PNG_ZLIB_MAX_SIZE(b) ((b)+(((b)+7U)>>3)+(((b)+63U)>>6)+11U) + /* An upper bound on the number of compressed bytes given 'b' uncompressed + * bytes. This is based on deflateBounds() in zlib; different + * implementations of zlib compression may conceivably produce more data so + * if your zlib implementation is not zlib itself redefine this macro + * appropriately. + */ +#endif + +#define PNG_IMAGE_COMPRESSED_SIZE_MAX(image)\ + PNG_ZLIB_MAX_SIZE((png_alloc_size_t)PNG_IMAGE_DATA_SIZE(image)) + /* An upper bound on the size of the data in the PNG IDAT chunks. */ + +#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\ + ((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\ + (((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\ + 12U+3U*(image).colormap_entries/*PLTE data*/+\ + (((image).format&PNG_FORMAT_FLAG_ALPHA)?\ + 12U/*tRNS*/+(image).colormap_entries:0U):0U)+\ + 12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size)) + /* A helper for the following macro; if your compiler cannot handle the + * following macro use this one with the result of + * PNG_IMAGE_COMPRESSED_SIZE_MAX(image) as the second argument (most + * compilers should handle this just fine.) + */ + +#define PNG_IMAGE_PNG_SIZE_MAX(image)\ + PNG_IMAGE_PNG_SIZE_MAX_(image, PNG_IMAGE_COMPRESSED_SIZE_MAX(image)) + /* An upper bound on the total length of the PNG data stream for 'image'. + * The result is of type png_alloc_size_t, on 32-bit systems this may + * overflow even though PNG_IMAGE_DATA_SIZE does not overflow; the write will + * run out of buffer space but return a corrected size which should work. + */ +#endif /* SIMPLIFIED_WRITE */ +/******************************************************************************* + * END OF SIMPLIFIED API + ******************************************************************************/ +#endif /* SIMPLIFIED_{READ|WRITE} */ + +/******************************************************************************* + * Section 6: IMPLEMENTATION OPTIONS + ******************************************************************************* + * + * Support for arbitrary implementation-specific optimizations. The API allows + * particular options to be turned on or off. 'Option' is the number of the + * option and 'onoff' is 0 (off) or non-0 (on). The value returned is given + * by the PNG_OPTION_ defines below. + * + * HARDWARE: normally hardware capabilities, such as the Intel SSE instructions, + * are detected at run time, however sometimes it may be impossible + * to do this in user mode, in which case it is necessary to discover + * the capabilities in an OS specific way. Such capabilities are + * listed here when libpng has support for them and must be turned + * ON by the application if present. + * + * SOFTWARE: sometimes software optimizations actually result in performance + * decrease on some architectures or systems, or with some sets of + * PNG images. 'Software' options allow such optimizations to be + * selected at run time. + */ +#ifdef PNG_SET_OPTION_SUPPORTED +#ifdef PNG_ARM_NEON_API_SUPPORTED +# define PNG_ARM_NEON 0 /* HARDWARE: ARM Neon SIMD instructions supported */ +#endif +#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */ +#define PNG_SKIP_sRGB_CHECK_PROFILE 4 /* SOFTWARE: Check ICC profile for sRGB */ +#ifdef PNG_MIPS_MSA_API_SUPPORTED +# define PNG_MIPS_MSA 6 /* HARDWARE: MIPS Msa SIMD instructions supported */ +#endif +#ifdef PNG_DISABLE_ADLER32_CHECK_SUPPORTED +# define PNG_IGNORE_ADLER32 8 /* SOFTWARE: disable Adler32 check on IDAT */ +#endif +#ifdef PNG_POWERPC_VSX_API_SUPPORTED +# define PNG_POWERPC_VSX 10 /* HARDWARE: PowerPC VSX SIMD instructions + * supported */ +#endif +#ifdef PNG_MIPS_MMI_API_SUPPORTED +# define PNG_MIPS_MMI 12 /* HARDWARE: MIPS MMI SIMD instructions supported */ +#endif + +#define PNG_OPTION_NEXT 14 /* Next option - numbers must be even */ + +/* Return values: NOTE: there are four values and 'off' is *not* zero */ +#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */ +#define PNG_OPTION_INVALID 1 /* Option number out of range */ +#define PNG_OPTION_OFF 2 +#define PNG_OPTION_ON 3 + +PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option, + int onoff)); +#endif /* SET_OPTION */ + +/******************************************************************************* + * END OF HARDWARE AND SOFTWARE OPTIONS + ******************************************************************************/ + +/* Maintainer: Put new public prototypes here ^, in libpng.3, in project + * defs, and in scripts/symbols.def. + */ + +/* The last ordinal number (this is the *last* one already used; the next + * one to use is one more than this.) + */ +#ifdef PNG_EXPORT_LAST_ORDINAL + PNG_EXPORT_LAST_ORDINAL(259); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* Do not put anything past this line */ +#endif /* PNG_H */ diff --git a/dependencies/linux64/include/pngconf.h b/dependencies/linux64/include/pngconf.h new file mode 100644 index 0000000..42fa973 --- /dev/null +++ b/dependencies/linux64/include/pngconf.h @@ -0,0 +1,622 @@ +/* pngconf.h - machine-configurable file for libpng + * + * libpng version 1.6.47 + * + * Copyright (c) 2018-2025 Cosmin Truta + * Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson + * Copyright (c) 1996-1997 Andreas Dilger + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + * + * Any machine specific code is near the front of this file, so if you + * are configuring libpng for a machine, you may want to read the section + * starting here down to where it starts to typedef png_color, png_text, + * and png_info. + */ + +#ifndef PNGCONF_H +#define PNGCONF_H + +#ifndef PNG_BUILDING_SYMBOL_TABLE /* else includes may cause problems */ + +/* From libpng 1.6.0 libpng requires an ANSI X3.159-1989 ("ISOC90") compliant C + * compiler for correct compilation. The following header files are required by + * the standard. If your compiler doesn't provide these header files, or they + * do not match the standard, you will need to provide/improve them. + */ +#include +#include + +/* Library header files. These header files are all defined by ISOC90; libpng + * expects conformant implementations, however, an ISOC90 conformant system need + * not provide these header files if the functionality cannot be implemented. + * In this case it will be necessary to disable the relevant parts of libpng in + * the build of pnglibconf.h. + * + * Prior to 1.6.0 string.h was included here; the API changes in 1.6.0 to not + * include this unnecessary header file. + */ + +#ifdef PNG_STDIO_SUPPORTED + /* Required for the definition of FILE: */ +# include +#endif + +#ifdef PNG_SETJMP_SUPPORTED + /* Required for the definition of jmp_buf and the declaration of longjmp: */ +# include +#endif + +#ifdef PNG_CONVERT_tIME_SUPPORTED + /* Required for struct tm: */ +# include +#endif + +#endif /* PNG_BUILDING_SYMBOL_TABLE */ + +/* Prior to 1.6.0, it was possible to turn off 'const' in declarations, + * using PNG_NO_CONST. This is no longer supported. + */ +#define PNG_CONST const /* backward compatibility only */ + +/* This controls optimization of the reading of 16-bit and 32-bit + * values from PNG files. It can be set on a per-app-file basis: it + * just changes whether a macro is used when the function is called. + * The library builder sets the default; if read functions are not + * built into the library the macro implementation is forced on. + */ +#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED +# define PNG_USE_READ_MACROS +#endif +#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) +# if PNG_DEFAULT_READ_MACROS +# define PNG_USE_READ_MACROS +# endif +#endif + +/* COMPILER SPECIFIC OPTIONS. + * + * These options are provided so that a variety of difficult compilers + * can be used. Some are fixed at build time (e.g. PNG_API_RULE + * below) but still have compiler specific implementations, others + * may be changed on a per-file basis when compiling against libpng. + */ + +/* The PNGARG macro was used in versions of libpng prior to 1.6.0 to protect + * against legacy (pre ISOC90) compilers that did not understand function + * prototypes. [Deprecated.] + */ +#ifndef PNGARG +# define PNGARG(arglist) arglist +#endif + +/* Function calling conventions. + * ============================= + * Normally it is not necessary to specify to the compiler how to call + * a function - it just does it - however on x86 systems derived from + * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems + * and some others) there are multiple ways to call a function and the + * default can be changed on the compiler command line. For this reason + * libpng specifies the calling convention of every exported function and + * every function called via a user supplied function pointer. This is + * done in this file by defining the following macros: + * + * PNGAPI Calling convention for exported functions. + * PNGCBAPI Calling convention for user provided (callback) functions. + * PNGCAPI Calling convention used by the ANSI-C library (required + * for longjmp callbacks and sometimes used internally to + * specify the calling convention for zlib). + * + * These macros should never be overridden. If it is necessary to + * change calling convention in a private build this can be done + * by setting PNG_API_RULE (which defaults to 0) to one of the values + * below to select the correct 'API' variants. + * + * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout. + * This is correct in every known environment. + * PNG_API_RULE=1 Use the operating system convention for PNGAPI and + * the 'C' calling convention (from PNGCAPI) for + * callbacks (PNGCBAPI). This is no longer required + * in any known environment - if it has to be used + * please post an explanation of the problem to the + * libpng mailing list. + * + * These cases only differ if the operating system does not use the C + * calling convention, at present this just means the above cases + * (x86 DOS/Windows systems) and, even then, this does not apply to + * Cygwin running on those systems. + * + * Note that the value must be defined in pnglibconf.h so that what + * the application uses to call the library matches the conventions + * set when building the library. + */ + +/* Symbol export + * ============= + * When building a shared library it is almost always necessary to tell + * the compiler which symbols to export. The png.h macro 'PNG_EXPORT' + * is used to mark the symbols. On some systems these symbols can be + * extracted at link time and need no special processing by the compiler, + * on other systems the symbols are flagged by the compiler and just + * the declaration requires a special tag applied (unfortunately) in a + * compiler dependent way. Some systems can do either. + * + * A small number of older systems also require a symbol from a DLL to + * be flagged to the program that calls it. This is a problem because + * we do not know in the header file included by application code that + * the symbol will come from a shared library, as opposed to a statically + * linked one. For this reason the application must tell us by setting + * the magic flag PNG_USE_DLL to turn on the special processing before + * it includes png.h. + * + * Four additional macros are used to make this happen: + * + * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from + * the build or imported if PNG_USE_DLL is set - compiler + * and system specific. + * + * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to + * 'type', compiler specific. + * + * PNG_DLL_EXPORT Set to the magic to use during a libpng build to + * make a symbol exported from the DLL. Not used in the + * public header files; see pngpriv.h for how it is used + * in the libpng build. + * + * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come + * from a DLL - used to define PNG_IMPEXP when + * PNG_USE_DLL is set. + */ + +/* System specific discovery. + * ========================== + * This code is used at build time to find PNG_IMPEXP, the API settings + * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL + * import processing is possible. On Windows systems it also sets + * compiler-specific macros to the values required to change the calling + * conventions of the various functions. + */ +#if defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || \ + defined(__CYGWIN__) + /* Windows system (DOS doesn't support DLLs). Includes builds under Cygwin or + * MinGW on any architecture currently supported by Windows. Also includes + * Watcom builds but these need special treatment because they are not + * compatible with GCC or Visual C because of different calling conventions. + */ +# if PNG_API_RULE == 2 + /* If this line results in an error, either because __watcall is not + * understood or because of a redefine just below you cannot use *this* + * build of the library with the compiler you are using. *This* build was + * build using Watcom and applications must also be built using Watcom! + */ +# define PNGCAPI __watcall +# endif + +# if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800)) +# define PNGCAPI __cdecl +# if PNG_API_RULE == 1 + /* If this line results in an error __stdcall is not understood and + * PNG_API_RULE should not have been set to '1'. + */ +# define PNGAPI __stdcall +# endif +# else + /* An older compiler, or one not detected (erroneously) above, + * if necessary override on the command line to get the correct + * variants for the compiler. + */ +# ifndef PNGCAPI +# define PNGCAPI _cdecl +# endif +# if PNG_API_RULE == 1 && !defined(PNGAPI) +# define PNGAPI _stdcall +# endif +# endif /* compiler/api */ + + /* NOTE: PNGCBAPI always defaults to PNGCAPI. */ + +# if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD) +# error "PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed" +# endif + +# if (defined(_MSC_VER) && _MSC_VER < 800) ||\ + (defined(__BORLANDC__) && __BORLANDC__ < 0x500) + /* older Borland and MSC + * compilers used '__export' and required this to be after + * the type. + */ +# ifndef PNG_EXPORT_TYPE +# define PNG_EXPORT_TYPE(type) type PNG_IMPEXP +# endif +# define PNG_DLL_EXPORT __export +# else /* newer compiler */ +# define PNG_DLL_EXPORT __declspec(dllexport) +# ifndef PNG_DLL_IMPORT +# define PNG_DLL_IMPORT __declspec(dllimport) +# endif +# endif /* compiler */ + +#else /* !Windows */ +# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) +# define PNGAPI _System +# else /* !Windows/x86 && !OS/2 */ + /* Use the defaults, or define PNG*API on the command line (but + * this will have to be done for every compile!) + */ +# endif /* other system, !OS/2 */ +#endif /* !Windows/x86 */ + +/* Now do all the defaulting . */ +#ifndef PNGCAPI +# define PNGCAPI +#endif +#ifndef PNGCBAPI +# define PNGCBAPI PNGCAPI +#endif +#ifndef PNGAPI +# define PNGAPI PNGCAPI +#endif + +/* PNG_IMPEXP may be set on the compilation system command line or (if not set) + * then in an internal header file when building the library, otherwise (when + * using the library) it is set here. + */ +#ifndef PNG_IMPEXP +# if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT) + /* This forces use of a DLL, disallowing static linking */ +# define PNG_IMPEXP PNG_DLL_IMPORT +# endif + +# ifndef PNG_IMPEXP +# define PNG_IMPEXP +# endif +#endif + +/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat + * 'attributes' as a storage class - the attributes go at the start of the + * function definition, and attributes are always appended regardless of the + * compiler. This considerably simplifies these macros but may cause problems + * if any compilers both need function attributes and fail to handle them as + * a storage class (this is unlikely.) + */ +#ifndef PNG_FUNCTION +# define PNG_FUNCTION(type, name, args, attributes) attributes type name args +#endif + +#ifndef PNG_EXPORT_TYPE +# define PNG_EXPORT_TYPE(type) PNG_IMPEXP type +#endif + + /* The ordinal value is only relevant when preprocessing png.h for symbol + * table entries, so we discard it here. See the .dfn files in the + * scripts directory. + */ + +#ifndef PNG_EXPORTA +# define PNG_EXPORTA(ordinal, type, name, args, attributes) \ + PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), args, \ + PNG_LINKAGE_API attributes) +#endif + +/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument, + * so make something non-empty to satisfy the requirement: + */ +#define PNG_EMPTY /*empty list*/ + +#define PNG_EXPORT(ordinal, type, name, args) \ + PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY) + +/* Use PNG_REMOVED to comment out a removed interface. */ +#ifndef PNG_REMOVED +# define PNG_REMOVED(ordinal, type, name, args, attributes) +#endif + +#ifndef PNG_CALLBACK +# define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) args +#endif + +/* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. + * + * Added at libpng-1.2.41. + */ + +#ifndef PNG_NO_PEDANTIC_WARNINGS +# ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED +# define PNG_PEDANTIC_WARNINGS_SUPPORTED +# endif +#endif + +#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED + /* Support for compiler specific function attributes. These are used + * so that where compiler support is available, incorrect use of API + * functions in png.h will generate compiler warnings. Added at libpng + * version 1.2.41. Disabling these removes the warnings but may also produce + * less efficient code. + */ +# if defined(__clang__) && defined(__has_attribute) + /* Clang defines both __clang__ and __GNUC__. Check __clang__ first. */ +# if !defined(PNG_USE_RESULT) && __has_attribute(__warn_unused_result__) +# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) +# endif +# if !defined(PNG_NORETURN) && __has_attribute(__noreturn__) +# define PNG_NORETURN __attribute__((__noreturn__)) +# endif +# if !defined(PNG_ALLOCATED) && __has_attribute(__malloc__) +# define PNG_ALLOCATED __attribute__((__malloc__)) +# endif +# if !defined(PNG_DEPRECATED) && __has_attribute(__deprecated__) +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# if !defined(PNG_PRIVATE) +# ifdef __has_extension +# if __has_extension(attribute_unavailable_with_message) +# define PNG_PRIVATE __attribute__((__unavailable__(\ + "This function is not exported by libpng."))) +# endif +# endif +# endif +# ifndef PNG_RESTRICT +# define PNG_RESTRICT __restrict +# endif + +# elif defined(__GNUC__) +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __attribute__((__noreturn__)) +# endif +# if __GNUC__ >= 3 +# ifndef PNG_ALLOCATED +# define PNG_ALLOCATED __attribute__((__malloc__)) +# endif +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# ifndef PNG_PRIVATE +# if 0 /* Doesn't work so we use deprecated instead*/ +# define PNG_PRIVATE \ + __attribute__((warning("This function is not exported by libpng."))) +# else +# define PNG_PRIVATE \ + __attribute__((__deprecated__)) +# endif +# endif +# if ((__GNUC__ > 3) || !defined(__GNUC_MINOR__) || (__GNUC_MINOR__ >= 1)) +# ifndef PNG_RESTRICT +# define PNG_RESTRICT __restrict +# endif +# endif /* __GNUC__.__GNUC_MINOR__ > 3.0 */ +# endif /* __GNUC__ >= 3 */ + +# elif defined(_MSC_VER) && (_MSC_VER >= 1300) +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* not supported */ +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __declspec(noreturn) +# endif +# ifndef PNG_ALLOCATED +# if (_MSC_VER >= 1400) +# define PNG_ALLOCATED __declspec(restrict) +# endif +# endif +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __declspec(deprecated) +# endif +# ifndef PNG_PRIVATE +# define PNG_PRIVATE __declspec(deprecated) +# endif +# ifndef PNG_RESTRICT +# if (_MSC_VER >= 1400) +# define PNG_RESTRICT __restrict +# endif +# endif + +# elif defined(__WATCOMC__) +# ifndef PNG_RESTRICT +# define PNG_RESTRICT __restrict +# endif +# endif +#endif /* PNG_PEDANTIC_WARNINGS */ + +#ifndef PNG_DEPRECATED +# define PNG_DEPRECATED /* Use of this function is deprecated */ +#endif +#ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* The result of this function must be checked */ +#endif +#ifndef PNG_NORETURN +# define PNG_NORETURN /* This function does not return */ +#endif +#ifndef PNG_ALLOCATED +# define PNG_ALLOCATED /* The result of the function is new memory */ +#endif +#ifndef PNG_PRIVATE +# define PNG_PRIVATE /* This is a private libpng function */ +#endif +#ifndef PNG_RESTRICT +# define PNG_RESTRICT /* The C99 "restrict" feature */ +#endif + +#ifndef PNG_FP_EXPORT /* A floating point API. */ +# ifdef PNG_FLOATING_POINT_SUPPORTED +# define PNG_FP_EXPORT(ordinal, type, name, args)\ + PNG_EXPORT(ordinal, type, name, args); +# else /* No floating point APIs */ +# define PNG_FP_EXPORT(ordinal, type, name, args) +# endif +#endif +#ifndef PNG_FIXED_EXPORT /* A fixed point API. */ +# ifdef PNG_FIXED_POINT_SUPPORTED +# define PNG_FIXED_EXPORT(ordinal, type, name, args)\ + PNG_EXPORT(ordinal, type, name, args); +# else /* No fixed point APIs */ +# define PNG_FIXED_EXPORT(ordinal, type, name, args) +# endif +#endif + +#ifndef PNG_BUILDING_SYMBOL_TABLE +/* Some typedefs to get us started. These should be safe on most of the common + * platforms. + * + * png_uint_32 and png_int_32 may, currently, be larger than required to hold a + * 32-bit value however this is not normally advisable. + * + * png_uint_16 and png_int_16 should always be two bytes in size - this is + * verified at library build time. + * + * png_byte must always be one byte in size. + * + * The checks below use constants from limits.h, as defined by the ISOC90 + * standard. + */ +#if CHAR_BIT == 8 && UCHAR_MAX == 255 + typedef unsigned char png_byte; +#else +# error "libpng requires 8-bit bytes" +#endif + +#if INT_MIN == -32768 && INT_MAX == 32767 + typedef int png_int_16; +#elif SHRT_MIN == -32768 && SHRT_MAX == 32767 + typedef short png_int_16; +#else +# error "libpng requires a signed 16-bit type" +#endif + +#if UINT_MAX == 65535 + typedef unsigned int png_uint_16; +#elif USHRT_MAX == 65535 + typedef unsigned short png_uint_16; +#else +# error "libpng requires an unsigned 16-bit type" +#endif + +#if INT_MIN < -2147483646 && INT_MAX > 2147483646 + typedef int png_int_32; +#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646 + typedef long int png_int_32; +#else +# error "libpng requires a signed 32-bit (or more) type" +#endif + +#if UINT_MAX > 4294967294U + typedef unsigned int png_uint_32; +#elif ULONG_MAX > 4294967294U + typedef unsigned long int png_uint_32; +#else +# error "libpng requires an unsigned 32-bit (or more) type" +#endif + +/* Prior to 1.6.0, it was possible to disable the use of size_t and ptrdiff_t. + * From 1.6.0 onwards, an ISO C90 compiler, as well as a standard-compliant + * behavior of sizeof and ptrdiff_t are required. + * The legacy typedefs are provided here for backwards compatibility. + */ +typedef size_t png_size_t; +typedef ptrdiff_t png_ptrdiff_t; + +/* libpng needs to know the maximum value of 'size_t' and this controls the + * definition of png_alloc_size_t, below. This maximum value of size_t limits + * but does not control the maximum allocations the library makes - there is + * direct application control of this through png_set_user_limits(). + */ +#ifndef PNG_SMALL_SIZE_T + /* Compiler specific tests for systems where size_t is known to be less than + * 32 bits (some of these systems may no longer work because of the lack of + * 'far' support; see above.) + */ +# if (defined(__TURBOC__) && !defined(__FLAT__)) ||\ + (defined(_MSC_VER) && defined(MAXSEG_64K)) +# define PNG_SMALL_SIZE_T +# endif +#endif + +/* png_alloc_size_t is guaranteed to be no smaller than size_t, and no smaller + * than png_uint_32. Casts from size_t or png_uint_32 to png_alloc_size_t are + * not necessary; in fact, it is recommended not to use them at all, so that + * the compiler can complain when something turns out to be problematic. + * + * Casts in the other direction (from png_alloc_size_t to size_t or + * png_uint_32) should be explicitly applied; however, we do not expect to + * encounter practical situations that require such conversions. + * + * PNG_SMALL_SIZE_T must be defined if the maximum value of size_t is less than + * 4294967295 - i.e. less than the maximum value of png_uint_32. + */ +#ifdef PNG_SMALL_SIZE_T + typedef png_uint_32 png_alloc_size_t; +#else + typedef size_t png_alloc_size_t; +#endif + +/* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler + * implementations of Intel CPU specific support of user-mode segmented address + * spaces, where 16-bit pointers address more than 65536 bytes of memory using + * separate 'segment' registers. The implementation requires two different + * types of pointer (only one of which includes the segment value.) + * + * If required this support is available in version 1.2 of libpng and may be + * available in versions through 1.5, although the correctness of the code has + * not been verified recently. + */ + +/* Typedef for floating-point numbers that are converted to fixed-point with a + * multiple of 100,000, e.g., gamma + */ +typedef png_int_32 png_fixed_point; + +/* Add typedefs for pointers */ +typedef void * png_voidp; +typedef const void * png_const_voidp; +typedef png_byte * png_bytep; +typedef const png_byte * png_const_bytep; +typedef png_uint_32 * png_uint_32p; +typedef const png_uint_32 * png_const_uint_32p; +typedef png_int_32 * png_int_32p; +typedef const png_int_32 * png_const_int_32p; +typedef png_uint_16 * png_uint_16p; +typedef const png_uint_16 * png_const_uint_16p; +typedef png_int_16 * png_int_16p; +typedef const png_int_16 * png_const_int_16p; +typedef char * png_charp; +typedef const char * png_const_charp; +typedef png_fixed_point * png_fixed_point_p; +typedef const png_fixed_point * png_const_fixed_point_p; +typedef size_t * png_size_tp; +typedef const size_t * png_const_size_tp; + +#ifdef PNG_STDIO_SUPPORTED +typedef FILE * png_FILE_p; +#endif + +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double * png_doublep; +typedef const double * png_const_doublep; +#endif + +/* Pointers to pointers; i.e. arrays */ +typedef png_byte * * png_bytepp; +typedef png_uint_32 * * png_uint_32pp; +typedef png_int_32 * * png_int_32pp; +typedef png_uint_16 * * png_uint_16pp; +typedef png_int_16 * * png_int_16pp; +typedef const char * * png_const_charpp; +typedef char * * png_charpp; +typedef png_fixed_point * * png_fixed_point_pp; +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double * * png_doublepp; +#endif + +/* Pointers to pointers to pointers; i.e., pointer to array */ +typedef char * * * png_charppp; + +#endif /* PNG_BUILDING_SYMBOL_TABLE */ + +#endif /* PNGCONF_H */ diff --git a/dependencies/linux64/include/pnglibconf.h b/dependencies/linux64/include/pnglibconf.h new file mode 100644 index 0000000..17245b4 --- /dev/null +++ b/dependencies/linux64/include/pnglibconf.h @@ -0,0 +1,233 @@ +/* pnglibconf.h - library build configuration */ + +/* libpng version 1.6.47 */ + +/* Copyright (c) 2018-2025 Cosmin Truta */ +/* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */ + +/* This code is released under the libpng license. */ +/* For conditions of distribution and use, see the disclaimer */ +/* and license in png.h */ + +/* pnglibconf.h */ +/* Machine generated file: DO NOT EDIT */ +/* Derived from: scripts/pnglibconf.dfa */ +#ifndef PNGLCONF_H +#define PNGLCONF_H +/* options */ +#define PNG_16BIT_SUPPORTED +#define PNG_ALIGNED_MEMORY_SUPPORTED +/*#undef PNG_ARM_NEON_API_SUPPORTED*/ +/*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/ +#define PNG_BENIGN_ERRORS_SUPPORTED +#define PNG_BENIGN_READ_ERRORS_SUPPORTED +/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/ +#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED +#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_COLORSPACE_SUPPORTED +#define PNG_CONSOLE_IO_SUPPORTED +#define PNG_CONVERT_tIME_SUPPORTED +/*#undef PNG_DISABLE_ADLER32_CHECK_SUPPORTED*/ +#define PNG_EASY_ACCESS_SUPPORTED +/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ +#define PNG_ERROR_TEXT_SUPPORTED +#define PNG_FIXED_POINT_SUPPORTED +#define PNG_FLOATING_ARITHMETIC_SUPPORTED +#define PNG_FLOATING_POINT_SUPPORTED +#define PNG_FORMAT_AFIRST_SUPPORTED +#define PNG_FORMAT_BGR_SUPPORTED +#define PNG_GAMMA_SUPPORTED +#define PNG_GET_PALETTE_MAX_SUPPORTED +#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +#define PNG_INCH_CONVERSIONS_SUPPORTED +#define PNG_INFO_IMAGE_SUPPORTED +#define PNG_IO_STATE_SUPPORTED +/*#undef PNG_MIPS_MMI_API_SUPPORTED*/ +/*#undef PNG_MIPS_MMI_CHECK_SUPPORTED*/ +/*#undef PNG_MIPS_MSA_API_SUPPORTED*/ +/*#undef PNG_MIPS_MSA_CHECK_SUPPORTED*/ +#define PNG_MNG_FEATURES_SUPPORTED +#define PNG_POINTER_INDEXING_SUPPORTED +/*#undef PNG_POWERPC_VSX_API_SUPPORTED*/ +/*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/ +#define PNG_PROGRESSIVE_READ_SUPPORTED +#define PNG_READ_16BIT_SUPPORTED +#define PNG_READ_ALPHA_MODE_SUPPORTED +#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_READ_BACKGROUND_SUPPORTED +#define PNG_READ_BGR_SUPPORTED +#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_READ_COMPOSITE_NODIV_SUPPORTED +#define PNG_READ_COMPRESSED_TEXT_SUPPORTED +#define PNG_READ_EXPAND_16_SUPPORTED +#define PNG_READ_EXPAND_SUPPORTED +#define PNG_READ_FILLER_SUPPORTED +#define PNG_READ_GAMMA_SUPPORTED +#define PNG_READ_GET_PALETTE_MAX_SUPPORTED +#define PNG_READ_GRAY_TO_RGB_SUPPORTED +#define PNG_READ_INTERLACING_SUPPORTED +#define PNG_READ_INT_FUNCTIONS_SUPPORTED +#define PNG_READ_INVERT_ALPHA_SUPPORTED +#define PNG_READ_INVERT_SUPPORTED +#define PNG_READ_OPT_PLTE_SUPPORTED +#define PNG_READ_PACKSWAP_SUPPORTED +#define PNG_READ_PACK_SUPPORTED +#define PNG_READ_QUANTIZE_SUPPORTED +#define PNG_READ_RGB_TO_GRAY_SUPPORTED +#define PNG_READ_SCALE_16_TO_8_SUPPORTED +#define PNG_READ_SHIFT_SUPPORTED +#define PNG_READ_STRIP_16_TO_8_SUPPORTED +#define PNG_READ_STRIP_ALPHA_SUPPORTED +#define PNG_READ_SUPPORTED +#define PNG_READ_SWAP_ALPHA_SUPPORTED +#define PNG_READ_SWAP_SUPPORTED +#define PNG_READ_TEXT_SUPPORTED +#define PNG_READ_TRANSFORMS_SUPPORTED +#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_READ_USER_CHUNKS_SUPPORTED +#define PNG_READ_USER_TRANSFORM_SUPPORTED +#define PNG_READ_bKGD_SUPPORTED +#define PNG_READ_cHRM_SUPPORTED +#define PNG_READ_cICP_SUPPORTED +#define PNG_READ_cLLI_SUPPORTED +#define PNG_READ_eXIf_SUPPORTED +#define PNG_READ_gAMA_SUPPORTED +#define PNG_READ_hIST_SUPPORTED +#define PNG_READ_iCCP_SUPPORTED +#define PNG_READ_iTXt_SUPPORTED +#define PNG_READ_mDCV_SUPPORTED +#define PNG_READ_oFFs_SUPPORTED +#define PNG_READ_pCAL_SUPPORTED +#define PNG_READ_pHYs_SUPPORTED +#define PNG_READ_sBIT_SUPPORTED +#define PNG_READ_sCAL_SUPPORTED +#define PNG_READ_sPLT_SUPPORTED +#define PNG_READ_sRGB_SUPPORTED +#define PNG_READ_tEXt_SUPPORTED +#define PNG_READ_tIME_SUPPORTED +#define PNG_READ_tRNS_SUPPORTED +#define PNG_READ_zTXt_SUPPORTED +#define PNG_SAVE_INT_32_SUPPORTED +#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_SEQUENTIAL_READ_SUPPORTED +#define PNG_SETJMP_SUPPORTED +#define PNG_SET_OPTION_SUPPORTED +#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_SET_USER_LIMITS_SUPPORTED +#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED +#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED +#define PNG_SIMPLIFIED_READ_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_SUPPORTED +#define PNG_STDIO_SUPPORTED +#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_TEXT_SUPPORTED +#define PNG_TIME_RFC1123_SUPPORTED +#define PNG_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_USER_CHUNKS_SUPPORTED +#define PNG_USER_LIMITS_SUPPORTED +#define PNG_USER_MEM_SUPPORTED +#define PNG_USER_TRANSFORM_INFO_SUPPORTED +#define PNG_USER_TRANSFORM_PTR_SUPPORTED +#define PNG_WARNINGS_SUPPORTED +#define PNG_WRITE_16BIT_SUPPORTED +#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_WRITE_BGR_SUPPORTED +#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED +#define PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED +#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED +#define PNG_WRITE_FILLER_SUPPORTED +#define PNG_WRITE_FILTER_SUPPORTED +#define PNG_WRITE_FLUSH_SUPPORTED +#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED +#define PNG_WRITE_INTERLACING_SUPPORTED +#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED +#define PNG_WRITE_INVERT_ALPHA_SUPPORTED +#define PNG_WRITE_INVERT_SUPPORTED +#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED +#define PNG_WRITE_PACKSWAP_SUPPORTED +#define PNG_WRITE_PACK_SUPPORTED +#define PNG_WRITE_SHIFT_SUPPORTED +#define PNG_WRITE_SUPPORTED +#define PNG_WRITE_SWAP_ALPHA_SUPPORTED +#define PNG_WRITE_SWAP_SUPPORTED +#define PNG_WRITE_TEXT_SUPPORTED +#define PNG_WRITE_TRANSFORMS_SUPPORTED +#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_WRITE_USER_TRANSFORM_SUPPORTED +#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#define PNG_WRITE_bKGD_SUPPORTED +#define PNG_WRITE_cHRM_SUPPORTED +#define PNG_WRITE_cICP_SUPPORTED +#define PNG_WRITE_cLLI_SUPPORTED +#define PNG_WRITE_eXIf_SUPPORTED +#define PNG_WRITE_gAMA_SUPPORTED +#define PNG_WRITE_hIST_SUPPORTED +#define PNG_WRITE_iCCP_SUPPORTED +#define PNG_WRITE_iTXt_SUPPORTED +#define PNG_WRITE_mDCV_SUPPORTED +#define PNG_WRITE_oFFs_SUPPORTED +#define PNG_WRITE_pCAL_SUPPORTED +#define PNG_WRITE_pHYs_SUPPORTED +#define PNG_WRITE_sBIT_SUPPORTED +#define PNG_WRITE_sCAL_SUPPORTED +#define PNG_WRITE_sPLT_SUPPORTED +#define PNG_WRITE_sRGB_SUPPORTED +#define PNG_WRITE_tEXt_SUPPORTED +#define PNG_WRITE_tIME_SUPPORTED +#define PNG_WRITE_tRNS_SUPPORTED +#define PNG_WRITE_zTXt_SUPPORTED +#define PNG_bKGD_SUPPORTED +#define PNG_cHRM_SUPPORTED +#define PNG_cICP_SUPPORTED +#define PNG_cLLI_SUPPORTED +#define PNG_eXIf_SUPPORTED +#define PNG_gAMA_SUPPORTED +#define PNG_hIST_SUPPORTED +#define PNG_iCCP_SUPPORTED +#define PNG_iTXt_SUPPORTED +#define PNG_mDCV_SUPPORTED +#define PNG_oFFs_SUPPORTED +#define PNG_pCAL_SUPPORTED +#define PNG_pHYs_SUPPORTED +#define PNG_sBIT_SUPPORTED +#define PNG_sCAL_SUPPORTED +#define PNG_sPLT_SUPPORTED +#define PNG_sRGB_SUPPORTED +#define PNG_tEXt_SUPPORTED +#define PNG_tIME_SUPPORTED +#define PNG_tRNS_SUPPORTED +#define PNG_zTXt_SUPPORTED +/* end of options */ +/* settings */ +#define PNG_API_RULE 0 +#define PNG_DEFAULT_READ_MACROS 1 +#define PNG_GAMMA_THRESHOLD_FIXED 5000 +#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE +#define PNG_INFLATE_BUF_SIZE 1024 +#define PNG_LINKAGE_API extern +#define PNG_LINKAGE_CALLBACK extern +#define PNG_LINKAGE_DATA extern +#define PNG_LINKAGE_FUNCTION extern +#define PNG_MAX_GAMMA_8 11 +#define PNG_QUANTIZE_BLUE_BITS 5 +#define PNG_QUANTIZE_GREEN_BITS 5 +#define PNG_QUANTIZE_RED_BITS 5 +#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1) +#define PNG_TEXT_Z_DEFAULT_STRATEGY 0 +#define PNG_USER_CHUNK_CACHE_MAX 1000 +#define PNG_USER_CHUNK_MALLOC_MAX 8000000 +#define PNG_USER_HEIGHT_MAX 1000000 +#define PNG_USER_WIDTH_MAX 1000000 +#define PNG_ZBUF_SIZE 8192 +#define PNG_ZLIB_VERNUM 0x1310 +#define PNG_Z_DEFAULT_COMPRESSION (-1) +#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0 +#define PNG_Z_DEFAULT_STRATEGY 1 +#define PNG_sCAL_PRECISION 5 +#define PNG_sRGB_PROFILE_CHECKS 2 +/* end of settings */ +#endif /* PNGLCONF_H */ diff --git a/dependencies/linux64/include/zconf.h b/dependencies/linux64/include/zconf.h new file mode 100644 index 0000000..cf801d3 --- /dev/null +++ b/dependencies/linux64/include/zconf.h @@ -0,0 +1,545 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +/* #undef Z_PREFIX */ +#define Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/dependencies/linux64/include/zdict.h b/dependencies/linux64/include/zdict.h new file mode 100644 index 0000000..599b793 --- /dev/null +++ b/dependencies/linux64/include/zdict.h @@ -0,0 +1,481 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_ZDICT_H +#define ZSTD_ZDICT_H + + +/*====== Dependencies ======*/ +#include /* size_t */ + +#if defined (__cplusplus) +extern "C" { +#endif + +/* ===== ZDICTLIB_API : control library symbols visibility ===== */ +#ifndef ZDICTLIB_VISIBLE + /* Backwards compatibility with old macro name */ +# ifdef ZDICTLIB_VISIBILITY +# define ZDICTLIB_VISIBLE ZDICTLIB_VISIBILITY +# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZDICTLIB_VISIBLE __attribute__ ((visibility ("default"))) +# else +# define ZDICTLIB_VISIBLE +# endif +#endif + +#ifndef ZDICTLIB_HIDDEN +# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZDICTLIB_HIDDEN __attribute__ ((visibility ("hidden"))) +# else +# define ZDICTLIB_HIDDEN +# endif +#endif + +#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZDICTLIB_API __declspec(dllexport) ZDICTLIB_VISIBLE +#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZDICTLIB_API __declspec(dllimport) ZDICTLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#else +# define ZDICTLIB_API ZDICTLIB_VISIBLE +#endif + +/******************************************************************************* + * Zstd dictionary builder + * + * FAQ + * === + * Why should I use a dictionary? + * ------------------------------ + * + * Zstd can use dictionaries to improve compression ratio of small data. + * Traditionally small files don't compress well because there is very little + * repetition in a single sample, since it is small. But, if you are compressing + * many similar files, like a bunch of JSON records that share the same + * structure, you can train a dictionary on ahead of time on some samples of + * these files. Then, zstd can use the dictionary to find repetitions that are + * present across samples. This can vastly improve compression ratio. + * + * When is a dictionary useful? + * ---------------------------- + * + * Dictionaries are useful when compressing many small files that are similar. + * The larger a file is, the less benefit a dictionary will have. Generally, + * we don't expect dictionary compression to be effective past 100KB. And the + * smaller a file is, the more we would expect the dictionary to help. + * + * How do I use a dictionary? + * -------------------------- + * + * Simply pass the dictionary to the zstd compressor with + * `ZSTD_CCtx_loadDictionary()`. The same dictionary must then be passed to + * the decompressor, using `ZSTD_DCtx_loadDictionary()`. There are other + * more advanced functions that allow selecting some options, see zstd.h for + * complete documentation. + * + * What is a zstd dictionary? + * -------------------------- + * + * A zstd dictionary has two pieces: Its header, and its content. The header + * contains a magic number, the dictionary ID, and entropy tables. These + * entropy tables allow zstd to save on header costs in the compressed file, + * which really matters for small data. The content is just bytes, which are + * repeated content that is common across many samples. + * + * What is a raw content dictionary? + * --------------------------------- + * + * A raw content dictionary is just bytes. It doesn't have a zstd dictionary + * header, a dictionary ID, or entropy tables. Any buffer is a valid raw + * content dictionary. + * + * How do I train a dictionary? + * ---------------------------- + * + * Gather samples from your use case. These samples should be similar to each + * other. If you have several use cases, you could try to train one dictionary + * per use case. + * + * Pass those samples to `ZDICT_trainFromBuffer()` and that will train your + * dictionary. There are a few advanced versions of this function, but this + * is a great starting point. If you want to further tune your dictionary + * you could try `ZDICT_optimizeTrainFromBuffer_cover()`. If that is too slow + * you can try `ZDICT_optimizeTrainFromBuffer_fastCover()`. + * + * If the dictionary training function fails, that is likely because you + * either passed too few samples, or a dictionary would not be effective + * for your data. Look at the messages that the dictionary trainer printed, + * if it doesn't say too few samples, then a dictionary would not be effective. + * + * How large should my dictionary be? + * ---------------------------------- + * + * A reasonable dictionary size, the `dictBufferCapacity`, is about 100KB. + * The zstd CLI defaults to a 110KB dictionary. You likely don't need a + * dictionary larger than that. But, most use cases can get away with a + * smaller dictionary. The advanced dictionary builders can automatically + * shrink the dictionary for you, and select the smallest size that doesn't + * hurt compression ratio too much. See the `shrinkDict` parameter. + * A smaller dictionary can save memory, and potentially speed up + * compression. + * + * How many samples should I provide to the dictionary builder? + * ------------------------------------------------------------ + * + * We generally recommend passing ~100x the size of the dictionary + * in samples. A few thousand should suffice. Having too few samples + * can hurt the dictionaries effectiveness. Having more samples will + * only improve the dictionaries effectiveness. But having too many + * samples can slow down the dictionary builder. + * + * How do I determine if a dictionary will be effective? + * ----------------------------------------------------- + * + * Simply train a dictionary and try it out. You can use zstd's built in + * benchmarking tool to test the dictionary effectiveness. + * + * # Benchmark levels 1-3 without a dictionary + * zstd -b1e3 -r /path/to/my/files + * # Benchmark levels 1-3 with a dictionary + * zstd -b1e3 -r /path/to/my/files -D /path/to/my/dictionary + * + * When should I retrain a dictionary? + * ----------------------------------- + * + * You should retrain a dictionary when its effectiveness drops. Dictionary + * effectiveness drops as the data you are compressing changes. Generally, we do + * expect dictionaries to "decay" over time, as your data changes, but the rate + * at which they decay depends on your use case. Internally, we regularly + * retrain dictionaries, and if the new dictionary performs significantly + * better than the old dictionary, we will ship the new dictionary. + * + * I have a raw content dictionary, how do I turn it into a zstd dictionary? + * ------------------------------------------------------------------------- + * + * If you have a raw content dictionary, e.g. by manually constructing it, or + * using a third-party dictionary builder, you can turn it into a zstd + * dictionary by using `ZDICT_finalizeDictionary()`. You'll also have to + * provide some samples of the data. It will add the zstd header to the + * raw content, which contains a dictionary ID and entropy tables, which + * will improve compression ratio, and allow zstd to write the dictionary ID + * into the frame, if you so choose. + * + * Do I have to use zstd's dictionary builder? + * ------------------------------------------- + * + * No! You can construct dictionary content however you please, it is just + * bytes. It will always be valid as a raw content dictionary. If you want + * a zstd dictionary, which can improve compression ratio, use + * `ZDICT_finalizeDictionary()`. + * + * What is the attack surface of a zstd dictionary? + * ------------------------------------------------ + * + * Zstd is heavily fuzz tested, including loading fuzzed dictionaries, so + * zstd should never crash, or access out-of-bounds memory no matter what + * the dictionary is. However, if an attacker can control the dictionary + * during decompression, they can cause zstd to generate arbitrary bytes, + * just like if they controlled the compressed data. + * + ******************************************************************************/ + + +/*! ZDICT_trainFromBuffer(): + * Train a dictionary from an array of samples. + * Redirect towards ZDICT_optimizeTrainFromBuffer_fastCover() single-threaded, with d=8, steps=4, + * f=20, and accel=1. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * The resulting dictionary will be saved into `dictBuffer`. + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * Note: Dictionary training will fail if there are not enough samples to construct a + * dictionary, or if most of the samples are too small (< 8 bytes being the lower limit). + * If dictionary training fails, you should use zstd without a dictionary, as the dictionary + * would've been ineffective anyways. If you believe your samples would benefit from a dictionary + * please open an issue with details, and we can look into it. + * Note: ZDICT_trainFromBuffer()'s memory usage is about 6 MB. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + */ +ZDICTLIB_API size_t ZDICT_trainFromBuffer(void* dictBuffer, size_t dictBufferCapacity, + const void* samplesBuffer, + const size_t* samplesSizes, unsigned nbSamples); + +typedef struct { + int compressionLevel; /**< optimize for a specific zstd compression level; 0 means default */ + unsigned notificationLevel; /**< Write log to stderr; 0 = none (default); 1 = errors; 2 = progression; 3 = details; 4 = debug; */ + unsigned dictID; /**< force dictID value; 0 means auto mode (32-bits random value) + * NOTE: The zstd format reserves some dictionary IDs for future use. + * You may use them in private settings, but be warned that they + * may be used by zstd in a public dictionary registry in the future. + * These dictionary IDs are: + * - low range : <= 32767 + * - high range : >= (2^31) + */ +} ZDICT_params_t; + +/*! ZDICT_finalizeDictionary(): + * Given a custom content as a basis for dictionary, and a set of samples, + * finalize dictionary by adding headers and statistics according to the zstd + * dictionary format. + * + * Samples must be stored concatenated in a flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each + * sample in order. The samples are used to construct the statistics, so they + * should be representative of what you will compress with this dictionary. + * + * The compression level can be set in `parameters`. You should pass the + * compression level you expect to use in production. The statistics for each + * compression level differ, so tuning the dictionary for the compression level + * can help quite a bit. + * + * You can set an explicit dictionary ID in `parameters`, or allow us to pick + * a random dictionary ID for you, but we can't guarantee no collisions. + * + * The dstDictBuffer and the dictContent may overlap, and the content will be + * appended to the end of the header. If the header + the content doesn't fit in + * maxDictSize the beginning of the content is truncated to make room, since it + * is presumed that the most profitable content is at the end of the dictionary, + * since that is the cheapest to reference. + * + * `maxDictSize` must be >= max(dictContentSize, ZDICT_DICTSIZE_MIN). + * + * @return: size of dictionary stored into `dstDictBuffer` (<= `maxDictSize`), + * or an error code, which can be tested by ZDICT_isError(). + * Note: ZDICT_finalizeDictionary() will push notifications into stderr if + * instructed to, using notificationLevel>0. + * NOTE: This function currently may fail in several edge cases including: + * * Not enough samples + * * Samples are uncompressible + * * Samples are all exactly the same + */ +ZDICTLIB_API size_t ZDICT_finalizeDictionary(void* dstDictBuffer, size_t maxDictSize, + const void* dictContent, size_t dictContentSize, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, + ZDICT_params_t parameters); + + +/*====== Helper functions ======*/ +ZDICTLIB_API unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize); /**< extracts dictID; @return zero if error (not a valid dictionary) */ +ZDICTLIB_API size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize); /* returns dict header size; returns a ZSTD error code on failure */ +ZDICTLIB_API unsigned ZDICT_isError(size_t errorCode); +ZDICTLIB_API const char* ZDICT_getErrorName(size_t errorCode); + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_ZDICT_H */ + +#if defined(ZDICT_STATIC_LINKING_ONLY) && !defined(ZSTD_ZDICT_H_STATIC) +#define ZSTD_ZDICT_H_STATIC + +#if defined (__cplusplus) +extern "C" { +#endif + +/* This can be overridden externally to hide static symbols. */ +#ifndef ZDICTLIB_STATIC_API +# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZDICTLIB_STATIC_API __declspec(dllexport) ZDICTLIB_VISIBLE +# elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZDICTLIB_STATIC_API __declspec(dllimport) ZDICTLIB_VISIBLE +# else +# define ZDICTLIB_STATIC_API ZDICTLIB_VISIBLE +# endif +#endif + +/* ==================================================================================== + * The definitions in this section are considered experimental. + * They should never be used with a dynamic library, as they may change in the future. + * They are provided for advanced usages. + * Use them only in association with static linking. + * ==================================================================================== */ + +#define ZDICT_DICTSIZE_MIN 256 +/* Deprecated: Remove in v1.6.0 */ +#define ZDICT_CONTENTSIZE_MIN 128 + +/*! ZDICT_cover_params_t: + * k and d are the only required parameters. + * For others, value 0 means default. + */ +typedef struct { + unsigned k; /* Segment size : constraint: 0 < k : Reasonable range [16, 2048+] */ + unsigned d; /* dmer size : constraint: 0 < d <= k : Reasonable range [6, 16] */ + unsigned steps; /* Number of steps : Only used for optimization : 0 means default (40) : Higher means more parameters checked */ + unsigned nbThreads; /* Number of threads : constraint: 0 < nbThreads : 1 means single-threaded : Only used for optimization : Ignored if ZSTD_MULTITHREAD is not defined */ + double splitPoint; /* Percentage of samples used for training: Only used for optimization : the first nbSamples * splitPoint samples will be used to training, the last nbSamples * (1 - splitPoint) samples will be used for testing, 0 means default (1.0), 1.0 when all samples are used for both training and testing */ + unsigned shrinkDict; /* Train dictionaries to shrink in size starting from the minimum size and selects the smallest dictionary that is shrinkDictMaxRegression% worse than the largest dictionary. 0 means no shrinking and 1 means shrinking */ + unsigned shrinkDictMaxRegression; /* Sets shrinkDictMaxRegression so that a smaller dictionary can be at worse shrinkDictMaxRegression% worse than the max dict size dictionary. */ + ZDICT_params_t zParams; +} ZDICT_cover_params_t; + +typedef struct { + unsigned k; /* Segment size : constraint: 0 < k : Reasonable range [16, 2048+] */ + unsigned d; /* dmer size : constraint: 0 < d <= k : Reasonable range [6, 16] */ + unsigned f; /* log of size of frequency array : constraint: 0 < f <= 31 : 1 means default(20)*/ + unsigned steps; /* Number of steps : Only used for optimization : 0 means default (40) : Higher means more parameters checked */ + unsigned nbThreads; /* Number of threads : constraint: 0 < nbThreads : 1 means single-threaded : Only used for optimization : Ignored if ZSTD_MULTITHREAD is not defined */ + double splitPoint; /* Percentage of samples used for training: Only used for optimization : the first nbSamples * splitPoint samples will be used to training, the last nbSamples * (1 - splitPoint) samples will be used for testing, 0 means default (0.75), 1.0 when all samples are used for both training and testing */ + unsigned accel; /* Acceleration level: constraint: 0 < accel <= 10, higher means faster and less accurate, 0 means default(1) */ + unsigned shrinkDict; /* Train dictionaries to shrink in size starting from the minimum size and selects the smallest dictionary that is shrinkDictMaxRegression% worse than the largest dictionary. 0 means no shrinking and 1 means shrinking */ + unsigned shrinkDictMaxRegression; /* Sets shrinkDictMaxRegression so that a smaller dictionary can be at worse shrinkDictMaxRegression% worse than the max dict size dictionary. */ + + ZDICT_params_t zParams; +} ZDICT_fastCover_params_t; + +/*! ZDICT_trainFromBuffer_cover(): + * Train a dictionary from an array of samples using the COVER algorithm. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * The resulting dictionary will be saved into `dictBuffer`. + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_trainFromBuffer_cover() requires about 9 bytes of memory for each input byte. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + */ +ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_cover( + void *dictBuffer, size_t dictBufferCapacity, + const void *samplesBuffer, const size_t *samplesSizes, unsigned nbSamples, + ZDICT_cover_params_t parameters); + +/*! ZDICT_optimizeTrainFromBuffer_cover(): + * The same requirements as above hold for all the parameters except `parameters`. + * This function tries many parameter combinations and picks the best parameters. + * `*parameters` is filled with the best parameters found, + * dictionary constructed with those parameters is stored in `dictBuffer`. + * + * All of the parameters d, k, steps are optional. + * If d is non-zero then we don't check multiple values of d, otherwise we check d = {6, 8}. + * if steps is zero it defaults to its default value. + * If k is non-zero then we don't check multiple values of k, otherwise we check steps values in [50, 2000]. + * + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * On success `*parameters` contains the parameters selected. + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_optimizeTrainFromBuffer_cover() requires about 8 bytes of memory for each input byte and additionally another 5 bytes of memory for each byte of memory for each thread. + */ +ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_cover( + void* dictBuffer, size_t dictBufferCapacity, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, + ZDICT_cover_params_t* parameters); + +/*! ZDICT_trainFromBuffer_fastCover(): + * Train a dictionary from an array of samples using a modified version of COVER algorithm. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * d and k are required. + * All other parameters are optional, will use default values if not provided + * The resulting dictionary will be saved into `dictBuffer`. + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_trainFromBuffer_fastCover() requires 6 * 2^f bytes of memory. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + */ +ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_fastCover(void *dictBuffer, + size_t dictBufferCapacity, const void *samplesBuffer, + const size_t *samplesSizes, unsigned nbSamples, + ZDICT_fastCover_params_t parameters); + +/*! ZDICT_optimizeTrainFromBuffer_fastCover(): + * The same requirements as above hold for all the parameters except `parameters`. + * This function tries many parameter combinations (specifically, k and d combinations) + * and picks the best parameters. `*parameters` is filled with the best parameters found, + * dictionary constructed with those parameters is stored in `dictBuffer`. + * All of the parameters d, k, steps, f, and accel are optional. + * If d is non-zero then we don't check multiple values of d, otherwise we check d = {6, 8}. + * if steps is zero it defaults to its default value. + * If k is non-zero then we don't check multiple values of k, otherwise we check steps values in [50, 2000]. + * If f is zero, default value of 20 is used. + * If accel is zero, default value of 1 is used. + * + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * On success `*parameters` contains the parameters selected. + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_optimizeTrainFromBuffer_fastCover() requires about 6 * 2^f bytes of memory for each thread. + */ +ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_fastCover(void* dictBuffer, + size_t dictBufferCapacity, const void* samplesBuffer, + const size_t* samplesSizes, unsigned nbSamples, + ZDICT_fastCover_params_t* parameters); + +typedef struct { + unsigned selectivityLevel; /* 0 means default; larger => select more => larger dictionary */ + ZDICT_params_t zParams; +} ZDICT_legacy_params_t; + +/*! ZDICT_trainFromBuffer_legacy(): + * Train a dictionary from an array of samples. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * The resulting dictionary will be saved into `dictBuffer`. + * `parameters` is optional and can be provided with values set to 0 to mean "default". + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * See ZDICT_trainFromBuffer() for details on failure modes. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + * Note: ZDICT_trainFromBuffer_legacy() will send notifications into stderr if instructed to, using notificationLevel>0. + */ +ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_legacy( + void* dictBuffer, size_t dictBufferCapacity, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, + ZDICT_legacy_params_t parameters); + + +/* Deprecation warnings */ +/* It is generally possible to disable deprecation warnings from compiler, + for example with -Wno-deprecated-declarations for gcc + or _CRT_SECURE_NO_WARNINGS in Visual. + Otherwise, it's also possible to manually define ZDICT_DISABLE_DEPRECATE_WARNINGS */ +#ifdef ZDICT_DISABLE_DEPRECATE_WARNINGS +# define ZDICT_DEPRECATED(message) /* disable deprecation warnings */ +#else +# define ZDICT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ +# define ZDICT_DEPRECATED(message) [[deprecated(message)]] +# elif defined(__clang__) || (ZDICT_GCC_VERSION >= 405) +# define ZDICT_DEPRECATED(message) __attribute__((deprecated(message))) +# elif (ZDICT_GCC_VERSION >= 301) +# define ZDICT_DEPRECATED(message) __attribute__((deprecated)) +# elif defined(_MSC_VER) +# define ZDICT_DEPRECATED(message) __declspec(deprecated(message)) +# else +# pragma message("WARNING: You need to implement ZDICT_DEPRECATED for this compiler") +# define ZDICT_DEPRECATED(message) +# endif +#endif /* ZDICT_DISABLE_DEPRECATE_WARNINGS */ + +ZDICT_DEPRECATED("use ZDICT_finalizeDictionary() instead") +ZDICTLIB_STATIC_API +size_t ZDICT_addEntropyTablesFromBuffer(void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples); + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_ZDICT_H_STATIC */ diff --git a/dependencies/linux64/include/zlib.h b/dependencies/linux64/include/zlib.h new file mode 100644 index 0000000..8d4b932 --- /dev/null +++ b/dependencies/linux64/include/zlib.h @@ -0,0 +1,1938 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.3.1, January 22nd, 2024 + + Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.3.1" +#define ZLIB_VERNUM 0x1310 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 3 +#define ZLIB_VER_REVISION 1 +#define ZLIB_VER_SUBREVISION 0 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip and raw deflate streams in + memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in the case of corrupted input. +*/ + +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. In that case, zlib is thread-safe. When zalloc and zfree are + Z_NULL on entry to the initialization function, they are set to internal + routines that use the standard library functions malloc() and free(). + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use by the decompressor (particularly + if the decompressor wants to decompress everything in a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion(void); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. total_in, total_out, adler, and msg are initialized. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary. Some output may be provided even if + flush is zero. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. See deflatePending(), + which can be used if desired to determine whether or not there is more output + in that case. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumulate before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed + codes block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six when the flush marker begins, in order to avoid + repeated flush markers upon calling deflate() again when avail_out == 0. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this + function must be called again with Z_FINISH and more output space (updated + avail_out) but no more input data, until it returns with Z_STREAM_END or an + error. After deflate has returned Z_STREAM_END, the only possible operations + on the stream are deflateReset or deflateEnd. + + Z_FINISH can be used in the first deflate call after deflateInit if all the + compression is to be done in a single step. In order to complete in one + call, avail_out must be at least the value returned by deflateBound (see + below). Then deflate is guaranteed to return Z_STREAM_END. If not enough + output space is provided, deflate will not return Z_STREAM_END, and it must + be called again as described above. + + deflate() sets strm->adler to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit(z_streamp strm); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + To assist in this, on return inflate() always sets strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the Adler-32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed Adler-32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained unless inflateGetHeader() is used. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is to be attempted. +*/ + + +ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy); + + This is another version of deflateInit with more compression options. The + fields zalloc, zfree and opaque must be initialized before by the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute a check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the Adler-32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler-32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + Adler-32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset(z_streamp strm); +/* + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. total_in, total_out, adler, and msg are initialized. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, + int level, + int strategy); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2(). This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression approach (which is a function of the level) or the + strategy is changed, and if there have been any deflate() calls since the + state was initialized or reset, then the input available so far is + compressed with the old level and strategy using deflate(strm, Z_BLOCK). + There are three approaches for the compression levels 0, 1..3, and 4..9 + respectively. The new level and strategy will take effect at the next call + of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. +*/ + +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, + uLong sourceLen); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. +*/ + +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, + unsigned *pending, + int *bits); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, + int bits, + int value); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, + gz_headerp head); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, + int windowBits); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an Adler-32 or a CRC-32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will *not* automatically decode concatenated gzip members. + inflate() will return Z_STREAM_END at the end of the gzip member. The state + would need to be reset to continue decoding a subsequent gzip member. This + *must* be done if there is more data after a gzip member, in order for the + decompression to be compliant with the gzip standard (RFC 1952). + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler-32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler-32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateSync(z_streamp strm); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset(z_streamp strm); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + total_in, total_out, adler, and msg are initialized. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, + int windowBits); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, + int bits, + int value); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN long ZEXPORT inflateMark(z_streamp strm); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above, or -65536 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, + gz_headerp head); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, + unsigned char FAR *window); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func)(void FAR *, + z_const unsigned char FAR * FAR *); +typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); + +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags(void); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: ZLIB_DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + +#ifndef Z_SOLO + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. +*/ + +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed data. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. +*/ + +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); + + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") + but can also include a compression level ("wb9") or a strategy: 'f' for + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression + as in "wb9F". (See the description of deflateInit2 for more information + about the strategy parameter.) 'T' will request transparent writing or + appending with no compression and not using the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + "x" when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of "e" when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); +/* + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has + been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); +/* + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called + after gzopen() or gzdopen(), and before any other calls that read or write + the file. The buffer memory allocation is always deferred to the first read + or write. Three times that size in buffer space is allocated. A larger + buffer size of, for example, 64K or 128K bytes will noticeably increase the + speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); +/* + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously + provided data is flushed before applying the parameter changes. + + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. +*/ + +ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); +/* + Read and decompress up to len uncompressed bytes from file into buf. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. +*/ + +ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, + gzFile file); +/* + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of + stdio's fread(), with size_t request and return types. If the library + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t + is an unsigned integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevertheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written + file, resetting and retrying on end-of-file, when size is not 1. +*/ + +ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); +/* + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written or 0 in case of error. +*/ + +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, + z_size_t nitems, gzFile file); +/* + Compress and write nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. +*/ + +ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); +/* + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf(), + because the secure snprintf() or vsnprintf() functions were not available. + This can be determined using zlibCompileFlags(). +*/ + +ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); +/* + Compress and write the given null-terminated string s to file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); +/* + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an + end-of-file condition is encountered. If any characters are read or if len + is one, the string is terminated with a null character. If no characters + are read due to an end-of-file or len is less than one, then the buffer is + left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. +*/ + +ZEXTERN int ZEXPORT gzputc(gzFile file, int c); +/* + Compress and write c, converted to an unsigned char, into file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc(gzFile file); +/* + Read and decompress one byte from file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. +*/ + +ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); +/* + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); +/* + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function + gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatenated gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, + z_off_t offset, int whence); + + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind(gzFile file); +/* + Rewind file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); + + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, + and is zero when starting, even if appending or reading a gzip stream from + the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); + + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example + when appending or when using gzdopen() for reading. When reading, the + offset does not include as yet unused buffered input. This information can + be used for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof(gzFile file); +/* + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set + only if the read tried to go past the end of the input, but came up short. + Therefore, just like feof(), gzeof() may return false even if there is no + more data to read, in the event that the last read request was for the exact + number of bytes remaining in the input file. This will happen if the input + file size is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect(gzFile file); +/* + Return true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) +*/ + +ZEXTERN int ZEXPORT gzclose(gzFile file); +/* + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r(gzFile file); +ZEXTERN int ZEXPORT gzclose_w(gzFile file); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); +/* + Return the error message for the last error which occurred on file. + errnum is set to zlib error number. If an error occurred in the file system + and not in the compression library, errnum is set to Z_ERRNO and the + application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr(gzFile file); +/* + Clear the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + +#endif /* !Z_SOLO */ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. An Adler-32 value is in the range of a 32-bit + unsigned integer. If buf is Z_NULL, this function returns the required + initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, + z_size_t len); +/* + Same as adler32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, + z_off_t len2); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. +*/ + +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. + If buf is Z_NULL, this function returns the required initial value for the + crc. Pre- and post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, + z_size_t len); +/* + Same as crc32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. len2 must be non-negative. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); + + Return the operator corresponding to length len2, to be used with + crc32_combine_op(). len2 must be non-negative. +*/ + +ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); +/* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than + crc32_combine() if the generated op is used more than once. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, + const char *version, int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size); +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#endif + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#ifdef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); +#endif + +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# define z_crc32_combine_gen z_crc32_combine_gen64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# define crc32_combine_gen crc32_combine_gen64 +# endif +# ifndef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +#endif + +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); + +#endif /* !Z_SOLO */ + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); +#if defined(_WIN32) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, + const char *mode); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, + const char *format, + va_list va); +# endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/dependencies/linux64/include/zstd.h b/dependencies/linux64/include/zstd.h new file mode 100644 index 0000000..8504694 --- /dev/null +++ b/dependencies/linux64/include/zstd.h @@ -0,0 +1,3209 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_H_235446 +#define ZSTD_H_235446 + + +/* ====== Dependencies ======*/ +#include /* size_t */ + +#include "zstd_errors.h" /* list of errors */ +#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY) +#include /* INT_MAX */ +#endif /* ZSTD_STATIC_LINKING_ONLY */ + +#if defined (__cplusplus) +extern "C" { +#endif + +/* ===== ZSTDLIB_API : control library symbols visibility ===== */ +#ifndef ZSTDLIB_VISIBLE + /* Backwards compatibility with old macro name */ +# ifdef ZSTDLIB_VISIBILITY +# define ZSTDLIB_VISIBLE ZSTDLIB_VISIBILITY +# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDLIB_VISIBLE __attribute__ ((visibility ("default"))) +# else +# define ZSTDLIB_VISIBLE +# endif +#endif + +#ifndef ZSTDLIB_HIDDEN +# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDLIB_HIDDEN __attribute__ ((visibility ("hidden"))) +# else +# define ZSTDLIB_HIDDEN +# endif +#endif + +#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBLE +#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZSTDLIB_API __declspec(dllimport) ZSTDLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#else +# define ZSTDLIB_API ZSTDLIB_VISIBLE +#endif + +/* Deprecation warnings : + * Should these warnings be a problem, it is generally possible to disable them, + * typically with -Wno-deprecated-declarations for gcc or _CRT_SECURE_NO_WARNINGS in Visual. + * Otherwise, it's also possible to define ZSTD_DISABLE_DEPRECATE_WARNINGS. + */ +#ifdef ZSTD_DISABLE_DEPRECATE_WARNINGS +# define ZSTD_DEPRECATED(message) /* disable deprecation warnings */ +#else +# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ +# define ZSTD_DEPRECATED(message) [[deprecated(message)]] +# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__) || defined(__IAR_SYSTEMS_ICC__) +# define ZSTD_DEPRECATED(message) __attribute__((deprecated(message))) +# elif defined(__GNUC__) && (__GNUC__ >= 3) +# define ZSTD_DEPRECATED(message) __attribute__((deprecated)) +# elif defined(_MSC_VER) +# define ZSTD_DEPRECATED(message) __declspec(deprecated(message)) +# else +# pragma message("WARNING: You need to implement ZSTD_DEPRECATED for this compiler") +# define ZSTD_DEPRECATED(message) +# endif +#endif /* ZSTD_DISABLE_DEPRECATE_WARNINGS */ + + +/******************************************************************************* + Introduction + + zstd, short for Zstandard, is a fast lossless compression algorithm, targeting + real-time compression scenarios at zlib-level and better compression ratios. + The zstd compression library provides in-memory compression and decompression + functions. + + The library supports regular compression levels from 1 up to ZSTD_maxCLevel(), + which is currently 22. Levels >= 20, labeled `--ultra`, should be used with + caution, as they require more memory. The library also offers negative + compression levels, which extend the range of speed vs. ratio preferences. + The lower the level, the faster the speed (at the cost of compression). + + Compression can be done in: + - a single step (described as Simple API) + - a single step, reusing a context (described as Explicit context) + - unbounded multiple steps (described as Streaming compression) + + The compression ratio achievable on small data can be highly improved using + a dictionary. Dictionary compression can be performed in: + - a single step (described as Simple dictionary API) + - a single step, reusing a dictionary (described as Bulk-processing + dictionary API) + + Advanced experimental functions can be accessed using + `#define ZSTD_STATIC_LINKING_ONLY` before including zstd.h. + + Advanced experimental APIs should never be used with a dynamically-linked + library. They are not "stable"; their definitions or signatures may change in + the future. Only static linking is allowed. +*******************************************************************************/ + +/*------ Version ------*/ +#define ZSTD_VERSION_MAJOR 1 +#define ZSTD_VERSION_MINOR 5 +#define ZSTD_VERSION_RELEASE 8 +#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE) + +/*! ZSTD_versionNumber() : + * Return runtime library version, the value is (MAJOR*100*100 + MINOR*100 + RELEASE). */ +ZSTDLIB_API unsigned ZSTD_versionNumber(void); + +#define ZSTD_LIB_VERSION ZSTD_VERSION_MAJOR.ZSTD_VERSION_MINOR.ZSTD_VERSION_RELEASE +#define ZSTD_QUOTE(str) #str +#define ZSTD_EXPAND_AND_QUOTE(str) ZSTD_QUOTE(str) +#define ZSTD_VERSION_STRING ZSTD_EXPAND_AND_QUOTE(ZSTD_LIB_VERSION) + +/*! ZSTD_versionString() : + * Return runtime library version, like "1.4.5". Requires v1.3.0+. */ +ZSTDLIB_API const char* ZSTD_versionString(void); + +/* ************************************* + * Default constant + ***************************************/ +#ifndef ZSTD_CLEVEL_DEFAULT +# define ZSTD_CLEVEL_DEFAULT 3 +#endif + +/* ************************************* + * Constants + ***************************************/ + +/* All magic numbers are supposed read/written to/from files/memory using little-endian convention */ +#define ZSTD_MAGICNUMBER 0xFD2FB528 /* valid since v0.8.0 */ +#define ZSTD_MAGIC_DICTIONARY 0xEC30A437 /* valid since v0.7.0 */ +#define ZSTD_MAGIC_SKIPPABLE_START 0x184D2A50 /* all 16 values, from 0x184D2A50 to 0x184D2A5F, signal the beginning of a skippable frame */ +#define ZSTD_MAGIC_SKIPPABLE_MASK 0xFFFFFFF0 + +#define ZSTD_BLOCKSIZELOG_MAX 17 +#define ZSTD_BLOCKSIZE_MAX (1<= ZSTD_compressBound(srcSize)` guarantees that zstd will have + * enough space to successfully compress the data. + * @return : compressed size written into `dst` (<= `dstCapacity), + * or an error code if it fails (which can be tested using ZSTD_isError()). */ +ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + int compressionLevel); + +/*! ZSTD_decompress() : + * `compressedSize` : must be the _exact_ size of some number of compressed and/or skippable frames. + * Multiple compressed frames can be decompressed at once with this method. + * The result will be the concatenation of all decompressed frames, back to back. + * `dstCapacity` is an upper bound of originalSize to regenerate. + * First frame's decompressed size can be extracted using ZSTD_getFrameContentSize(). + * If maximum upper bound isn't known, prefer using streaming mode to decompress data. + * @return : the number of bytes decompressed into `dst` (<= `dstCapacity`), + * or an errorCode if it fails (which can be tested using ZSTD_isError()). */ +ZSTDLIB_API size_t ZSTD_decompress( void* dst, size_t dstCapacity, + const void* src, size_t compressedSize); + + +/*====== Decompression helper functions ======*/ + +/*! ZSTD_getFrameContentSize() : requires v1.3.0+ + * `src` should point to the start of a ZSTD encoded frame. + * `srcSize` must be at least as large as the frame header. + * hint : any size >= `ZSTD_frameHeaderSize_max` is large enough. + * @return : - decompressed size of `src` frame content, if known + * - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined + * - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) + * note 1 : a 0 return value means the frame is valid but "empty". + * When invoking this method on a skippable frame, it will return 0. + * note 2 : decompressed size is an optional field, it may not be present (typically in streaming mode). + * When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. + * In which case, it's necessary to use streaming mode to decompress data. + * Optionally, application can rely on some implicit limit, + * as ZSTD_decompress() only needs an upper bound of decompressed size. + * (For example, data could be necessarily cut into blocks <= 16 KB). + * note 3 : decompressed size is always present when compression is completed using single-pass functions, + * such as ZSTD_compress(), ZSTD_compressCCtx() ZSTD_compress_usingDict() or ZSTD_compress_usingCDict(). + * note 4 : decompressed size can be very large (64-bits value), + * potentially larger than what local system can handle as a single memory segment. + * In which case, it's necessary to use streaming mode to decompress data. + * note 5 : If source is untrusted, decompressed size could be wrong or intentionally modified. + * Always ensure return value fits within application's authorized limits. + * Each application can set its own limits. + * note 6 : This function replaces ZSTD_getDecompressedSize() */ +#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1) +#define ZSTD_CONTENTSIZE_ERROR (0ULL - 2) +ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize); + +/*! ZSTD_getDecompressedSize() (obsolete): + * This function is now obsolete, in favor of ZSTD_getFrameContentSize(). + * Both functions work the same way, but ZSTD_getDecompressedSize() blends + * "empty", "unknown" and "error" results to the same return value (0), + * while ZSTD_getFrameContentSize() gives them separate return values. + * @return : decompressed size of `src` frame content _if known and not empty_, 0 otherwise. */ +ZSTD_DEPRECATED("Replaced by ZSTD_getFrameContentSize") +ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize); + +/*! ZSTD_findFrameCompressedSize() : Requires v1.4.0+ + * `src` should point to the start of a ZSTD frame or skippable frame. + * `srcSize` must be >= first frame size + * @return : the compressed size of the first frame starting at `src`, + * suitable to pass as `srcSize` to `ZSTD_decompress` or similar, + * or an error code if input is invalid + * Note 1: this method is called _find*() because it's not enough to read the header, + * it may have to scan through the frame's content, to reach its end. + * Note 2: this method also works with Skippable Frames. In which case, + * it returns the size of the complete skippable frame, + * which is always equal to its content size + 8 bytes for headers. */ +ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize); + + +/*====== Compression helper functions ======*/ + +/*! ZSTD_compressBound() : + * maximum compressed size in worst case single-pass scenario. + * When invoking `ZSTD_compress()`, or any other one-pass compression function, + * it's recommended to provide @dstCapacity >= ZSTD_compressBound(srcSize) + * as it eliminates one potential failure scenario, + * aka not enough room in dst buffer to write the compressed frame. + * Note : ZSTD_compressBound() itself can fail, if @srcSize >= ZSTD_MAX_INPUT_SIZE . + * In which case, ZSTD_compressBound() will return an error code + * which can be tested using ZSTD_isError(). + * + * ZSTD_COMPRESSBOUND() : + * same as ZSTD_compressBound(), but as a macro. + * It can be used to produce constants, which can be useful for static allocation, + * for example to size a static array on stack. + * Will produce constant value 0 if srcSize is too large. + */ +#define ZSTD_MAX_INPUT_SIZE ((sizeof(size_t)==8) ? 0xFF00FF00FF00FF00ULL : 0xFF00FF00U) +#define ZSTD_COMPRESSBOUND(srcSize) (((size_t)(srcSize) >= ZSTD_MAX_INPUT_SIZE) ? 0 : (srcSize) + ((srcSize)>>8) + (((srcSize) < (128<<10)) ? (((128<<10) - (srcSize)) >> 11) /* margin, from 64 to 0 */ : 0)) /* this formula ensures that bound(A) + bound(B) <= bound(A+B) as long as A and B >= 128 KB */ +ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size in worst case single-pass scenario */ + + +/*====== Error helper functions ======*/ +/* ZSTD_isError() : + * Most ZSTD_* functions returning a size_t value can be tested for error, + * using ZSTD_isError(). + * @return 1 if error, 0 otherwise + */ +ZSTDLIB_API unsigned ZSTD_isError(size_t result); /*!< tells if a `size_t` function result is an error code */ +ZSTDLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult); /* convert a result into an error code, which can be compared to error enum list */ +ZSTDLIB_API const char* ZSTD_getErrorName(size_t result); /*!< provides readable string from a function result */ +ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed, requires v1.4.0+ */ +ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compression level available */ +ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compression level, specified by ZSTD_CLEVEL_DEFAULT, requires v1.5.0+ */ + + +/*************************************** +* Explicit context +***************************************/ +/*= Compression context + * When compressing many times, + * it is recommended to allocate a compression context just once, + * and reuse it for each successive compression operation. + * This will make the workload easier for system's memory. + * Note : re-using context is just a speed / resource optimization. + * It doesn't change the compression ratio, which remains identical. + * Note 2: For parallel execution in multi-threaded environments, + * use one different context per thread . + */ +typedef struct ZSTD_CCtx_s ZSTD_CCtx; +ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void); +ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* compatible with NULL pointer */ + +/*! ZSTD_compressCCtx() : + * Same as ZSTD_compress(), using an explicit ZSTD_CCtx. + * Important : in order to mirror `ZSTD_compress()` behavior, + * this function compresses at the requested compression level, + * __ignoring any other advanced parameter__ . + * If any advanced parameter was set using the advanced API, + * they will all be reset. Only @compressionLevel remains. + */ +ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + int compressionLevel); + +/*= Decompression context + * When decompressing many times, + * it is recommended to allocate a context only once, + * and reuse it for each successive compression operation. + * This will make workload friendlier for system's memory. + * Use one context per thread for parallel execution. */ +typedef struct ZSTD_DCtx_s ZSTD_DCtx; +ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx(void); +ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /* accept NULL pointer */ + +/*! ZSTD_decompressDCtx() : + * Same as ZSTD_decompress(), + * requires an allocated ZSTD_DCtx. + * Compatible with sticky parameters (see below). + */ +ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize); + + +/********************************************* +* Advanced compression API (Requires v1.4.0+) +**********************************************/ + +/* API design : + * Parameters are pushed one by one into an existing context, + * using ZSTD_CCtx_set*() functions. + * Pushed parameters are sticky : they are valid for next compressed frame, and any subsequent frame. + * "sticky" parameters are applicable to `ZSTD_compress2()` and `ZSTD_compressStream*()` ! + * __They do not apply to one-shot variants such as ZSTD_compressCCtx()__ . + * + * It's possible to reset all parameters to "default" using ZSTD_CCtx_reset(). + * + * This API supersedes all other "advanced" API entry points in the experimental section. + * In the future, we expect to remove API entry points from experimental which are redundant with this API. + */ + + +/* Compression strategies, listed from fastest to strongest */ +typedef enum { ZSTD_fast=1, + ZSTD_dfast=2, + ZSTD_greedy=3, + ZSTD_lazy=4, + ZSTD_lazy2=5, + ZSTD_btlazy2=6, + ZSTD_btopt=7, + ZSTD_btultra=8, + ZSTD_btultra2=9 + /* note : new strategies _might_ be added in the future. + Only the order (from fast to strong) is guaranteed */ +} ZSTD_strategy; + +typedef enum { + + /* compression parameters + * Note: When compressing with a ZSTD_CDict these parameters are superseded + * by the parameters used to construct the ZSTD_CDict. + * See ZSTD_CCtx_refCDict() for more info (superseded-by-cdict). */ + ZSTD_c_compressionLevel=100, /* Set compression parameters according to pre-defined cLevel table. + * Note that exact compression parameters are dynamically determined, + * depending on both compression level and srcSize (when known). + * Default level is ZSTD_CLEVEL_DEFAULT==3. + * Special: value 0 means default, which is controlled by ZSTD_CLEVEL_DEFAULT. + * Note 1 : it's possible to pass a negative compression level. + * Note 2 : setting a level does not automatically set all other compression parameters + * to default. Setting this will however eventually dynamically impact the compression + * parameters which have not been manually set. The manually set + * ones will 'stick'. */ + /* Advanced compression parameters : + * It's possible to pin down compression parameters to some specific values. + * In which case, these values are no longer dynamically selected by the compressor */ + ZSTD_c_windowLog=101, /* Maximum allowed back-reference distance, expressed as power of 2. + * This will set a memory budget for streaming decompression, + * with larger values requiring more memory + * and typically compressing more. + * Must be clamped between ZSTD_WINDOWLOG_MIN and ZSTD_WINDOWLOG_MAX. + * Special: value 0 means "use default windowLog". + * Note: Using a windowLog greater than ZSTD_WINDOWLOG_LIMIT_DEFAULT + * requires explicitly allowing such size at streaming decompression stage. */ + ZSTD_c_hashLog=102, /* Size of the initial probe table, as a power of 2. + * Resulting memory usage is (1 << (hashLog+2)). + * Must be clamped between ZSTD_HASHLOG_MIN and ZSTD_HASHLOG_MAX. + * Larger tables improve compression ratio of strategies <= dFast, + * and improve speed of strategies > dFast. + * Special: value 0 means "use default hashLog". */ + ZSTD_c_chainLog=103, /* Size of the multi-probe search table, as a power of 2. + * Resulting memory usage is (1 << (chainLog+2)). + * Must be clamped between ZSTD_CHAINLOG_MIN and ZSTD_CHAINLOG_MAX. + * Larger tables result in better and slower compression. + * This parameter is useless for "fast" strategy. + * It's still useful when using "dfast" strategy, + * in which case it defines a secondary probe table. + * Special: value 0 means "use default chainLog". */ + ZSTD_c_searchLog=104, /* Number of search attempts, as a power of 2. + * More attempts result in better and slower compression. + * This parameter is useless for "fast" and "dFast" strategies. + * Special: value 0 means "use default searchLog". */ + ZSTD_c_minMatch=105, /* Minimum size of searched matches. + * Note that Zstandard can still find matches of smaller size, + * it just tweaks its search algorithm to look for this size and larger. + * Larger values increase compression and decompression speed, but decrease ratio. + * Must be clamped between ZSTD_MINMATCH_MIN and ZSTD_MINMATCH_MAX. + * Note that currently, for all strategies < btopt, effective minimum is 4. + * , for all strategies > fast, effective maximum is 6. + * Special: value 0 means "use default minMatchLength". */ + ZSTD_c_targetLength=106, /* Impact of this field depends on strategy. + * For strategies btopt, btultra & btultra2: + * Length of Match considered "good enough" to stop search. + * Larger values make compression stronger, and slower. + * For strategy fast: + * Distance between match sampling. + * Larger values make compression faster, and weaker. + * Special: value 0 means "use default targetLength". */ + ZSTD_c_strategy=107, /* See ZSTD_strategy enum definition. + * The higher the value of selected strategy, the more complex it is, + * resulting in stronger and slower compression. + * Special: value 0 means "use default strategy". */ + + ZSTD_c_targetCBlockSize=130, /* v1.5.6+ + * Attempts to fit compressed block size into approximately targetCBlockSize. + * Bound by ZSTD_TARGETCBLOCKSIZE_MIN and ZSTD_TARGETCBLOCKSIZE_MAX. + * Note that it's not a guarantee, just a convergence target (default:0). + * No target when targetCBlockSize == 0. + * This is helpful in low bandwidth streaming environments to improve end-to-end latency, + * when a client can make use of partial documents (a prominent example being Chrome). + * Note: this parameter is stable since v1.5.6. + * It was present as an experimental parameter in earlier versions, + * but it's not recommended using it with earlier library versions + * due to massive performance regressions. + */ + /* LDM mode parameters */ + ZSTD_c_enableLongDistanceMatching=160, /* Enable long distance matching. + * This parameter is designed to improve compression ratio + * for large inputs, by finding large matches at long distance. + * It increases memory usage and window size. + * Note: enabling this parameter increases default ZSTD_c_windowLog to 128 MB + * except when expressly set to a different value. + * Note: will be enabled by default if ZSTD_c_windowLog >= 128 MB and + * compression strategy >= ZSTD_btopt (== compression level 16+) */ + ZSTD_c_ldmHashLog=161, /* Size of the table for long distance matching, as a power of 2. + * Larger values increase memory usage and compression ratio, + * but decrease compression speed. + * Must be clamped between ZSTD_HASHLOG_MIN and ZSTD_HASHLOG_MAX + * default: windowlog - 7. + * Special: value 0 means "automatically determine hashlog". */ + ZSTD_c_ldmMinMatch=162, /* Minimum match size for long distance matcher. + * Larger/too small values usually decrease compression ratio. + * Must be clamped between ZSTD_LDM_MINMATCH_MIN and ZSTD_LDM_MINMATCH_MAX. + * Special: value 0 means "use default value" (default: 64). */ + ZSTD_c_ldmBucketSizeLog=163, /* Log size of each bucket in the LDM hash table for collision resolution. + * Larger values improve collision resolution but decrease compression speed. + * The maximum value is ZSTD_LDM_BUCKETSIZELOG_MAX. + * Special: value 0 means "use default value" (default: 3). */ + ZSTD_c_ldmHashRateLog=164, /* Frequency of inserting/looking up entries into the LDM hash table. + * Must be clamped between 0 and (ZSTD_WINDOWLOG_MAX - ZSTD_HASHLOG_MIN). + * Default is MAX(0, (windowLog - ldmHashLog)), optimizing hash table usage. + * Larger values improve compression speed. + * Deviating far from default value will likely result in a compression ratio decrease. + * Special: value 0 means "automatically determine hashRateLog". */ + + /* frame parameters */ + ZSTD_c_contentSizeFlag=200, /* Content size will be written into frame header _whenever known_ (default:1) + * Content size must be known at the beginning of compression. + * This is automatically the case when using ZSTD_compress2(), + * For streaming scenarios, content size must be provided with ZSTD_CCtx_setPledgedSrcSize() */ + ZSTD_c_checksumFlag=201, /* A 32-bits checksum of content is written at end of frame (default:0) */ + ZSTD_c_dictIDFlag=202, /* When applicable, dictionary's ID is written into frame header (default:1) */ + + /* multi-threading parameters */ + /* These parameters are only active if multi-threading is enabled (compiled with build macro ZSTD_MULTITHREAD). + * Otherwise, trying to set any other value than default (0) will be a no-op and return an error. + * In a situation where it's unknown if the linked library supports multi-threading or not, + * setting ZSTD_c_nbWorkers to any value >= 1 and consulting the return value provides a quick way to check this property. + */ + ZSTD_c_nbWorkers=400, /* Select how many threads will be spawned to compress in parallel. + * When nbWorkers >= 1, triggers asynchronous mode when invoking ZSTD_compressStream*() : + * ZSTD_compressStream*() consumes input and flush output if possible, but immediately gives back control to caller, + * while compression is performed in parallel, within worker thread(s). + * (note : a strong exception to this rule is when first invocation of ZSTD_compressStream2() sets ZSTD_e_end : + * in which case, ZSTD_compressStream2() delegates to ZSTD_compress2(), which is always a blocking call). + * More workers improve speed, but also increase memory usage. + * Default value is `0`, aka "single-threaded mode" : no worker is spawned, + * compression is performed inside Caller's thread, and all invocations are blocking */ + ZSTD_c_jobSize=401, /* Size of a compression job. This value is enforced only when nbWorkers >= 1. + * Each compression job is completed in parallel, so this value can indirectly impact the nb of active threads. + * 0 means default, which is dynamically determined based on compression parameters. + * Job size must be a minimum of overlap size, or ZSTDMT_JOBSIZE_MIN (= 512 KB), whichever is largest. + * The minimum size is automatically and transparently enforced. */ + ZSTD_c_overlapLog=402, /* Control the overlap size, as a fraction of window size. + * The overlap size is an amount of data reloaded from previous job at the beginning of a new job. + * It helps preserve compression ratio, while each job is compressed in parallel. + * This value is enforced only when nbWorkers >= 1. + * Larger values increase compression ratio, but decrease speed. + * Possible values range from 0 to 9 : + * - 0 means "default" : value will be determined by the library, depending on strategy + * - 1 means "no overlap" + * - 9 means "full overlap", using a full window size. + * Each intermediate rank increases/decreases load size by a factor 2 : + * 9: full window; 8: w/2; 7: w/4; 6: w/8; 5:w/16; 4: w/32; 3:w/64; 2:w/128; 1:no overlap; 0:default + * default value varies between 6 and 9, depending on strategy */ + + /* note : additional experimental parameters are also available + * within the experimental section of the API. + * At the time of this writing, they include : + * ZSTD_c_rsyncable + * ZSTD_c_format + * ZSTD_c_forceMaxWindow + * ZSTD_c_forceAttachDict + * ZSTD_c_literalCompressionMode + * ZSTD_c_srcSizeHint + * ZSTD_c_enableDedicatedDictSearch + * ZSTD_c_stableInBuffer + * ZSTD_c_stableOutBuffer + * ZSTD_c_blockDelimiters + * ZSTD_c_validateSequences + * ZSTD_c_blockSplitterLevel + * ZSTD_c_splitAfterSequences + * ZSTD_c_useRowMatchFinder + * ZSTD_c_prefetchCDictTables + * ZSTD_c_enableSeqProducerFallback + * ZSTD_c_maxBlockSize + * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. + * note : never ever use experimentalParam? names directly; + * also, the enums values themselves are unstable and can still change. + */ + ZSTD_c_experimentalParam1=500, + ZSTD_c_experimentalParam2=10, + ZSTD_c_experimentalParam3=1000, + ZSTD_c_experimentalParam4=1001, + ZSTD_c_experimentalParam5=1002, + /* was ZSTD_c_experimentalParam6=1003; is now ZSTD_c_targetCBlockSize */ + ZSTD_c_experimentalParam7=1004, + ZSTD_c_experimentalParam8=1005, + ZSTD_c_experimentalParam9=1006, + ZSTD_c_experimentalParam10=1007, + ZSTD_c_experimentalParam11=1008, + ZSTD_c_experimentalParam12=1009, + ZSTD_c_experimentalParam13=1010, + ZSTD_c_experimentalParam14=1011, + ZSTD_c_experimentalParam15=1012, + ZSTD_c_experimentalParam16=1013, + ZSTD_c_experimentalParam17=1014, + ZSTD_c_experimentalParam18=1015, + ZSTD_c_experimentalParam19=1016, + ZSTD_c_experimentalParam20=1017 +} ZSTD_cParameter; + +typedef struct { + size_t error; + int lowerBound; + int upperBound; +} ZSTD_bounds; + +/*! ZSTD_cParam_getBounds() : + * All parameters must belong to an interval with lower and upper bounds, + * otherwise they will either trigger an error or be automatically clamped. + * @return : a structure, ZSTD_bounds, which contains + * - an error status field, which must be tested using ZSTD_isError() + * - lower and upper bounds, both inclusive + */ +ZSTDLIB_API ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam); + +/*! ZSTD_CCtx_setParameter() : + * Set one compression parameter, selected by enum ZSTD_cParameter. + * All parameters have valid bounds. Bounds can be queried using ZSTD_cParam_getBounds(). + * Providing a value beyond bound will either clamp it, or trigger an error (depending on parameter). + * Setting a parameter is generally only possible during frame initialization (before starting compression). + * Exception : when using multi-threading mode (nbWorkers >= 1), + * the following parameters can be updated _during_ compression (within same frame): + * => compressionLevel, hashLog, chainLog, searchLog, minMatch, targetLength and strategy. + * new parameters will be active for next job only (after a flush()). + * @return : an error code (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_API size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value); + +/*! ZSTD_CCtx_setPledgedSrcSize() : + * Total input data size to be compressed as a single frame. + * Value will be written in frame header, unless if explicitly forbidden using ZSTD_c_contentSizeFlag. + * This value will also be controlled at end of frame, and trigger an error if not respected. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Note 1 : pledgedSrcSize==0 actually means zero, aka an empty frame. + * In order to mean "unknown content size", pass constant ZSTD_CONTENTSIZE_UNKNOWN. + * ZSTD_CONTENTSIZE_UNKNOWN is default value for any new frame. + * Note 2 : pledgedSrcSize is only valid once, for the next frame. + * It's discarded at the end of the frame, and replaced by ZSTD_CONTENTSIZE_UNKNOWN. + * Note 3 : Whenever all input data is provided and consumed in a single round, + * for example with ZSTD_compress2(), + * or invoking immediately ZSTD_compressStream2(,,,ZSTD_e_end), + * this value is automatically overridden by srcSize instead. + */ +ZSTDLIB_API size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize); + +typedef enum { + ZSTD_reset_session_only = 1, + ZSTD_reset_parameters = 2, + ZSTD_reset_session_and_parameters = 3 +} ZSTD_ResetDirective; + +/*! ZSTD_CCtx_reset() : + * There are 2 different things that can be reset, independently or jointly : + * - The session : will stop compressing current frame, and make CCtx ready to start a new one. + * Useful after an error, or to interrupt any ongoing compression. + * Any internal data not yet flushed is cancelled. + * Compression parameters and dictionary remain unchanged. + * They will be used to compress next frame. + * Resetting session never fails. + * - The parameters : changes all parameters back to "default". + * This also removes any reference to any dictionary or external sequence producer. + * Parameters can only be changed between 2 sessions (i.e. no compression is currently ongoing) + * otherwise the reset fails, and function returns an error value (which can be tested using ZSTD_isError()) + * - Both : similar to resetting the session, followed by resetting parameters. + */ +ZSTDLIB_API size_t ZSTD_CCtx_reset(ZSTD_CCtx* cctx, ZSTD_ResetDirective reset); + +/*! ZSTD_compress2() : + * Behave the same as ZSTD_compressCCtx(), but compression parameters are set using the advanced API. + * (note that this entry point doesn't even expose a compression level parameter). + * ZSTD_compress2() always starts a new frame. + * Should cctx hold data from a previously unfinished frame, everything about it is forgotten. + * - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*() + * - The function is always blocking, returns when compression is completed. + * NOTE: Providing `dstCapacity >= ZSTD_compressBound(srcSize)` guarantees that zstd will have + * enough space to successfully compress the data, though it is possible it fails for other reasons. + * @return : compressed size written into `dst` (<= `dstCapacity), + * or an error code if it fails (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_API size_t ZSTD_compress2( ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize); + + +/*********************************************** +* Advanced decompression API (Requires v1.4.0+) +************************************************/ + +/* The advanced API pushes parameters one by one into an existing DCtx context. + * Parameters are sticky, and remain valid for all following frames + * using the same DCtx context. + * It's possible to reset parameters to default values using ZSTD_DCtx_reset(). + * Note : This API is compatible with existing ZSTD_decompressDCtx() and ZSTD_decompressStream(). + * Therefore, no new decompression function is necessary. + */ + +typedef enum { + + ZSTD_d_windowLogMax=100, /* Select a size limit (in power of 2) beyond which + * the streaming API will refuse to allocate memory buffer + * in order to protect the host from unreasonable memory requirements. + * This parameter is only useful in streaming mode, since no internal buffer is allocated in single-pass mode. + * By default, a decompression context accepts window sizes <= (1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT). + * Special: value 0 means "use default maximum windowLog". */ + + /* note : additional experimental parameters are also available + * within the experimental section of the API. + * At the time of this writing, they include : + * ZSTD_d_format + * ZSTD_d_stableOutBuffer + * ZSTD_d_forceIgnoreChecksum + * ZSTD_d_refMultipleDDicts + * ZSTD_d_disableHuffmanAssembly + * ZSTD_d_maxBlockSize + * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. + * note : never ever use experimentalParam? names directly + */ + ZSTD_d_experimentalParam1=1000, + ZSTD_d_experimentalParam2=1001, + ZSTD_d_experimentalParam3=1002, + ZSTD_d_experimentalParam4=1003, + ZSTD_d_experimentalParam5=1004, + ZSTD_d_experimentalParam6=1005 + +} ZSTD_dParameter; + +/*! ZSTD_dParam_getBounds() : + * All parameters must belong to an interval with lower and upper bounds, + * otherwise they will either trigger an error or be automatically clamped. + * @return : a structure, ZSTD_bounds, which contains + * - an error status field, which must be tested using ZSTD_isError() + * - both lower and upper bounds, inclusive + */ +ZSTDLIB_API ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam); + +/*! ZSTD_DCtx_setParameter() : + * Set one compression parameter, selected by enum ZSTD_dParameter. + * All parameters have valid bounds. Bounds can be queried using ZSTD_dParam_getBounds(). + * Providing a value beyond bound will either clamp it, or trigger an error (depending on parameter). + * Setting a parameter is only possible during frame initialization (before starting decompression). + * @return : 0, or an error code (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_API size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int value); + +/*! ZSTD_DCtx_reset() : + * Return a DCtx to clean state. + * Session and parameters can be reset jointly or separately. + * Parameters can only be reset when no active frame is being decompressed. + * @return : 0, or an error code, which can be tested with ZSTD_isError() + */ +ZSTDLIB_API size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset); + + +/**************************** +* Streaming +****************************/ + +typedef struct ZSTD_inBuffer_s { + const void* src; /**< start of input buffer */ + size_t size; /**< size of input buffer */ + size_t pos; /**< position where reading stopped. Will be updated. Necessarily 0 <= pos <= size */ +} ZSTD_inBuffer; + +typedef struct ZSTD_outBuffer_s { + void* dst; /**< start of output buffer */ + size_t size; /**< size of output buffer */ + size_t pos; /**< position where writing stopped. Will be updated. Necessarily 0 <= pos <= size */ +} ZSTD_outBuffer; + + + +/*-*********************************************************************** +* Streaming compression - HowTo +* +* A ZSTD_CStream object is required to track streaming operation. +* Use ZSTD_createCStream() and ZSTD_freeCStream() to create/release resources. +* ZSTD_CStream objects can be reused multiple times on consecutive compression operations. +* It is recommended to reuse ZSTD_CStream since it will play nicer with system's memory, by re-using already allocated memory. +* +* For parallel execution, use one separate ZSTD_CStream per thread. +* +* note : since v1.3.0, ZSTD_CStream and ZSTD_CCtx are the same thing. +* +* Parameters are sticky : when starting a new compression on the same context, +* it will reuse the same sticky parameters as previous compression session. +* When in doubt, it's recommended to fully initialize the context before usage. +* Use ZSTD_CCtx_reset() to reset the context and ZSTD_CCtx_setParameter(), +* ZSTD_CCtx_setPledgedSrcSize(), or ZSTD_CCtx_loadDictionary() and friends to +* set more specific parameters, the pledged source size, or load a dictionary. +* +* Use ZSTD_compressStream2() with ZSTD_e_continue as many times as necessary to +* consume input stream. The function will automatically update both `pos` +* fields within `input` and `output`. +* Note that the function may not consume the entire input, for example, because +* the output buffer is already full, in which case `input.pos < input.size`. +* The caller must check if input has been entirely consumed. +* If not, the caller must make some room to receive more compressed data, +* and then present again remaining input data. +* note: ZSTD_e_continue is guaranteed to make some forward progress when called, +* but doesn't guarantee maximal forward progress. This is especially relevant +* when compressing with multiple threads. The call won't block if it can +* consume some input, but if it can't it will wait for some, but not all, +* output to be flushed. +* @return : provides a minimum amount of data remaining to be flushed from internal buffers +* or an error code, which can be tested using ZSTD_isError(). +* +* At any moment, it's possible to flush whatever data might remain stuck within internal buffer, +* using ZSTD_compressStream2() with ZSTD_e_flush. `output->pos` will be updated. +* Note that, if `output->size` is too small, a single invocation with ZSTD_e_flush might not be enough (return code > 0). +* In which case, make some room to receive more compressed data, and call again ZSTD_compressStream2() with ZSTD_e_flush. +* You must continue calling ZSTD_compressStream2() with ZSTD_e_flush until it returns 0, at which point you can change the +* operation. +* note: ZSTD_e_flush will flush as much output as possible, meaning when compressing with multiple threads, it will +* block until the flush is complete or the output buffer is full. +* @return : 0 if internal buffers are entirely flushed, +* >0 if some data still present within internal buffer (the value is minimal estimation of remaining size), +* or an error code, which can be tested using ZSTD_isError(). +* +* Calling ZSTD_compressStream2() with ZSTD_e_end instructs to finish a frame. +* It will perform a flush and write frame epilogue. +* The epilogue is required for decoders to consider a frame completed. +* flush operation is the same, and follows same rules as calling ZSTD_compressStream2() with ZSTD_e_flush. +* You must continue calling ZSTD_compressStream2() with ZSTD_e_end until it returns 0, at which point you are free to +* start a new frame. +* note: ZSTD_e_end will flush as much output as possible, meaning when compressing with multiple threads, it will +* block until the flush is complete or the output buffer is full. +* @return : 0 if frame fully completed and fully flushed, +* >0 if some data still present within internal buffer (the value is minimal estimation of remaining size), +* or an error code, which can be tested using ZSTD_isError(). +* +* *******************************************************************/ + +typedef ZSTD_CCtx ZSTD_CStream; /**< CCtx and CStream are now effectively same object (>= v1.3.0) */ + /* Continue to distinguish them for compatibility with older versions <= v1.2.0 */ +/*===== ZSTD_CStream management functions =====*/ +ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(void); +ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); /* accept NULL pointer */ + +/*===== Streaming compression functions =====*/ +typedef enum { + ZSTD_e_continue=0, /* collect more data, encoder decides when to output compressed result, for optimal compression ratio */ + ZSTD_e_flush=1, /* flush any data provided so far, + * it creates (at least) one new block, that can be decoded immediately on reception; + * frame will continue: any future data can still reference previously compressed data, improving compression. + * note : multithreaded compression will block to flush as much output as possible. */ + ZSTD_e_end=2 /* flush any remaining data _and_ close current frame. + * note that frame is only closed after compressed data is fully flushed (return value == 0). + * After that point, any additional data starts a new frame. + * note : each frame is independent (does not reference any content from previous frame). + : note : multithreaded compression will block to flush as much output as possible. */ +} ZSTD_EndDirective; + +/*! ZSTD_compressStream2() : Requires v1.4.0+ + * Behaves about the same as ZSTD_compressStream, with additional control on end directive. + * - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*() + * - Compression parameters cannot be changed once compression is started (save a list of exceptions in multi-threading mode) + * - output->pos must be <= dstCapacity, input->pos must be <= srcSize + * - output->pos and input->pos will be updated. They are guaranteed to remain below their respective limit. + * - endOp must be a valid directive + * - When nbWorkers==0 (default), function is blocking : it completes its job before returning to caller. + * - When nbWorkers>=1, function is non-blocking : it copies a portion of input, distributes jobs to internal worker threads, flush to output whatever is available, + * and then immediately returns, just indicating that there is some data remaining to be flushed. + * The function nonetheless guarantees forward progress : it will return only after it reads or write at least 1+ byte. + * - Exception : if the first call requests a ZSTD_e_end directive and provides enough dstCapacity, the function delegates to ZSTD_compress2() which is always blocking. + * - @return provides a minimum amount of data remaining to be flushed from internal buffers + * or an error code, which can be tested using ZSTD_isError(). + * if @return != 0, flush is not fully completed, there is still some data left within internal buffers. + * This is useful for ZSTD_e_flush, since in this case more flushes are necessary to empty all buffers. + * For ZSTD_e_end, @return == 0 when internal buffers are fully flushed and frame is completed. + * - after a ZSTD_e_end directive, if internal buffer is not fully flushed (@return != 0), + * only ZSTD_e_end or ZSTD_e_flush operations are allowed. + * Before starting a new compression job, or changing compression parameters, + * it is required to fully flush internal buffers. + * - note: if an operation ends with an error, it may leave @cctx in an undefined state. + * Therefore, it's UB to invoke ZSTD_compressStream2() of ZSTD_compressStream() on such a state. + * In order to be re-employed after an error, a state must be reset, + * which can be done explicitly (ZSTD_CCtx_reset()), + * or is sometimes implied by methods starting a new compression job (ZSTD_initCStream(), ZSTD_compressCCtx()) + */ +ZSTDLIB_API size_t ZSTD_compressStream2( ZSTD_CCtx* cctx, + ZSTD_outBuffer* output, + ZSTD_inBuffer* input, + ZSTD_EndDirective endOp); + + +/* These buffer sizes are softly recommended. + * They are not required : ZSTD_compressStream*() happily accepts any buffer size, for both input and output. + * Respecting the recommended size just makes it a bit easier for ZSTD_compressStream*(), + * reducing the amount of memory shuffling and buffering, resulting in minor performance savings. + * + * However, note that these recommendations are from the perspective of a C caller program. + * If the streaming interface is invoked from some other language, + * especially managed ones such as Java or Go, through a foreign function interface such as jni or cgo, + * a major performance rule is to reduce crossing such interface to an absolute minimum. + * It's not rare that performance ends being spent more into the interface, rather than compression itself. + * In which cases, prefer using large buffers, as large as practical, + * for both input and output, to reduce the nb of roundtrips. + */ +ZSTDLIB_API size_t ZSTD_CStreamInSize(void); /**< recommended size for input buffer */ +ZSTDLIB_API size_t ZSTD_CStreamOutSize(void); /**< recommended size for output buffer. Guarantee to successfully flush at least one complete compressed block. */ + + +/* ***************************************************************************** + * This following is a legacy streaming API, available since v1.0+ . + * It can be replaced by ZSTD_CCtx_reset() and ZSTD_compressStream2(). + * It is redundant, but remains fully supported. + ******************************************************************************/ + +/*! + * Equivalent to: + * + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any) + * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); + * + * Note that ZSTD_initCStream() clears any previously set dictionary. Use the new API + * to compress with a dictionary. + */ +ZSTDLIB_API size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel); +/*! + * Alternative for ZSTD_compressStream2(zcs, output, input, ZSTD_e_continue). + * NOTE: The return value is different. ZSTD_compressStream() returns a hint for + * the next read size (if non-zero and not an error). ZSTD_compressStream2() + * returns the minimum nb of bytes left to flush (if non-zero and not an error). + */ +ZSTDLIB_API size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input); +/*! Equivalent to ZSTD_compressStream2(zcs, output, &emptyInput, ZSTD_e_flush). */ +ZSTDLIB_API size_t ZSTD_flushStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); +/*! Equivalent to ZSTD_compressStream2(zcs, output, &emptyInput, ZSTD_e_end). */ +ZSTDLIB_API size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); + + +/*-*************************************************************************** +* Streaming decompression - HowTo +* +* A ZSTD_DStream object is required to track streaming operations. +* Use ZSTD_createDStream() and ZSTD_freeDStream() to create/release resources. +* ZSTD_DStream objects can be re-employed multiple times. +* +* Use ZSTD_initDStream() to start a new decompression operation. +* @return : recommended first input size +* Alternatively, use advanced API to set specific properties. +* +* Use ZSTD_decompressStream() repetitively to consume your input. +* The function will update both `pos` fields. +* If `input.pos < input.size`, some input has not been consumed. +* It's up to the caller to present again remaining data. +* +* The function tries to flush all data decoded immediately, respecting output buffer size. +* If `output.pos < output.size`, decoder has flushed everything it could. +* +* However, when `output.pos == output.size`, it's more difficult to know. +* If @return > 0, the frame is not complete, meaning +* either there is still some data left to flush within internal buffers, +* or there is more input to read to complete the frame (or both). +* In which case, call ZSTD_decompressStream() again to flush whatever remains in the buffer. +* Note : with no additional input provided, amount of data flushed is necessarily <= ZSTD_BLOCKSIZE_MAX. +* @return : 0 when a frame is completely decoded and fully flushed, +* or an error code, which can be tested using ZSTD_isError(), +* or any other value > 0, which means there is still some decoding or flushing to do to complete current frame : +* the return value is a suggested next input size (just a hint for better latency) +* that will never request more than the remaining content of the compressed frame. +* *******************************************************************************/ + +typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same object (>= v1.3.0) */ + /* For compatibility with versions <= v1.2.0, prefer differentiating them. */ +/*===== ZSTD_DStream management functions =====*/ +ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream(void); +ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); /* accept NULL pointer */ + +/*===== Streaming decompression functions =====*/ + +/*! ZSTD_initDStream() : + * Initialize/reset DStream state for new decompression operation. + * Call before new decompression operation using same DStream. + * + * Note : This function is redundant with the advanced API and equivalent to: + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * ZSTD_DCtx_refDDict(zds, NULL); + */ +ZSTDLIB_API size_t ZSTD_initDStream(ZSTD_DStream* zds); + +/*! ZSTD_decompressStream() : + * Streaming decompression function. + * Call repetitively to consume full input updating it as necessary. + * Function will update both input and output `pos` fields exposing current state via these fields: + * - `input.pos < input.size`, some input remaining and caller should provide remaining input + * on the next call. + * - `output.pos < output.size`, decoder flushed internal output buffer. + * - `output.pos == output.size`, unflushed data potentially present in the internal buffers, + * check ZSTD_decompressStream() @return value, + * if > 0, invoke it again to flush remaining data to output. + * Note : with no additional input, amount of data flushed <= ZSTD_BLOCKSIZE_MAX. + * + * @return : 0 when a frame is completely decoded and fully flushed, + * or an error code, which can be tested using ZSTD_isError(), + * or any other value > 0, which means there is some decoding or flushing to do to complete current frame. + * + * Note: when an operation returns with an error code, the @zds state may be left in undefined state. + * It's UB to invoke `ZSTD_decompressStream()` on such a state. + * In order to re-use such a state, it must be first reset, + * which can be done explicitly (`ZSTD_DCtx_reset()`), + * or is implied for operations starting some new decompression job (`ZSTD_initDStream`, `ZSTD_decompressDCtx()`, `ZSTD_decompress_usingDict()`) + */ +ZSTDLIB_API size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input); + +ZSTDLIB_API size_t ZSTD_DStreamInSize(void); /*!< recommended size for input buffer */ +ZSTDLIB_API size_t ZSTD_DStreamOutSize(void); /*!< recommended size for output buffer. Guarantee to successfully flush at least one complete block in all circumstances. */ + + +/************************** +* Simple dictionary API +***************************/ +/*! ZSTD_compress_usingDict() : + * Compression at an explicit compression level using a Dictionary. + * A dictionary can be any arbitrary data segment (also called a prefix), + * or a buffer with specified information (see zdict.h). + * Note : This function loads the dictionary, resulting in significant startup delay. + * It's intended for a dictionary used only once. + * Note 2 : When `dict == NULL || dictSize < 8` no dictionary is used. */ +ZSTDLIB_API size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize, + int compressionLevel); + +/*! ZSTD_decompress_usingDict() : + * Decompression using a known Dictionary. + * Dictionary must be identical to the one used during compression. + * Note : This function loads the dictionary, resulting in significant startup delay. + * It's intended for a dictionary used only once. + * Note : When `dict == NULL || dictSize < 8` no dictionary is used. */ +ZSTDLIB_API size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize); + + +/*********************************** + * Bulk processing dictionary API + **********************************/ +typedef struct ZSTD_CDict_s ZSTD_CDict; + +/*! ZSTD_createCDict() : + * When compressing multiple messages or blocks using the same dictionary, + * it's recommended to digest the dictionary only once, since it's a costly operation. + * ZSTD_createCDict() will create a state from digesting a dictionary. + * The resulting state can be used for future compression operations with very limited startup cost. + * ZSTD_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only. + * @dictBuffer can be released after ZSTD_CDict creation, because its content is copied within CDict. + * Note 1 : Consider experimental function `ZSTD_createCDict_byReference()` if you prefer to not duplicate @dictBuffer content. + * Note 2 : A ZSTD_CDict can be created from an empty @dictBuffer, + * in which case the only thing that it transports is the @compressionLevel. + * This can be useful in a pipeline featuring ZSTD_compress_usingCDict() exclusively, + * expecting a ZSTD_CDict parameter with any data, including those without a known dictionary. */ +ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize, + int compressionLevel); + +/*! ZSTD_freeCDict() : + * Function frees memory allocated by ZSTD_createCDict(). + * If a NULL pointer is passed, no operation is performed. */ +ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict); + +/*! ZSTD_compress_usingCDict() : + * Compression using a digested Dictionary. + * Recommended when same dictionary is used multiple times. + * Note : compression level is _decided at dictionary creation time_, + * and frame parameters are hardcoded (dictID=yes, contentSize=yes, checksum=no) */ +ZSTDLIB_API size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_CDict* cdict); + + +typedef struct ZSTD_DDict_s ZSTD_DDict; + +/*! ZSTD_createDDict() : + * Create a digested dictionary, ready to start decompression operation without startup delay. + * dictBuffer can be released after DDict creation, as its content is copied inside DDict. */ +ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize); + +/*! ZSTD_freeDDict() : + * Function frees memory allocated with ZSTD_createDDict() + * If a NULL pointer is passed, no operation is performed. */ +ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict); + +/*! ZSTD_decompress_usingDDict() : + * Decompression using a digested Dictionary. + * Recommended when same dictionary is used multiple times. */ +ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_DDict* ddict); + + +/******************************** + * Dictionary helper functions + *******************************/ + +/*! ZSTD_getDictID_fromDict() : Requires v1.4.0+ + * Provides the dictID stored within dictionary. + * if @return == 0, the dictionary is not conformant with Zstandard specification. + * It can still be loaded, but as a content-only dictionary. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize); + +/*! ZSTD_getDictID_fromCDict() : Requires v1.5.0+ + * Provides the dictID of the dictionary loaded into `cdict`. + * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. + * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict); + +/*! ZSTD_getDictID_fromDDict() : Requires v1.4.0+ + * Provides the dictID of the dictionary loaded into `ddict`. + * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. + * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict); + +/*! ZSTD_getDictID_fromFrame() : Requires v1.4.0+ + * Provides the dictID required to decompressed the frame stored within `src`. + * If @return == 0, the dictID could not be decoded. + * This could for one of the following reasons : + * - The frame does not require a dictionary to be decoded (most common case). + * - The frame was built with dictID intentionally removed. Whatever dictionary is necessary is a hidden piece of information. + * Note : this use case also happens when using a non-conformant dictionary. + * - `srcSize` is too small, and as a result, the frame header could not be decoded (only possible if `srcSize < ZSTD_FRAMEHEADERSIZE_MAX`). + * - This is not a Zstandard frame. + * When identifying the exact failure cause, it's possible to use ZSTD_getFrameHeader(), which will provide a more precise error code. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); + + +/******************************************************************************* + * Advanced dictionary and prefix API (Requires v1.4.0+) + * + * This API allows dictionaries to be used with ZSTD_compress2(), + * ZSTD_compressStream2(), and ZSTD_decompressDCtx(). + * Dictionaries are sticky, they remain valid when same context is reused, + * they only reset when the context is reset + * with ZSTD_reset_parameters or ZSTD_reset_session_and_parameters. + * In contrast, Prefixes are single-use. + ******************************************************************************/ + + +/*! ZSTD_CCtx_loadDictionary() : Requires v1.4.0+ + * Create an internal CDict from `dict` buffer. + * Decompression will have to use same dictionary. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special: Loading a NULL (or 0-size) dictionary invalidates previous dictionary, + * meaning "return to no-dictionary mode". + * Note 1 : Dictionary is sticky, it will be used for all future compressed frames, + * until parameters are reset, a new dictionary is loaded, or the dictionary + * is explicitly invalidated by loading a NULL dictionary. + * Note 2 : Loading a dictionary involves building tables. + * It's also a CPU consuming operation, with non-negligible impact on latency. + * Tables are dependent on compression parameters, and for this reason, + * compression parameters can no longer be changed after loading a dictionary. + * Note 3 :`dict` content will be copied internally. + * Use experimental ZSTD_CCtx_loadDictionary_byReference() to reference content instead. + * In such a case, dictionary buffer must outlive its users. + * Note 4 : Use ZSTD_CCtx_loadDictionary_advanced() + * to precisely select how dictionary content must be interpreted. + * Note 5 : This method does not benefit from LDM (long distance mode). + * If you want to employ LDM on some large dictionary content, + * prefer employing ZSTD_CCtx_refPrefix() described below. + */ +ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); + +/*! ZSTD_CCtx_refCDict() : Requires v1.4.0+ + * Reference a prepared dictionary, to be used for all future compressed frames. + * Note that compression parameters are enforced from within CDict, + * and supersede any compression parameter previously set within CCtx. + * The parameters ignored are labelled as "superseded-by-cdict" in the ZSTD_cParameter enum docs. + * The ignored parameters will be used again if the CCtx is returned to no-dictionary mode. + * The dictionary will remain valid for future compressed frames using same CCtx. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special : Referencing a NULL CDict means "return to no-dictionary mode". + * Note 1 : Currently, only one dictionary can be managed. + * Referencing a new dictionary effectively "discards" any previous one. + * Note 2 : CDict is just referenced, its lifetime must outlive its usage within CCtx. */ +ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); + +/*! ZSTD_CCtx_refPrefix() : Requires v1.4.0+ + * Reference a prefix (single-usage dictionary) for next compressed frame. + * A prefix is **only used once**. Tables are discarded at end of frame (ZSTD_e_end). + * Decompression will need same prefix to properly regenerate data. + * Compressing with a prefix is similar in outcome as performing a diff and compressing it, + * but performs much faster, especially during decompression (compression speed is tunable with compression level). + * This method is compatible with LDM (long distance mode). + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special: Adding any prefix (including NULL) invalidates any previous prefix or dictionary + * Note 1 : Prefix buffer is referenced. It **must** outlive compression. + * Its content must remain unmodified during compression. + * Note 2 : If the intention is to diff some large src data blob with some prior version of itself, + * ensure that the window size is large enough to contain the entire source. + * See ZSTD_c_windowLog. + * Note 3 : Referencing a prefix involves building tables, which are dependent on compression parameters. + * It's a CPU consuming operation, with non-negligible impact on latency. + * If there is a need to use the same prefix multiple times, consider loadDictionary instead. + * Note 4 : By default, the prefix is interpreted as raw content (ZSTD_dct_rawContent). + * Use experimental ZSTD_CCtx_refPrefix_advanced() to alter dictionary interpretation. */ +ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, + const void* prefix, size_t prefixSize); + +/*! ZSTD_DCtx_loadDictionary() : Requires v1.4.0+ + * Create an internal DDict from dict buffer, to be used to decompress all future frames. + * The dictionary remains valid for all future frames, until explicitly invalidated, or + * a new dictionary is loaded. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special : Adding a NULL (or 0-size) dictionary invalidates any previous dictionary, + * meaning "return to no-dictionary mode". + * Note 1 : Loading a dictionary involves building tables, + * which has a non-negligible impact on CPU usage and latency. + * It's recommended to "load once, use many times", to amortize the cost + * Note 2 :`dict` content will be copied internally, so `dict` can be released after loading. + * Use ZSTD_DCtx_loadDictionary_byReference() to reference dictionary content instead. + * Note 3 : Use ZSTD_DCtx_loadDictionary_advanced() to take control of + * how dictionary content is loaded and interpreted. + */ +ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); + +/*! ZSTD_DCtx_refDDict() : Requires v1.4.0+ + * Reference a prepared dictionary, to be used to decompress next frames. + * The dictionary remains active for decompression of future frames using same DCtx. + * + * If called with ZSTD_d_refMultipleDDicts enabled, repeated calls of this function + * will store the DDict references in a table, and the DDict used for decompression + * will be determined at decompression time, as per the dict ID in the frame. + * The memory for the table is allocated on the first call to refDDict, and can be + * freed with ZSTD_freeDCtx(). + * + * If called with ZSTD_d_refMultipleDDicts disabled (the default), only one dictionary + * will be managed, and referencing a dictionary effectively "discards" any previous one. + * + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special: referencing a NULL DDict means "return to no-dictionary mode". + * Note 2 : DDict is just referenced, its lifetime must outlive its usage from DCtx. + */ +ZSTDLIB_API size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); + +/*! ZSTD_DCtx_refPrefix() : Requires v1.4.0+ + * Reference a prefix (single-usage dictionary) to decompress next frame. + * This is the reverse operation of ZSTD_CCtx_refPrefix(), + * and must use the same prefix as the one used during compression. + * Prefix is **only used once**. Reference is discarded at end of frame. + * End of frame is reached when ZSTD_decompressStream() returns 0. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Note 1 : Adding any prefix (including NULL) invalidates any previously set prefix or dictionary + * Note 2 : Prefix buffer is referenced. It **must** outlive decompression. + * Prefix buffer must remain unmodified up to the end of frame, + * reached when ZSTD_decompressStream() returns 0. + * Note 3 : By default, the prefix is treated as raw content (ZSTD_dct_rawContent). + * Use ZSTD_CCtx_refPrefix_advanced() to alter dictMode (Experimental section) + * Note 4 : Referencing a raw content prefix has almost no cpu nor memory cost. + * A full dictionary is more costly, as it requires building tables. + */ +ZSTDLIB_API size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, + const void* prefix, size_t prefixSize); + +/* === Memory management === */ + +/*! ZSTD_sizeof_*() : Requires v1.4.0+ + * These functions give the _current_ memory usage of selected object. + * Note that object memory usage can evolve (increase or decrease) over time. */ +ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx); +ZSTDLIB_API size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx); +ZSTDLIB_API size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs); +ZSTDLIB_API size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds); +ZSTDLIB_API size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict); +ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict); + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_H_235446 */ + + +/* ************************************************************************************** + * ADVANCED AND EXPERIMENTAL FUNCTIONS + **************************************************************************************** + * The definitions in the following section are considered experimental. + * They are provided for advanced scenarios. + * They should never be used with a dynamic library, as prototypes may change in the future. + * Use them only in association with static linking. + * ***************************************************************************************/ + +#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY) +#define ZSTD_H_ZSTD_STATIC_LINKING_ONLY + +#if defined (__cplusplus) +extern "C" { +#endif + +/* This can be overridden externally to hide static symbols. */ +#ifndef ZSTDLIB_STATIC_API +# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZSTDLIB_STATIC_API __declspec(dllexport) ZSTDLIB_VISIBLE +# elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZSTDLIB_STATIC_API __declspec(dllimport) ZSTDLIB_VISIBLE +# else +# define ZSTDLIB_STATIC_API ZSTDLIB_VISIBLE +# endif +#endif + +/**************************************************************************************** + * experimental API (static linking only) + **************************************************************************************** + * The following symbols and constants + * are not planned to join "stable API" status in the near future. + * They can still change in future versions. + * Some of them are planned to remain in the static_only section indefinitely. + * Some of them might be removed in the future (especially when redundant with existing stable functions) + * ***************************************************************************************/ + +#define ZSTD_FRAMEHEADERSIZE_PREFIX(format) ((format) == ZSTD_f_zstd1 ? 5 : 1) /* minimum input size required to query frame header size */ +#define ZSTD_FRAMEHEADERSIZE_MIN(format) ((format) == ZSTD_f_zstd1 ? 6 : 2) +#define ZSTD_FRAMEHEADERSIZE_MAX 18 /* can be useful for static allocation */ +#define ZSTD_SKIPPABLEHEADERSIZE 8 + +/* compression parameter bounds */ +#define ZSTD_WINDOWLOG_MAX_32 30 +#define ZSTD_WINDOWLOG_MAX_64 31 +#define ZSTD_WINDOWLOG_MAX ((int)(sizeof(size_t) == 4 ? ZSTD_WINDOWLOG_MAX_32 : ZSTD_WINDOWLOG_MAX_64)) +#define ZSTD_WINDOWLOG_MIN 10 +#define ZSTD_HASHLOG_MAX ((ZSTD_WINDOWLOG_MAX < 30) ? ZSTD_WINDOWLOG_MAX : 30) +#define ZSTD_HASHLOG_MIN 6 +#define ZSTD_CHAINLOG_MAX_32 29 +#define ZSTD_CHAINLOG_MAX_64 30 +#define ZSTD_CHAINLOG_MAX ((int)(sizeof(size_t) == 4 ? ZSTD_CHAINLOG_MAX_32 : ZSTD_CHAINLOG_MAX_64)) +#define ZSTD_CHAINLOG_MIN ZSTD_HASHLOG_MIN +#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1) +#define ZSTD_SEARCHLOG_MIN 1 +#define ZSTD_MINMATCH_MAX 7 /* only for ZSTD_fast, other strategies are limited to 6 */ +#define ZSTD_MINMATCH_MIN 3 /* only for ZSTD_btopt+, faster strategies are limited to 4 */ +#define ZSTD_TARGETLENGTH_MAX ZSTD_BLOCKSIZE_MAX +#define ZSTD_TARGETLENGTH_MIN 0 /* note : comparing this constant to an unsigned results in a tautological test */ +#define ZSTD_STRATEGY_MIN ZSTD_fast +#define ZSTD_STRATEGY_MAX ZSTD_btultra2 +#define ZSTD_BLOCKSIZE_MAX_MIN (1 << 10) /* The minimum valid max blocksize. Maximum blocksizes smaller than this make compressBound() inaccurate. */ + + +#define ZSTD_OVERLAPLOG_MIN 0 +#define ZSTD_OVERLAPLOG_MAX 9 + +#define ZSTD_WINDOWLOG_LIMIT_DEFAULT 27 /* by default, the streaming decoder will refuse any frame + * requiring larger than (1< 0: + * If litLength != 0: + * rep == 1 --> offset == repeat_offset_1 + * rep == 2 --> offset == repeat_offset_2 + * rep == 3 --> offset == repeat_offset_3 + * If litLength == 0: + * rep == 1 --> offset == repeat_offset_2 + * rep == 2 --> offset == repeat_offset_3 + * rep == 3 --> offset == repeat_offset_1 - 1 + * + * Note: This field is optional. ZSTD_generateSequences() will calculate the value of + * 'rep', but repeat offsets do not necessarily need to be calculated from an external + * sequence provider perspective. For example, ZSTD_compressSequences() does not + * use this 'rep' field at all (as of now). + */ +} ZSTD_Sequence; + +typedef struct { + unsigned windowLog; /**< largest match distance : larger == more compression, more memory needed during decompression */ + unsigned chainLog; /**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */ + unsigned hashLog; /**< dispatch table : larger == faster, more memory */ + unsigned searchLog; /**< nb of searches : larger == more compression, slower */ + unsigned minMatch; /**< match length searched : larger == faster decompression, sometimes less compression */ + unsigned targetLength; /**< acceptable match size for optimal parser (only) : larger == more compression, slower */ + ZSTD_strategy strategy; /**< see ZSTD_strategy definition above */ +} ZSTD_compressionParameters; + +typedef struct { + int contentSizeFlag; /**< 1: content size will be in frame header (when known) */ + int checksumFlag; /**< 1: generate a 32-bits checksum using XXH64 algorithm at end of frame, for error detection */ + int noDictIDFlag; /**< 1: no dictID will be saved into frame header (dictID is only useful for dictionary compression) */ +} ZSTD_frameParameters; + +typedef struct { + ZSTD_compressionParameters cParams; + ZSTD_frameParameters fParams; +} ZSTD_parameters; + +typedef enum { + ZSTD_dct_auto = 0, /* dictionary is "full" when starting with ZSTD_MAGIC_DICTIONARY, otherwise it is "rawContent" */ + ZSTD_dct_rawContent = 1, /* ensures dictionary is always loaded as rawContent, even if it starts with ZSTD_MAGIC_DICTIONARY */ + ZSTD_dct_fullDict = 2 /* refuses to load a dictionary if it does not respect Zstandard's specification, starting with ZSTD_MAGIC_DICTIONARY */ +} ZSTD_dictContentType_e; + +typedef enum { + ZSTD_dlm_byCopy = 0, /**< Copy dictionary content internally */ + ZSTD_dlm_byRef = 1 /**< Reference dictionary content -- the dictionary buffer must outlive its users. */ +} ZSTD_dictLoadMethod_e; + +typedef enum { + ZSTD_f_zstd1 = 0, /* zstd frame format, specified in zstd_compression_format.md (default) */ + ZSTD_f_zstd1_magicless = 1 /* Variant of zstd frame format, without initial 4-bytes magic number. + * Useful to save 4 bytes per generated frame. + * Decoder cannot recognise automatically this format, requiring this instruction. */ +} ZSTD_format_e; + +typedef enum { + /* Note: this enum controls ZSTD_d_forceIgnoreChecksum */ + ZSTD_d_validateChecksum = 0, + ZSTD_d_ignoreChecksum = 1 +} ZSTD_forceIgnoreChecksum_e; + +typedef enum { + /* Note: this enum controls ZSTD_d_refMultipleDDicts */ + ZSTD_rmd_refSingleDDict = 0, + ZSTD_rmd_refMultipleDDicts = 1 +} ZSTD_refMultipleDDicts_e; + +typedef enum { + /* Note: this enum and the behavior it controls are effectively internal + * implementation details of the compressor. They are expected to continue + * to evolve and should be considered only in the context of extremely + * advanced performance tuning. + * + * Zstd currently supports the use of a CDict in three ways: + * + * - The contents of the CDict can be copied into the working context. This + * means that the compression can search both the dictionary and input + * while operating on a single set of internal tables. This makes + * the compression faster per-byte of input. However, the initial copy of + * the CDict's tables incurs a fixed cost at the beginning of the + * compression. For small compressions (< 8 KB), that copy can dominate + * the cost of the compression. + * + * - The CDict's tables can be used in-place. In this model, compression is + * slower per input byte, because the compressor has to search two sets of + * tables. However, this model incurs no start-up cost (as long as the + * working context's tables can be reused). For small inputs, this can be + * faster than copying the CDict's tables. + * + * - The CDict's tables are not used at all, and instead we use the working + * context alone to reload the dictionary and use params based on the source + * size. See ZSTD_compress_insertDictionary() and ZSTD_compress_usingDict(). + * This method is effective when the dictionary sizes are very small relative + * to the input size, and the input size is fairly large to begin with. + * + * Zstd has a simple internal heuristic that selects which strategy to use + * at the beginning of a compression. However, if experimentation shows that + * Zstd is making poor choices, it is possible to override that choice with + * this enum. + */ + ZSTD_dictDefaultAttach = 0, /* Use the default heuristic. */ + ZSTD_dictForceAttach = 1, /* Never copy the dictionary. */ + ZSTD_dictForceCopy = 2, /* Always copy the dictionary. */ + ZSTD_dictForceLoad = 3 /* Always reload the dictionary */ +} ZSTD_dictAttachPref_e; + +typedef enum { + ZSTD_lcm_auto = 0, /**< Automatically determine the compression mode based on the compression level. + * Negative compression levels will be uncompressed, and positive compression + * levels will be compressed. */ + ZSTD_lcm_huffman = 1, /**< Always attempt Huffman compression. Uncompressed literals will still be + * emitted if Huffman compression is not profitable. */ + ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */ +} ZSTD_literalCompressionMode_e; + +typedef enum { + /* Note: This enum controls features which are conditionally beneficial. + * Zstd can take a decision on whether or not to enable the feature (ZSTD_ps_auto), + * but setting the switch to ZSTD_ps_enable or ZSTD_ps_disable force enable/disable the feature. + */ + ZSTD_ps_auto = 0, /* Let the library automatically determine whether the feature shall be enabled */ + ZSTD_ps_enable = 1, /* Force-enable the feature */ + ZSTD_ps_disable = 2 /* Do not use the feature */ +} ZSTD_ParamSwitch_e; +#define ZSTD_paramSwitch_e ZSTD_ParamSwitch_e /* old name */ + +/*************************************** +* Frame header and size functions +***************************************/ + +/*! ZSTD_findDecompressedSize() : + * `src` should point to the start of a series of ZSTD encoded and/or skippable frames + * `srcSize` must be the _exact_ size of this series + * (i.e. there should be a frame boundary at `src + srcSize`) + * @return : - decompressed size of all data in all successive frames + * - if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN + * - if an error occurred: ZSTD_CONTENTSIZE_ERROR + * + * note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode. + * When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. + * In which case, it's necessary to use streaming mode to decompress data. + * note 2 : decompressed size is always present when compression is done with ZSTD_compress() + * note 3 : decompressed size can be very large (64-bits value), + * potentially larger than what local system can handle as a single memory segment. + * In which case, it's necessary to use streaming mode to decompress data. + * note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified. + * Always ensure result fits within application's authorized limits. + * Each application can set its own limits. + * note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to + * read each contained frame header. This is fast as most of the data is skipped, + * however it does mean that all frame data must be present and valid. */ +ZSTDLIB_STATIC_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize); + +/*! ZSTD_decompressBound() : + * `src` should point to the start of a series of ZSTD encoded and/or skippable frames + * `srcSize` must be the _exact_ size of this series + * (i.e. there should be a frame boundary at `src + srcSize`) + * @return : - upper-bound for the decompressed size of all data in all successive frames + * - if an error occurred: ZSTD_CONTENTSIZE_ERROR + * + * note 1 : an error can occur if `src` contains an invalid or incorrectly formatted frame. + * note 2 : the upper-bound is exact when the decompressed size field is available in every ZSTD encoded frame of `src`. + * in this case, `ZSTD_findDecompressedSize` and `ZSTD_decompressBound` return the same value. + * note 3 : when the decompressed size field isn't available, the upper-bound for that frame is calculated by: + * upper-bound = # blocks * min(128 KB, Window_Size) + */ +ZSTDLIB_STATIC_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize); + +/*! ZSTD_frameHeaderSize() : + * srcSize must be large enough, aka >= ZSTD_FRAMEHEADERSIZE_PREFIX. + * @return : size of the Frame Header, + * or an error code (if srcSize is too small) */ +ZSTDLIB_STATIC_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize); + +typedef enum { ZSTD_frame, ZSTD_skippableFrame } ZSTD_FrameType_e; +#define ZSTD_frameType_e ZSTD_FrameType_e /* old name */ +typedef struct { + unsigned long long frameContentSize; /* if == ZSTD_CONTENTSIZE_UNKNOWN, it means this field is not available. 0 means "empty" */ + unsigned long long windowSize; /* can be very large, up to <= frameContentSize */ + unsigned blockSizeMax; + ZSTD_FrameType_e frameType; /* if == ZSTD_skippableFrame, frameContentSize is the size of skippable content */ + unsigned headerSize; + unsigned dictID; /* for ZSTD_skippableFrame, contains the skippable magic variant [0-15] */ + unsigned checksumFlag; + unsigned _reserved1; + unsigned _reserved2; +} ZSTD_FrameHeader; +#define ZSTD_frameHeader ZSTD_FrameHeader /* old name */ + +/*! ZSTD_getFrameHeader() : + * decode Frame Header into `zfhPtr`, or requires larger `srcSize`. + * @return : 0 => header is complete, `zfhPtr` is correctly filled, + * >0 => `srcSize` is too small, @return value is the wanted `srcSize` amount, `zfhPtr` is not filled, + * or an error code, which can be tested using ZSTD_isError() */ +ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize); +/*! ZSTD_getFrameHeader_advanced() : + * same as ZSTD_getFrameHeader(), + * with added capability to select a format (like ZSTD_f_zstd1_magicless) */ +ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader_advanced(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format); + +/*! ZSTD_decompressionMargin() : + * Zstd supports in-place decompression, where the input and output buffers overlap. + * In this case, the output buffer must be at least (Margin + Output_Size) bytes large, + * and the input buffer must be at the end of the output buffer. + * + * _______________________ Output Buffer ________________________ + * | | + * | ____ Input Buffer ____| + * | | | + * v v v + * |---------------------------------------|-----------|----------| + * ^ ^ ^ + * |___________________ Output_Size ___________________|_ Margin _| + * + * NOTE: See also ZSTD_DECOMPRESSION_MARGIN(). + * NOTE: This applies only to single-pass decompression through ZSTD_decompress() or + * ZSTD_decompressDCtx(). + * NOTE: This function supports multi-frame input. + * + * @param src The compressed frame(s) + * @param srcSize The size of the compressed frame(s) + * @returns The decompression margin or an error that can be checked with ZSTD_isError(). + */ +ZSTDLIB_STATIC_API size_t ZSTD_decompressionMargin(const void* src, size_t srcSize); + +/*! ZSTD_DECOMPRESS_MARGIN() : + * Similar to ZSTD_decompressionMargin(), but instead of computing the margin from + * the compressed frame, compute it from the original size and the blockSizeLog. + * See ZSTD_decompressionMargin() for details. + * + * WARNING: This macro does not support multi-frame input, the input must be a single + * zstd frame. If you need that support use the function, or implement it yourself. + * + * @param originalSize The original uncompressed size of the data. + * @param blockSize The block size == MIN(windowSize, ZSTD_BLOCKSIZE_MAX). + * Unless you explicitly set the windowLog smaller than + * ZSTD_BLOCKSIZELOG_MAX you can just use ZSTD_BLOCKSIZE_MAX. + */ +#define ZSTD_DECOMPRESSION_MARGIN(originalSize, blockSize) ((size_t)( \ + ZSTD_FRAMEHEADERSIZE_MAX /* Frame header */ + \ + 4 /* checksum */ + \ + ((originalSize) == 0 ? 0 : 3 * (((originalSize) + (blockSize) - 1) / blockSize)) /* 3 bytes per block */ + \ + (blockSize) /* One block of margin */ \ + )) + +typedef enum { + ZSTD_sf_noBlockDelimiters = 0, /* ZSTD_Sequence[] has no block delimiters, just sequences */ + ZSTD_sf_explicitBlockDelimiters = 1 /* ZSTD_Sequence[] contains explicit block delimiters */ +} ZSTD_SequenceFormat_e; +#define ZSTD_sequenceFormat_e ZSTD_SequenceFormat_e /* old name */ + +/*! ZSTD_sequenceBound() : + * `srcSize` : size of the input buffer + * @return : upper-bound for the number of sequences that can be generated + * from a buffer of srcSize bytes + * + * note : returns number of sequences - to get bytes, multiply by sizeof(ZSTD_Sequence). + */ +ZSTDLIB_STATIC_API size_t ZSTD_sequenceBound(size_t srcSize); + +/*! ZSTD_generateSequences() : + * WARNING: This function is meant for debugging and informational purposes ONLY! + * Its implementation is flawed, and it will be deleted in a future version. + * It is not guaranteed to succeed, as there are several cases where it will give + * up and fail. You should NOT use this function in production code. + * + * This function is deprecated, and will be removed in a future version. + * + * Generate sequences using ZSTD_compress2(), given a source buffer. + * + * @param zc The compression context to be used for ZSTD_compress2(). Set any + * compression parameters you need on this context. + * @param outSeqs The output sequences buffer of size @p outSeqsSize + * @param outSeqsCapacity The size of the output sequences buffer. + * ZSTD_sequenceBound(srcSize) is an upper bound on the number + * of sequences that can be generated. + * @param src The source buffer to generate sequences from of size @p srcSize. + * @param srcSize The size of the source buffer. + * + * Each block will end with a dummy sequence + * with offset == 0, matchLength == 0, and litLength == length of last literals. + * litLength may be == 0, and if so, then the sequence of (of: 0 ml: 0 ll: 0) + * simply acts as a block delimiter. + * + * @returns The number of sequences generated, necessarily less than + * ZSTD_sequenceBound(srcSize), or an error code that can be checked + * with ZSTD_isError(). + */ +ZSTD_DEPRECATED("For debugging only, will be replaced by ZSTD_extractSequences()") +ZSTDLIB_STATIC_API size_t +ZSTD_generateSequences(ZSTD_CCtx* zc, + ZSTD_Sequence* outSeqs, size_t outSeqsCapacity, + const void* src, size_t srcSize); + +/*! ZSTD_mergeBlockDelimiters() : + * Given an array of ZSTD_Sequence, remove all sequences that represent block delimiters/last literals + * by merging them into the literals of the next sequence. + * + * As such, the final generated result has no explicit representation of block boundaries, + * and the final last literals segment is not represented in the sequences. + * + * The output of this function can be fed into ZSTD_compressSequences() with CCtx + * setting of ZSTD_c_blockDelimiters as ZSTD_sf_noBlockDelimiters + * @return : number of sequences left after merging + */ +ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, size_t seqsSize); + +/*! ZSTD_compressSequences() : + * Compress an array of ZSTD_Sequence, associated with @src buffer, into dst. + * @src contains the entire input (not just the literals). + * If @srcSize > sum(sequence.length), the remaining bytes are considered all literals + * If a dictionary is included, then the cctx should reference the dict (see: ZSTD_CCtx_refCDict(), ZSTD_CCtx_loadDictionary(), etc.). + * The entire source is compressed into a single frame. + * + * The compression behavior changes based on cctx params. In particular: + * If ZSTD_c_blockDelimiters == ZSTD_sf_noBlockDelimiters, the array of ZSTD_Sequence is expected to contain + * no block delimiters (defined in ZSTD_Sequence). Block boundaries are roughly determined based on + * the block size derived from the cctx, and sequences may be split. This is the default setting. + * + * If ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, the array of ZSTD_Sequence is expected to contain + * valid block delimiters (defined in ZSTD_Sequence). Behavior is undefined if no block delimiters are provided. + * + * When ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, it's possible to decide generating repcodes + * using the advanced parameter ZSTD_c_repcodeResolution. Repcodes will improve compression ratio, though the benefit + * can vary greatly depending on Sequences. On the other hand, repcode resolution is an expensive operation. + * By default, it's disabled at low (<10) compression levels, and enabled above the threshold (>=10). + * ZSTD_c_repcodeResolution makes it possible to directly manage this processing in either direction. + * + * If ZSTD_c_validateSequences == 0, this function blindly accepts the Sequences provided. Invalid Sequences cause undefined + * behavior. If ZSTD_c_validateSequences == 1, then the function will detect invalid Sequences (see doc/zstd_compression_format.md for + * specifics regarding offset/matchlength requirements) and then bail out and return an error. + * + * In addition to the two adjustable experimental params, there are other important cctx params. + * - ZSTD_c_minMatch MUST be set as less than or equal to the smallest match generated by the match finder. It has a minimum value of ZSTD_MINMATCH_MIN. + * - ZSTD_c_compressionLevel accordingly adjusts the strength of the entropy coder, as it would in typical compression. + * - ZSTD_c_windowLog affects offset validation: this function will return an error at higher debug levels if a provided offset + * is larger than what the spec allows for a given window log and dictionary (if present). See: doc/zstd_compression_format.md + * + * Note: Repcodes are, as of now, always re-calculated within this function, ZSTD_Sequence.rep is effectively unused. + * Dev Note: Once ability to ingest repcodes become available, the explicit block delims mode must respect those repcodes exactly, + * and cannot emit an RLE block that disagrees with the repcode history. + * @return : final compressed size, or a ZSTD error code. + */ +ZSTDLIB_STATIC_API size_t +ZSTD_compressSequences(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const ZSTD_Sequence* inSeqs, size_t inSeqsSize, + const void* src, size_t srcSize); + + +/*! ZSTD_compressSequencesAndLiterals() : + * This is a variant of ZSTD_compressSequences() which, + * instead of receiving (src,srcSize) as input parameter, receives (literals,litSize), + * aka all the literals, already extracted and laid out into a single continuous buffer. + * This can be useful if the process generating the sequences also happens to generate the buffer of literals, + * thus skipping an extraction + caching stage. + * It's a speed optimization, useful when the right conditions are met, + * but it also features the following limitations: + * - Only supports explicit delimiter mode + * - Currently does not support Sequences validation (so input Sequences are trusted) + * - Not compatible with frame checksum, which must be disabled + * - If any block is incompressible, will fail and return an error + * - @litSize must be == sum of all @.litLength fields in @inSeqs. Any discrepancy will generate an error. + * - @litBufCapacity is the size of the underlying buffer into which literals are written, starting at address @literals. + * @litBufCapacity must be at least 8 bytes larger than @litSize. + * - @decompressedSize must be correct, and correspond to the sum of all Sequences. Any discrepancy will generate an error. + * @return : final compressed size, or a ZSTD error code. + */ +ZSTDLIB_STATIC_API size_t +ZSTD_compressSequencesAndLiterals(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const ZSTD_Sequence* inSeqs, size_t nbSequences, + const void* literals, size_t litSize, size_t litBufCapacity, + size_t decompressedSize); + + +/*! ZSTD_writeSkippableFrame() : + * Generates a zstd skippable frame containing data given by src, and writes it to dst buffer. + * + * Skippable frames begin with a 4-byte magic number. There are 16 possible choices of magic number, + * ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15. + * As such, the parameter magicVariant controls the exact skippable frame magic number variant used, + * so the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant. + * + * Returns an error if destination buffer is not large enough, if the source size is not representable + * with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid). + * + * @return : number of bytes written or a ZSTD error. + */ +ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + unsigned magicVariant); + +/*! ZSTD_readSkippableFrame() : + * Retrieves the content of a zstd skippable frame starting at @src, and writes it to @dst buffer. + * + * The parameter @magicVariant will receive the magicVariant that was supplied when the frame was written, + * i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START. + * This can be NULL if the caller is not interested in the magicVariant. + * + * Returns an error if destination buffer is not large enough, or if the frame is not skippable. + * + * @return : number of bytes written or a ZSTD error. + */ +ZSTDLIB_STATIC_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, + unsigned* magicVariant, + const void* src, size_t srcSize); + +/*! ZSTD_isSkippableFrame() : + * Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame. + */ +ZSTDLIB_STATIC_API unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size); + + + +/*************************************** +* Memory management +***************************************/ + +/*! ZSTD_estimate*() : + * These functions make it possible to estimate memory usage + * of a future {D,C}Ctx, before its creation. + * This is useful in combination with ZSTD_initStatic(), + * which makes it possible to employ a static buffer for ZSTD_CCtx* state. + * + * ZSTD_estimateCCtxSize() will provide a memory budget large enough + * to compress data of any size using one-shot compression ZSTD_compressCCtx() or ZSTD_compress2() + * associated with any compression level up to max specified one. + * The estimate will assume the input may be arbitrarily large, + * which is the worst case. + * + * Note that the size estimation is specific for one-shot compression, + * it is not valid for streaming (see ZSTD_estimateCStreamSize*()) + * nor other potential ways of using a ZSTD_CCtx* state. + * + * When srcSize can be bound by a known and rather "small" value, + * this knowledge can be used to provide a tighter budget estimation + * because the ZSTD_CCtx* state will need less memory for small inputs. + * This tighter estimation can be provided by employing more advanced functions + * ZSTD_estimateCCtxSize_usingCParams(), which can be used in tandem with ZSTD_getCParams(), + * and ZSTD_estimateCCtxSize_usingCCtxParams(), which can be used in tandem with ZSTD_CCtxParams_setParameter(). + * Both can be used to estimate memory using custom compression parameters and arbitrary srcSize limits. + * + * Note : only single-threaded compression is supported. + * ZSTD_estimateCCtxSize_usingCCtxParams() will return an error code if ZSTD_c_nbWorkers is >= 1. + */ +ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize(int maxCompressionLevel); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDCtxSize(void); + +/*! ZSTD_estimateCStreamSize() : + * ZSTD_estimateCStreamSize() will provide a memory budget large enough for streaming compression + * using any compression level up to the max specified one. + * It will also consider src size to be arbitrarily "large", which is a worst case scenario. + * If srcSize is known to always be small, ZSTD_estimateCStreamSize_usingCParams() can provide a tighter estimation. + * ZSTD_estimateCStreamSize_usingCParams() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel. + * ZSTD_estimateCStreamSize_usingCCtxParams() can be used in tandem with ZSTD_CCtxParams_setParameter(). Only single-threaded compression is supported. This function will return an error code if ZSTD_c_nbWorkers is >= 1. + * Note : CStream size estimation is only correct for single-threaded compression. + * ZSTD_estimateCStreamSize_usingCCtxParams() will return an error code if ZSTD_c_nbWorkers is >= 1. + * Note 2 : ZSTD_estimateCStreamSize* functions are not compatible with the Block-Level Sequence Producer API at this time. + * Size estimates assume that no external sequence producer is registered. + * + * ZSTD_DStream memory budget depends on frame's window Size. + * This information can be passed manually, using ZSTD_estimateDStreamSize, + * or deducted from a valid frame Header, using ZSTD_estimateDStreamSize_fromFrame(); + * Any frame requesting a window size larger than max specified one will be rejected. + * Note : if streaming is init with function ZSTD_init?Stream_usingDict(), + * an internal ?Dict will be created, which additional size is not estimated here. + * In this case, get total size by adding ZSTD_estimate?DictSize + */ +ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize(int maxCompressionLevel); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize(size_t maxWindowSize); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize); + +/*! ZSTD_estimate?DictSize() : + * ZSTD_estimateCDictSize() will bet that src size is relatively "small", and content is copied, like ZSTD_createCDict(). + * ZSTD_estimateCDictSize_advanced() makes it possible to control compression parameters precisely, like ZSTD_createCDict_advanced(). + * Note : dictionaries created by reference (`ZSTD_dlm_byRef`) are logically smaller. + */ +ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize(size_t dictSize, int compressionLevel); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize_advanced(size_t dictSize, ZSTD_compressionParameters cParams, ZSTD_dictLoadMethod_e dictLoadMethod); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDDictSize(size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod); + +/*! ZSTD_initStatic*() : + * Initialize an object using a pre-allocated fixed-size buffer. + * workspace: The memory area to emplace the object into. + * Provided pointer *must be 8-bytes aligned*. + * Buffer must outlive object. + * workspaceSize: Use ZSTD_estimate*Size() to determine + * how large workspace must be to support target scenario. + * @return : pointer to object (same address as workspace, just different type), + * or NULL if error (size too small, incorrect alignment, etc.) + * Note : zstd will never resize nor malloc() when using a static buffer. + * If the object requires more memory than available, + * zstd will just error out (typically ZSTD_error_memory_allocation). + * Note 2 : there is no corresponding "free" function. + * Since workspace is allocated externally, it must be freed externally too. + * Note 3 : cParams : use ZSTD_getCParams() to convert a compression level + * into its associated cParams. + * Limitation 1 : currently not compatible with internal dictionary creation, triggered by + * ZSTD_CCtx_loadDictionary(), ZSTD_initCStream_usingDict() or ZSTD_initDStream_usingDict(). + * Limitation 2 : static cctx currently not compatible with multi-threading. + * Limitation 3 : static dctx is incompatible with legacy support. + */ +ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_initStaticCCtx(void* workspace, size_t workspaceSize); +ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_initStaticCStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticCCtx() */ + +ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_initStaticDCtx(void* workspace, size_t workspaceSize); +ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_initStaticDStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticDCtx() */ + +ZSTDLIB_STATIC_API const ZSTD_CDict* ZSTD_initStaticCDict( + void* workspace, size_t workspaceSize, + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_compressionParameters cParams); + +ZSTDLIB_STATIC_API const ZSTD_DDict* ZSTD_initStaticDDict( + void* workspace, size_t workspaceSize, + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType); + + +/*! Custom memory allocation : + * These prototypes make it possible to pass your own allocation/free functions. + * ZSTD_customMem is provided at creation time, using ZSTD_create*_advanced() variants listed below. + * All allocation/free operations will be completed using these custom variants instead of regular ones. + */ +typedef void* (*ZSTD_allocFunction) (void* opaque, size_t size); +typedef void (*ZSTD_freeFunction) (void* opaque, void* address); +typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem; +#if defined(__clang__) && __clang_major__ >= 5 +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#endif +static +#ifdef __GNUC__ +__attribute__((__unused__)) +#endif +ZSTD_customMem const ZSTD_defaultCMem = { NULL, NULL, NULL }; /**< this constant defers to stdlib's functions */ +#if defined(__clang__) && __clang_major__ >= 5 +#pragma clang diagnostic pop +#endif + +ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem); +ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem); +ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem); +ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem); + +ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_compressionParameters cParams, + ZSTD_customMem customMem); + +/*! Thread pool : + * These prototypes make it possible to share a thread pool among multiple compression contexts. + * This can limit resources for applications with multiple threads where each one uses + * a threaded compression mode (via ZSTD_c_nbWorkers parameter). + * ZSTD_createThreadPool creates a new thread pool with a given number of threads. + * Note that the lifetime of such pool must exist while being used. + * ZSTD_CCtx_refThreadPool assigns a thread pool to a context (use NULL argument value + * to use an internal thread pool). + * ZSTD_freeThreadPool frees a thread pool, accepts NULL pointer. + */ +typedef struct POOL_ctx_s ZSTD_threadPool; +ZSTDLIB_STATIC_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads); +ZSTDLIB_STATIC_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); /* accept NULL pointer */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool); + + +/* + * This API is temporary and is expected to change or disappear in the future! + */ +ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced2( + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + const ZSTD_CCtx_params* cctxParams, + ZSTD_customMem customMem); + +ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_advanced( + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_customMem customMem); + + +/*************************************** +* Advanced compression functions +***************************************/ + +/*! ZSTD_createCDict_byReference() : + * Create a digested dictionary for compression + * Dictionary content is just referenced, not duplicated. + * As a consequence, `dictBuffer` **must** outlive CDict, + * and its content must remain unmodified throughout the lifetime of CDict. + * note: equivalent to ZSTD_createCDict_advanced(), with dictLoadMethod==ZSTD_dlm_byRef */ +ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel); + +/*! ZSTD_getCParams() : + * @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize. + * `estimatedSrcSize` value is optional, select 0 if not known */ +ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize); + +/*! ZSTD_getParams() : + * same as ZSTD_getCParams(), but @return a full `ZSTD_parameters` object instead of sub-component `ZSTD_compressionParameters`. + * All fields of `ZSTD_frameParameters` are set to default : contentSize=1, checksum=0, noDictID=0 */ +ZSTDLIB_STATIC_API ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize); + +/*! ZSTD_checkCParams() : + * Ensure param values remain within authorized range. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()) */ +ZSTDLIB_STATIC_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params); + +/*! ZSTD_adjustCParams() : + * optimize params for a given `srcSize` and `dictSize`. + * `srcSize` can be unknown, in which case use ZSTD_CONTENTSIZE_UNKNOWN. + * `dictSize` must be `0` when there is no dictionary. + * cPar can be invalid : all parameters will be clamped within valid range in the @return struct. + * This function never fails (wide contract) */ +ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize); + +/*! ZSTD_CCtx_setCParams() : + * Set all parameters provided within @p cparams into the working @p cctx. + * Note : if modifying parameters during compression (MT mode only), + * note that changes to the .windowLog parameter will be ignored. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()). + * On failure, no parameters are updated. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setCParams(ZSTD_CCtx* cctx, ZSTD_compressionParameters cparams); + +/*! ZSTD_CCtx_setFParams() : + * Set all parameters provided within @p fparams into the working @p cctx. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setFParams(ZSTD_CCtx* cctx, ZSTD_frameParameters fparams); + +/*! ZSTD_CCtx_setParams() : + * Set all parameters provided within @p params into the working @p cctx. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParams(ZSTD_CCtx* cctx, ZSTD_parameters params); + +/*! ZSTD_compress_advanced() : + * Note : this function is now DEPRECATED. + * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_setParameter() and other parameter setters. + * This prototype will generate compilation warnings. */ +ZSTD_DEPRECATED("use ZSTD_compress2") +ZSTDLIB_STATIC_API +size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize, + ZSTD_parameters params); + +/*! ZSTD_compress_usingCDict_advanced() : + * Note : this function is now DEPRECATED. + * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_loadDictionary() and other parameter setters. + * This prototype will generate compilation warnings. */ +ZSTD_DEPRECATED("use ZSTD_compress2 with ZSTD_CCtx_loadDictionary") +ZSTDLIB_STATIC_API +size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_CDict* cdict, + ZSTD_frameParameters fParams); + + +/*! ZSTD_CCtx_loadDictionary_byReference() : + * Same as ZSTD_CCtx_loadDictionary(), but dictionary content is referenced, instead of being copied into CCtx. + * It saves some memory, but also requires that `dict` outlives its usage within `cctx` */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_byReference(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); + +/*! ZSTD_CCtx_loadDictionary_advanced() : + * Same as ZSTD_CCtx_loadDictionary(), but gives finer control over + * how to load the dictionary (by copy ? by reference ?) + * and how to interpret it (automatic ? force raw mode ? full mode only ?) */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType); + +/*! ZSTD_CCtx_refPrefix_advanced() : + * Same as ZSTD_CCtx_refPrefix(), but gives finer control over + * how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType); + +/* === experimental parameters === */ +/* these parameters can be used with ZSTD_setParameter() + * they are not guaranteed to remain supported in the future */ + + /* Enables rsyncable mode, + * which makes compressed files more rsync friendly + * by adding periodic synchronization points to the compressed data. + * The target average block size is ZSTD_c_jobSize / 2. + * It's possible to modify the job size to increase or decrease + * the granularity of the synchronization point. + * Once the jobSize is smaller than the window size, + * it will result in compression ratio degradation. + * NOTE 1: rsyncable mode only works when multithreading is enabled. + * NOTE 2: rsyncable performs poorly in combination with long range mode, + * since it will decrease the effectiveness of synchronization points, + * though mileage may vary. + * NOTE 3: Rsyncable mode limits maximum compression speed to ~400 MB/s. + * If the selected compression level is already running significantly slower, + * the overall speed won't be significantly impacted. + */ + #define ZSTD_c_rsyncable ZSTD_c_experimentalParam1 + +/* Select a compression format. + * The value must be of type ZSTD_format_e. + * See ZSTD_format_e enum definition for details */ +#define ZSTD_c_format ZSTD_c_experimentalParam2 + +/* Force back-reference distances to remain < windowSize, + * even when referencing into Dictionary content (default:0) */ +#define ZSTD_c_forceMaxWindow ZSTD_c_experimentalParam3 + +/* Controls whether the contents of a CDict + * are used in place, or copied into the working context. + * Accepts values from the ZSTD_dictAttachPref_e enum. + * See the comments on that enum for an explanation of the feature. */ +#define ZSTD_c_forceAttachDict ZSTD_c_experimentalParam4 + +/* Controlled with ZSTD_ParamSwitch_e enum. + * Default is ZSTD_ps_auto. + * Set to ZSTD_ps_disable to never compress literals. + * Set to ZSTD_ps_enable to always compress literals. (Note: uncompressed literals + * may still be emitted if huffman is not beneficial to use.) + * + * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use + * literals compression based on the compression parameters - specifically, + * negative compression levels do not use literal compression. + */ +#define ZSTD_c_literalCompressionMode ZSTD_c_experimentalParam5 + +/* User's best guess of source size. + * Hint is not valid when srcSizeHint == 0. + * There is no guarantee that hint is close to actual source size, + * but compression ratio may regress significantly if guess considerably underestimates */ +#define ZSTD_c_srcSizeHint ZSTD_c_experimentalParam7 + +/* Controls whether the new and experimental "dedicated dictionary search + * structure" can be used. This feature is still rough around the edges, be + * prepared for surprising behavior! + * + * How to use it: + * + * When using a CDict, whether to use this feature or not is controlled at + * CDict creation, and it must be set in a CCtxParams set passed into that + * construction (via ZSTD_createCDict_advanced2()). A compression will then + * use the feature or not based on how the CDict was constructed; the value of + * this param, set in the CCtx, will have no effect. + * + * However, when a dictionary buffer is passed into a CCtx, such as via + * ZSTD_CCtx_loadDictionary(), this param can be set on the CCtx to control + * whether the CDict that is created internally can use the feature or not. + * + * What it does: + * + * Normally, the internal data structures of the CDict are analogous to what + * would be stored in a CCtx after compressing the contents of a dictionary. + * To an approximation, a compression using a dictionary can then use those + * data structures to simply continue what is effectively a streaming + * compression where the simulated compression of the dictionary left off. + * Which is to say, the search structures in the CDict are normally the same + * format as in the CCtx. + * + * It is possible to do better, since the CDict is not like a CCtx: the search + * structures are written once during CDict creation, and then are only read + * after that, while the search structures in the CCtx are both read and + * written as the compression goes along. This means we can choose a search + * structure for the dictionary that is read-optimized. + * + * This feature enables the use of that different structure. + * + * Note that some of the members of the ZSTD_compressionParameters struct have + * different semantics and constraints in the dedicated search structure. It is + * highly recommended that you simply set a compression level in the CCtxParams + * you pass into the CDict creation call, and avoid messing with the cParams + * directly. + * + * Effects: + * + * This will only have any effect when the selected ZSTD_strategy + * implementation supports this feature. Currently, that's limited to + * ZSTD_greedy, ZSTD_lazy, and ZSTD_lazy2. + * + * Note that this means that the CDict tables can no longer be copied into the + * CCtx, so the dict attachment mode ZSTD_dictForceCopy will no longer be + * usable. The dictionary can only be attached or reloaded. + * + * In general, you should expect compression to be faster--sometimes very much + * so--and CDict creation to be slightly slower. Eventually, we will probably + * make this mode the default. + */ +#define ZSTD_c_enableDedicatedDictSearch ZSTD_c_experimentalParam8 + +/* ZSTD_c_stableInBuffer + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable. + * + * Tells the compressor that input data presented with ZSTD_inBuffer + * will ALWAYS be the same between calls. + * Technically, the @src pointer must never be changed, + * and the @pos field can only be updated by zstd. + * However, it's possible to increase the @size field, + * allowing scenarios where more data can be appended after compressions starts. + * These conditions are checked by the compressor, + * and compression will fail if they are not respected. + * Also, data in the ZSTD_inBuffer within the range [src, src + pos) + * MUST not be modified during compression or it will result in data corruption. + * + * When this flag is enabled zstd won't allocate an input window buffer, + * because the user guarantees it can reference the ZSTD_inBuffer until + * the frame is complete. But, it will still allocate an output buffer + * large enough to fit a block (see ZSTD_c_stableOutBuffer). This will also + * avoid the memcpy() from the input buffer to the input window buffer. + * + * NOTE: So long as the ZSTD_inBuffer always points to valid memory, using + * this flag is ALWAYS memory safe, and will never access out-of-bounds + * memory. However, compression WILL fail if conditions are not respected. + * + * WARNING: The data in the ZSTD_inBuffer in the range [src, src + pos) MUST + * not be modified during compression or it will result in data corruption. + * This is because zstd needs to reference data in the ZSTD_inBuffer to find + * matches. Normally zstd maintains its own window buffer for this purpose, + * but passing this flag tells zstd to rely on user provided buffer instead. + */ +#define ZSTD_c_stableInBuffer ZSTD_c_experimentalParam9 + +/* ZSTD_c_stableOutBuffer + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable. + * + * Tells he compressor that the ZSTD_outBuffer will not be resized between + * calls. Specifically: (out.size - out.pos) will never grow. This gives the + * compressor the freedom to say: If the compressed data doesn't fit in the + * output buffer then return ZSTD_error_dstSizeTooSmall. This allows us to + * always decompress directly into the output buffer, instead of decompressing + * into an internal buffer and copying to the output buffer. + * + * When this flag is enabled zstd won't allocate an output buffer, because + * it can write directly to the ZSTD_outBuffer. It will still allocate the + * input window buffer (see ZSTD_c_stableInBuffer). + * + * Zstd will check that (out.size - out.pos) never grows and return an error + * if it does. While not strictly necessary, this should prevent surprises. + */ +#define ZSTD_c_stableOutBuffer ZSTD_c_experimentalParam10 + +/* ZSTD_c_blockDelimiters + * Default is 0 == ZSTD_sf_noBlockDelimiters. + * + * For use with sequence compression API: ZSTD_compressSequences(). + * + * Designates whether or not the given array of ZSTD_Sequence contains block delimiters + * and last literals, which are defined as sequences with offset == 0 and matchLength == 0. + * See the definition of ZSTD_Sequence for more specifics. + */ +#define ZSTD_c_blockDelimiters ZSTD_c_experimentalParam11 + +/* ZSTD_c_validateSequences + * Default is 0 == disabled. Set to 1 to enable sequence validation. + * + * For use with sequence compression API: ZSTD_compressSequences*(). + * Designates whether or not provided sequences are validated within ZSTD_compressSequences*() + * during function execution. + * + * When Sequence validation is disabled (default), Sequences are compressed as-is, + * so they must correct, otherwise it would result in a corruption error. + * + * Sequence validation adds some protection, by ensuring that all values respect boundary conditions. + * If a Sequence is detected invalid (see doc/zstd_compression_format.md for + * specifics regarding offset/matchlength requirements) then the function will bail out and + * return an error. + */ +#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12 + +/* ZSTD_c_blockSplitterLevel + * note: this parameter only influences the first splitter stage, + * which is active before producing the sequences. + * ZSTD_c_splitAfterSequences controls the next splitter stage, + * which is active after sequence production. + * Note that both can be combined. + * Allowed values are between 0 and ZSTD_BLOCKSPLITTER_LEVEL_MAX included. + * 0 means "auto", which will select a value depending on current ZSTD_c_strategy. + * 1 means no splitting. + * Then, values from 2 to 6 are sorted in increasing cpu load order. + * + * Note that currently the first block is never split, + * to ensure expansion guarantees in presence of incompressible data. + */ +#define ZSTD_BLOCKSPLITTER_LEVEL_MAX 6 +#define ZSTD_c_blockSplitterLevel ZSTD_c_experimentalParam20 + +/* ZSTD_c_splitAfterSequences + * This is a stronger splitter algorithm, + * based on actual sequences previously produced by the selected parser. + * It's also slower, and as a consequence, mostly used for high compression levels. + * While the post-splitter does overlap with the pre-splitter, + * both can nonetheless be combined, + * notably with ZSTD_c_blockSplitterLevel at ZSTD_BLOCKSPLITTER_LEVEL_MAX, + * resulting in higher compression ratio than just one of them. + * + * Default is ZSTD_ps_auto. + * Set to ZSTD_ps_disable to never use block splitter. + * Set to ZSTD_ps_enable to always use block splitter. + * + * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use + * block splitting based on the compression parameters. + */ +#define ZSTD_c_splitAfterSequences ZSTD_c_experimentalParam13 + +/* ZSTD_c_useRowMatchFinder + * Controlled with ZSTD_ParamSwitch_e enum. + * Default is ZSTD_ps_auto. + * Set to ZSTD_ps_disable to never use row-based matchfinder. + * Set to ZSTD_ps_enable to force usage of row-based matchfinder. + * + * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use + * the row-based matchfinder based on support for SIMD instructions and the window log. + * Note that this only pertains to compression strategies: greedy, lazy, and lazy2 + */ +#define ZSTD_c_useRowMatchFinder ZSTD_c_experimentalParam14 + +/* ZSTD_c_deterministicRefPrefix + * Default is 0 == disabled. Set to 1 to enable. + * + * Zstd produces different results for prefix compression when the prefix is + * directly adjacent to the data about to be compressed vs. when it isn't. + * This is because zstd detects that the two buffers are contiguous and it can + * use a more efficient match finding algorithm. However, this produces different + * results than when the two buffers are non-contiguous. This flag forces zstd + * to always load the prefix in non-contiguous mode, even if it happens to be + * adjacent to the data, to guarantee determinism. + * + * If you really care about determinism when using a dictionary or prefix, + * like when doing delta compression, you should select this option. It comes + * at a speed penalty of about ~2.5% if the dictionary and data happened to be + * contiguous, and is free if they weren't contiguous. We don't expect that + * intentionally making the dictionary and data contiguous will be worth the + * cost to memcpy() the data. + */ +#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15 + +/* ZSTD_c_prefetchCDictTables + * Controlled with ZSTD_ParamSwitch_e enum. Default is ZSTD_ps_auto. + * + * In some situations, zstd uses CDict tables in-place rather than copying them + * into the working context. (See docs on ZSTD_dictAttachPref_e above for details). + * In such situations, compression speed is seriously impacted when CDict tables are + * "cold" (outside CPU cache). This parameter instructs zstd to prefetch CDict tables + * when they are used in-place. + * + * For sufficiently small inputs, the cost of the prefetch will outweigh the benefit. + * For sufficiently large inputs, zstd will by default memcpy() CDict tables + * into the working context, so there is no need to prefetch. This parameter is + * targeted at a middle range of input sizes, where a prefetch is cheap enough to be + * useful but memcpy() is too expensive. The exact range of input sizes where this + * makes sense is best determined by careful experimentation. + * + * Note: for this parameter, ZSTD_ps_auto is currently equivalent to ZSTD_ps_disable, + * but in the future zstd may conditionally enable this feature via an auto-detection + * heuristic for cold CDicts. + * Use ZSTD_ps_disable to opt out of prefetching under any circumstances. + */ +#define ZSTD_c_prefetchCDictTables ZSTD_c_experimentalParam16 + +/* ZSTD_c_enableSeqProducerFallback + * Allowed values are 0 (disable) and 1 (enable). The default setting is 0. + * + * Controls whether zstd will fall back to an internal sequence producer if an + * external sequence producer is registered and returns an error code. This fallback + * is block-by-block: the internal sequence producer will only be called for blocks + * where the external sequence producer returns an error code. Fallback parsing will + * follow any other cParam settings, such as compression level, the same as in a + * normal (fully-internal) compression operation. + * + * The user is strongly encouraged to read the full Block-Level Sequence Producer API + * documentation (below) before setting this parameter. */ +#define ZSTD_c_enableSeqProducerFallback ZSTD_c_experimentalParam17 + +/* ZSTD_c_maxBlockSize + * Allowed values are between 1KB and ZSTD_BLOCKSIZE_MAX (128KB). + * The default is ZSTD_BLOCKSIZE_MAX, and setting to 0 will set to the default. + * + * This parameter can be used to set an upper bound on the blocksize + * that overrides the default ZSTD_BLOCKSIZE_MAX. It cannot be used to set upper + * bounds greater than ZSTD_BLOCKSIZE_MAX or bounds lower than 1KB (will make + * compressBound() inaccurate). Only currently meant to be used for testing. + */ +#define ZSTD_c_maxBlockSize ZSTD_c_experimentalParam18 + +/* ZSTD_c_repcodeResolution + * This parameter only has an effect if ZSTD_c_blockDelimiters is + * set to ZSTD_sf_explicitBlockDelimiters (may change in the future). + * + * This parameter affects how zstd parses external sequences, + * provided via the ZSTD_compressSequences*() API + * or from an external block-level sequence producer. + * + * If set to ZSTD_ps_enable, the library will check for repeated offsets within + * external sequences, even if those repcodes are not explicitly indicated in + * the "rep" field. Note that this is the only way to exploit repcode matches + * while using compressSequences*() or an external sequence producer, since zstd + * currently ignores the "rep" field of external sequences. + * + * If set to ZSTD_ps_disable, the library will not exploit repeated offsets in + * external sequences, regardless of whether the "rep" field has been set. This + * reduces sequence compression overhead by about 25% while sacrificing some + * compression ratio. + * + * The default value is ZSTD_ps_auto, for which the library will enable/disable + * based on compression level (currently: level<10 disables, level>=10 enables). + */ +#define ZSTD_c_repcodeResolution ZSTD_c_experimentalParam19 +#define ZSTD_c_searchForExternalRepcodes ZSTD_c_experimentalParam19 /* older name */ + + +/*! ZSTD_CCtx_getParameter() : + * Get the requested compression parameter value, selected by enum ZSTD_cParameter, + * and store it into int* value. + * @return : 0, or an error code (which can be tested with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value); + + +/*! ZSTD_CCtx_params : + * Quick howto : + * - ZSTD_createCCtxParams() : Create a ZSTD_CCtx_params structure + * - ZSTD_CCtxParams_setParameter() : Push parameters one by one into + * an existing ZSTD_CCtx_params structure. + * This is similar to + * ZSTD_CCtx_setParameter(). + * - ZSTD_CCtx_setParametersUsingCCtxParams() : Apply parameters to + * an existing CCtx. + * These parameters will be applied to + * all subsequent frames. + * - ZSTD_compressStream2() : Do compression using the CCtx. + * - ZSTD_freeCCtxParams() : Free the memory, accept NULL pointer. + * + * This can be used with ZSTD_estimateCCtxSize_advanced_usingCCtxParams() + * for static allocation of CCtx for single-threaded compression. + */ +ZSTDLIB_STATIC_API ZSTD_CCtx_params* ZSTD_createCCtxParams(void); +ZSTDLIB_STATIC_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); /* accept NULL pointer */ + +/*! ZSTD_CCtxParams_reset() : + * Reset params to default values. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_reset(ZSTD_CCtx_params* params); + +/*! ZSTD_CCtxParams_init() : + * Initializes the compression parameters of cctxParams according to + * compression level. All other parameters are reset to their default values. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel); + +/*! ZSTD_CCtxParams_init_advanced() : + * Initializes the compression and frame parameters of cctxParams according to + * params. All other parameters are reset to their default values. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params); + +/*! ZSTD_CCtxParams_setParameter() : Requires v1.4.0+ + * Similar to ZSTD_CCtx_setParameter. + * Set one compression parameter, selected by enum ZSTD_cParameter. + * Parameters must be applied to a ZSTD_CCtx using + * ZSTD_CCtx_setParametersUsingCCtxParams(). + * @result : a code representing success or failure (which can be tested with + * ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int value); + +/*! ZSTD_CCtxParams_getParameter() : + * Similar to ZSTD_CCtx_getParameter. + * Get the requested value of one compression parameter, selected by enum ZSTD_cParameter. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value); + +/*! ZSTD_CCtx_setParametersUsingCCtxParams() : + * Apply a set of ZSTD_CCtx_params to the compression context. + * This can be done even after compression is started, + * if nbWorkers==0, this will have no impact until a new compression is started. + * if nbWorkers>=1, new parameters will be picked up at next job, + * with a few restrictions (windowLog, pledgedSrcSize, nbWorkers, jobSize, and overlapLog are not updated). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParametersUsingCCtxParams( + ZSTD_CCtx* cctx, const ZSTD_CCtx_params* params); + +/*! ZSTD_compressStream2_simpleArgs() : + * Same as ZSTD_compressStream2(), + * but using only integral types as arguments. + * This variant might be helpful for binders from dynamic languages + * which have troubles handling structures containing memory pointers. + */ +ZSTDLIB_STATIC_API size_t ZSTD_compressStream2_simpleArgs ( + ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, size_t* dstPos, + const void* src, size_t srcSize, size_t* srcPos, + ZSTD_EndDirective endOp); + + +/*************************************** +* Advanced decompression functions +***************************************/ + +/*! ZSTD_isFrame() : + * Tells if the content of `buffer` starts with a valid Frame Identifier. + * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0. + * Note 2 : Legacy Frame Identifiers are considered valid only if Legacy Support is enabled. + * Note 3 : Skippable Frame Identifiers are considered valid. */ +ZSTDLIB_STATIC_API unsigned ZSTD_isFrame(const void* buffer, size_t size); + +/*! ZSTD_createDDict_byReference() : + * Create a digested dictionary, ready to start decompression operation without startup delay. + * Dictionary content is referenced, and therefore stays in dictBuffer. + * It is important that dictBuffer outlives DDict, + * it must remain read accessible throughout the lifetime of DDict */ +ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, size_t dictSize); + +/*! ZSTD_DCtx_loadDictionary_byReference() : + * Same as ZSTD_DCtx_loadDictionary(), + * but references `dict` content instead of copying it into `dctx`. + * This saves memory if `dict` remains around., + * However, it's imperative that `dict` remains accessible (and unmodified) while being used, so it must outlive decompression. */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_byReference(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); + +/*! ZSTD_DCtx_loadDictionary_advanced() : + * Same as ZSTD_DCtx_loadDictionary(), + * but gives direct control over + * how to load the dictionary (by copy ? by reference ?) + * and how to interpret it (automatic ? force raw mode ? full mode only ?). */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_advanced(ZSTD_DCtx* dctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType); + +/*! ZSTD_DCtx_refPrefix_advanced() : + * Same as ZSTD_DCtx_refPrefix(), but gives finer control over + * how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType); + +/*! ZSTD_DCtx_setMaxWindowSize() : + * Refuses allocating internal buffers for frames requiring a window size larger than provided limit. + * This protects a decoder context from reserving too much memory for itself (potential attack scenario). + * This parameter is only useful in streaming mode, since no internal buffer is allocated in single-pass mode. + * By default, a decompression context accepts all window sizes <= (1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT) + * @return : 0, or an error code (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowSize); + +/*! ZSTD_DCtx_getParameter() : + * Get the requested decompression parameter value, selected by enum ZSTD_dParameter, + * and store it into int* value. + * @return : 0, or an error code (which can be tested with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value); + +/* ZSTD_d_format + * experimental parameter, + * allowing selection between ZSTD_format_e input compression formats + */ +#define ZSTD_d_format ZSTD_d_experimentalParam1 +/* ZSTD_d_stableOutBuffer + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable. + * + * Tells the decompressor that the ZSTD_outBuffer will ALWAYS be the same + * between calls, except for the modifications that zstd makes to pos (the + * caller must not modify pos). This is checked by the decompressor, and + * decompression will fail if it ever changes. Therefore the ZSTD_outBuffer + * MUST be large enough to fit the entire decompressed frame. This will be + * checked when the frame content size is known. The data in the ZSTD_outBuffer + * in the range [dst, dst + pos) MUST not be modified during decompression + * or you will get data corruption. + * + * When this flag is enabled zstd won't allocate an output buffer, because + * it can write directly to the ZSTD_outBuffer, but it will still allocate + * an input buffer large enough to fit any compressed block. This will also + * avoid the memcpy() from the internal output buffer to the ZSTD_outBuffer. + * If you need to avoid the input buffer allocation use the buffer-less + * streaming API. + * + * NOTE: So long as the ZSTD_outBuffer always points to valid memory, using + * this flag is ALWAYS memory safe, and will never access out-of-bounds + * memory. However, decompression WILL fail if you violate the preconditions. + * + * WARNING: The data in the ZSTD_outBuffer in the range [dst, dst + pos) MUST + * not be modified during decompression or you will get data corruption. This + * is because zstd needs to reference data in the ZSTD_outBuffer to regenerate + * matches. Normally zstd maintains its own buffer for this purpose, but passing + * this flag tells zstd to use the user provided buffer. + */ +#define ZSTD_d_stableOutBuffer ZSTD_d_experimentalParam2 + +/* ZSTD_d_forceIgnoreChecksum + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable + * + * Tells the decompressor to skip checksum validation during decompression, regardless + * of whether checksumming was specified during compression. This offers some + * slight performance benefits, and may be useful for debugging. + * Param has values of type ZSTD_forceIgnoreChecksum_e + */ +#define ZSTD_d_forceIgnoreChecksum ZSTD_d_experimentalParam3 + +/* ZSTD_d_refMultipleDDicts + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable + * + * If enabled and dctx is allocated on the heap, then additional memory will be allocated + * to store references to multiple ZSTD_DDict. That is, multiple calls of ZSTD_refDDict() + * using a given ZSTD_DCtx, rather than overwriting the previous DDict reference, will instead + * store all references. At decompression time, the appropriate dictID is selected + * from the set of DDicts based on the dictID in the frame. + * + * Usage is simply calling ZSTD_refDDict() on multiple dict buffers. + * + * Param has values of byte ZSTD_refMultipleDDicts_e + * + * WARNING: Enabling this parameter and calling ZSTD_DCtx_refDDict(), will trigger memory + * allocation for the hash table. ZSTD_freeDCtx() also frees this memory. + * Memory is allocated as per ZSTD_DCtx::customMem. + * + * Although this function allocates memory for the table, the user is still responsible for + * memory management of the underlying ZSTD_DDict* themselves. + */ +#define ZSTD_d_refMultipleDDicts ZSTD_d_experimentalParam4 + +/* ZSTD_d_disableHuffmanAssembly + * Set to 1 to disable the Huffman assembly implementation. + * The default value is 0, which allows zstd to use the Huffman assembly + * implementation if available. + * + * This parameter can be used to disable Huffman assembly at runtime. + * If you want to disable it at compile time you can define the macro + * ZSTD_DISABLE_ASM. + */ +#define ZSTD_d_disableHuffmanAssembly ZSTD_d_experimentalParam5 + +/* ZSTD_d_maxBlockSize + * Allowed values are between 1KB and ZSTD_BLOCKSIZE_MAX (128KB). + * The default is ZSTD_BLOCKSIZE_MAX, and setting to 0 will set to the default. + * + * Forces the decompressor to reject blocks whose content size is + * larger than the configured maxBlockSize. When maxBlockSize is + * larger than the windowSize, the windowSize is used instead. + * This saves memory on the decoder when you know all blocks are small. + * + * This option is typically used in conjunction with ZSTD_c_maxBlockSize. + * + * WARNING: This causes the decoder to reject otherwise valid frames + * that have block sizes larger than the configured maxBlockSize. + */ +#define ZSTD_d_maxBlockSize ZSTD_d_experimentalParam6 + + +/*! ZSTD_DCtx_setFormat() : + * This function is REDUNDANT. Prefer ZSTD_DCtx_setParameter(). + * Instruct the decoder context about what kind of data to decode next. + * This instruction is mandatory to decode data without a fully-formed header, + * such ZSTD_f_zstd1_magicless for example. + * @return : 0, or an error code (which can be tested using ZSTD_isError()). */ +ZSTD_DEPRECATED("use ZSTD_DCtx_setParameter() instead") +ZSTDLIB_STATIC_API +size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format); + +/*! ZSTD_decompressStream_simpleArgs() : + * Same as ZSTD_decompressStream(), + * but using only integral types as arguments. + * This can be helpful for binders from dynamic languages + * which have troubles handling structures containing memory pointers. + */ +ZSTDLIB_STATIC_API size_t ZSTD_decompressStream_simpleArgs ( + ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, size_t* dstPos, + const void* src, size_t srcSize, size_t* srcPos); + + +/******************************************************************** +* Advanced streaming functions +* Warning : most of these functions are now redundant with the Advanced API. +* Once Advanced API reaches "stable" status, +* redundant functions will be deprecated, and then at some point removed. +********************************************************************/ + +/*===== Advanced Streaming compression functions =====*/ + +/*! ZSTD_initCStream_srcSize() : + * This function is DEPRECATED, and equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any) + * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * + * pledgedSrcSize must be correct. If it is not known at init time, use + * ZSTD_CONTENTSIZE_UNKNOWN. Note that, for compatibility with older programs, + * "0" also disables frame content size field. It may be enabled in the future. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, + int compressionLevel, + unsigned long long pledgedSrcSize); + +/*! ZSTD_initCStream_usingDict() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); + * ZSTD_CCtx_loadDictionary(zcs, dict, dictSize); + * + * Creates of an internal CDict (incompatible with static CCtx), except if + * dict == NULL or dictSize < 8, in which case no dict is used. + * Note: dict is loaded with ZSTD_dct_auto (treated as a full zstd dictionary if + * it begins with ZSTD_MAGIC_DICTIONARY, else as raw content) and ZSTD_dlm_byCopy. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, + const void* dict, size_t dictSize, + int compressionLevel); + +/*! ZSTD_initCStream_advanced() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setParams(zcs, params); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * ZSTD_CCtx_loadDictionary(zcs, dict, dictSize); + * + * dict is loaded with ZSTD_dct_auto and ZSTD_dlm_byCopy. + * pledgedSrcSize must be correct. + * If srcSize is not known at init time, use value ZSTD_CONTENTSIZE_UNKNOWN. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, + const void* dict, size_t dictSize, + ZSTD_parameters params, + unsigned long long pledgedSrcSize); + +/*! ZSTD_initCStream_usingCDict() : + * This function is DEPRECATED, and equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_refCDict(zcs, cdict); + * + * note : cdict will just be referenced, and must outlive compression session + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); + +/*! ZSTD_initCStream_usingCDict_advanced() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setFParams(zcs, fParams); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * ZSTD_CCtx_refCDict(zcs, cdict); + * + * same as ZSTD_initCStream_usingCDict(), with control over frame parameters. + * pledgedSrcSize must be correct. If srcSize is not known at init time, use + * value ZSTD_CONTENTSIZE_UNKNOWN. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, + const ZSTD_CDict* cdict, + ZSTD_frameParameters fParams, + unsigned long long pledgedSrcSize); + +/*! ZSTD_resetCStream() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * Note: ZSTD_resetCStream() interprets pledgedSrcSize == 0 as ZSTD_CONTENTSIZE_UNKNOWN, but + * ZSTD_CCtx_setPledgedSrcSize() does not do the same, so ZSTD_CONTENTSIZE_UNKNOWN must be + * explicitly specified. + * + * start a new frame, using same parameters from previous frame. + * This is typically useful to skip dictionary loading stage, since it will reuse it in-place. + * Note that zcs must be init at least once before using ZSTD_resetCStream(). + * If pledgedSrcSize is not known at reset time, use macro ZSTD_CONTENTSIZE_UNKNOWN. + * If pledgedSrcSize > 0, its value must be correct, as it will be written in header, and controlled at the end. + * For the time being, pledgedSrcSize==0 is interpreted as "srcSize unknown" for compatibility with older programs, + * but it will change to mean "empty" in future version, so use macro ZSTD_CONTENTSIZE_UNKNOWN instead. + * @return : 0, or an error code (which can be tested using ZSTD_isError()) + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize); + + +typedef struct { + unsigned long long ingested; /* nb input bytes read and buffered */ + unsigned long long consumed; /* nb input bytes actually compressed */ + unsigned long long produced; /* nb of compressed bytes generated and buffered */ + unsigned long long flushed; /* nb of compressed bytes flushed : not provided; can be tracked from caller side */ + unsigned currentJobID; /* MT only : latest started job nb */ + unsigned nbActiveWorkers; /* MT only : nb of workers actively compressing at probe time */ +} ZSTD_frameProgression; + +/* ZSTD_getFrameProgression() : + * tells how much data has been ingested (read from input) + * consumed (input actually compressed) and produced (output) for current frame. + * Note : (ingested - consumed) is amount of input data buffered internally, not yet compressed. + * Aggregates progression inside active worker threads. + */ +ZSTDLIB_STATIC_API ZSTD_frameProgression ZSTD_getFrameProgression(const ZSTD_CCtx* cctx); + +/*! ZSTD_toFlushNow() : + * Tell how many bytes are ready to be flushed immediately. + * Useful for multithreading scenarios (nbWorkers >= 1). + * Probe the oldest active job, defined as oldest job not yet entirely flushed, + * and check its output buffer. + * @return : amount of data stored in oldest job and ready to be flushed immediately. + * if @return == 0, it means either : + * + there is no active job (could be checked with ZSTD_frameProgression()), or + * + oldest job is still actively compressing data, + * but everything it has produced has also been flushed so far, + * therefore flush speed is limited by production speed of oldest job + * irrespective of the speed of concurrent (and newer) jobs. + */ +ZSTDLIB_STATIC_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx); + + +/*===== Advanced Streaming decompression functions =====*/ + +/*! + * This function is deprecated, and is equivalent to: + * + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * ZSTD_DCtx_loadDictionary(zds, dict, dictSize); + * + * note: no dictionary will be used if dict == NULL or dictSize < 8 + */ +ZSTD_DEPRECATED("use ZSTD_DCtx_reset + ZSTD_DCtx_loadDictionary, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize); + +/*! + * This function is deprecated, and is equivalent to: + * + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * ZSTD_DCtx_refDDict(zds, ddict); + * + * note : ddict is referenced, it must outlive decompression session + */ +ZSTD_DEPRECATED("use ZSTD_DCtx_reset + ZSTD_DCtx_refDDict, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict); + +/*! + * This function is deprecated, and is equivalent to: + * + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * + * reuse decompression parameters from previous init; saves dictionary loading + */ +ZSTD_DEPRECATED("use ZSTD_DCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API size_t ZSTD_resetDStream(ZSTD_DStream* zds); + + +/* ********************* BLOCK-LEVEL SEQUENCE PRODUCER API ********************* + * + * *** OVERVIEW *** + * The Block-Level Sequence Producer API allows users to provide their own custom + * sequence producer which libzstd invokes to process each block. The produced list + * of sequences (literals and matches) is then post-processed by libzstd to produce + * valid compressed blocks. + * + * This block-level offload API is a more granular complement of the existing + * frame-level offload API compressSequences() (introduced in v1.5.1). It offers + * an easier migration story for applications already integrated with libzstd: the + * user application continues to invoke the same compression functions + * ZSTD_compress2() or ZSTD_compressStream2() as usual, and transparently benefits + * from the specific advantages of the external sequence producer. For example, + * the sequence producer could be tuned to take advantage of known characteristics + * of the input, to offer better speed / ratio, or could leverage hardware + * acceleration not available within libzstd itself. + * + * See contrib/externalSequenceProducer for an example program employing the + * Block-Level Sequence Producer API. + * + * *** USAGE *** + * The user is responsible for implementing a function of type + * ZSTD_sequenceProducer_F. For each block, zstd will pass the following + * arguments to the user-provided function: + * + * - sequenceProducerState: a pointer to a user-managed state for the sequence + * producer. + * + * - outSeqs, outSeqsCapacity: an output buffer for the sequence producer. + * outSeqsCapacity is guaranteed >= ZSTD_sequenceBound(srcSize). The memory + * backing outSeqs is managed by the CCtx. + * + * - src, srcSize: an input buffer for the sequence producer to parse. + * srcSize is guaranteed to be <= ZSTD_BLOCKSIZE_MAX. + * + * - dict, dictSize: a history buffer, which may be empty, which the sequence + * producer may reference as it parses the src buffer. Currently, zstd will + * always pass dictSize == 0 into external sequence producers, but this will + * change in the future. + * + * - compressionLevel: a signed integer representing the zstd compression level + * set by the user for the current operation. The sequence producer may choose + * to use this information to change its compression strategy and speed/ratio + * tradeoff. Note: the compression level does not reflect zstd parameters set + * through the advanced API. + * + * - windowSize: a size_t representing the maximum allowed offset for external + * sequences. Note that sequence offsets are sometimes allowed to exceed the + * windowSize if a dictionary is present, see doc/zstd_compression_format.md + * for details. + * + * The user-provided function shall return a size_t representing the number of + * sequences written to outSeqs. This return value will be treated as an error + * code if it is greater than outSeqsCapacity. The return value must be non-zero + * if srcSize is non-zero. The ZSTD_SEQUENCE_PRODUCER_ERROR macro is provided + * for convenience, but any value greater than outSeqsCapacity will be treated as + * an error code. + * + * If the user-provided function does not return an error code, the sequences + * written to outSeqs must be a valid parse of the src buffer. Data corruption may + * occur if the parse is not valid. A parse is defined to be valid if the + * following conditions hold: + * - The sum of matchLengths and literalLengths must equal srcSize. + * - All sequences in the parse, except for the final sequence, must have + * matchLength >= ZSTD_MINMATCH_MIN. The final sequence must have + * matchLength >= ZSTD_MINMATCH_MIN or matchLength == 0. + * - All offsets must respect the windowSize parameter as specified in + * doc/zstd_compression_format.md. + * - If the final sequence has matchLength == 0, it must also have offset == 0. + * + * zstd will only validate these conditions (and fail compression if they do not + * hold) if the ZSTD_c_validateSequences cParam is enabled. Note that sequence + * validation has a performance cost. + * + * If the user-provided function returns an error, zstd will either fall back + * to an internal sequence producer or fail the compression operation. The user can + * choose between the two behaviors by setting the ZSTD_c_enableSeqProducerFallback + * cParam. Fallback compression will follow any other cParam settings, such as + * compression level, the same as in a normal compression operation. + * + * The user shall instruct zstd to use a particular ZSTD_sequenceProducer_F + * function by calling + * ZSTD_registerSequenceProducer(cctx, + * sequenceProducerState, + * sequenceProducer) + * This setting will persist until the next parameter reset of the CCtx. + * + * The sequenceProducerState must be initialized by the user before calling + * ZSTD_registerSequenceProducer(). The user is responsible for destroying the + * sequenceProducerState. + * + * *** LIMITATIONS *** + * This API is compatible with all zstd compression APIs which respect advanced parameters. + * However, there are three limitations: + * + * First, the ZSTD_c_enableLongDistanceMatching cParam is not currently supported. + * COMPRESSION WILL FAIL if it is enabled and the user tries to compress with a block-level + * external sequence producer. + * - Note that ZSTD_c_enableLongDistanceMatching is auto-enabled by default in some + * cases (see its documentation for details). Users must explicitly set + * ZSTD_c_enableLongDistanceMatching to ZSTD_ps_disable in such cases if an external + * sequence producer is registered. + * - As of this writing, ZSTD_c_enableLongDistanceMatching is disabled by default + * whenever ZSTD_c_windowLog < 128MB, but that's subject to change. Users should + * check the docs on ZSTD_c_enableLongDistanceMatching whenever the Block-Level Sequence + * Producer API is used in conjunction with advanced settings (like ZSTD_c_windowLog). + * + * Second, history buffers are not currently supported. Concretely, zstd will always pass + * dictSize == 0 to the external sequence producer (for now). This has two implications: + * - Dictionaries are not currently supported. Compression will *not* fail if the user + * references a dictionary, but the dictionary won't have any effect. + * - Stream history is not currently supported. All advanced compression APIs, including + * streaming APIs, work with external sequence producers, but each block is treated as + * an independent chunk without history from previous blocks. + * + * Third, multi-threading within a single compression is not currently supported. In other words, + * COMPRESSION WILL FAIL if ZSTD_c_nbWorkers > 0 and an external sequence producer is registered. + * Multi-threading across compressions is fine: simply create one CCtx per thread. + * + * Long-term, we plan to overcome all three limitations. There is no technical blocker to + * overcoming them. It is purely a question of engineering effort. + */ + +#define ZSTD_SEQUENCE_PRODUCER_ERROR ((size_t)(-1)) + +typedef size_t (*ZSTD_sequenceProducer_F) ( + void* sequenceProducerState, + ZSTD_Sequence* outSeqs, size_t outSeqsCapacity, + const void* src, size_t srcSize, + const void* dict, size_t dictSize, + int compressionLevel, + size_t windowSize +); + +/*! ZSTD_registerSequenceProducer() : + * Instruct zstd to use a block-level external sequence producer function. + * + * The sequenceProducerState must be initialized by the caller, and the caller is + * responsible for managing its lifetime. This parameter is sticky across + * compressions. It will remain set until the user explicitly resets compression + * parameters. + * + * Sequence producer registration is considered to be an "advanced parameter", + * part of the "advanced API". This means it will only have an effect on compression + * APIs which respect advanced parameters, such as compress2() and compressStream2(). + * Older compression APIs such as compressCCtx(), which predate the introduction of + * "advanced parameters", will ignore any external sequence producer setting. + * + * The sequence producer can be "cleared" by registering a NULL function pointer. This + * removes all limitations described above in the "LIMITATIONS" section of the API docs. + * + * The user is strongly encouraged to read the full API documentation (above) before + * calling this function. */ +ZSTDLIB_STATIC_API void +ZSTD_registerSequenceProducer( + ZSTD_CCtx* cctx, + void* sequenceProducerState, + ZSTD_sequenceProducer_F sequenceProducer +); + +/*! ZSTD_CCtxParams_registerSequenceProducer() : + * Same as ZSTD_registerSequenceProducer(), but operates on ZSTD_CCtx_params. + * This is used for accurate size estimation with ZSTD_estimateCCtxSize_usingCCtxParams(), + * which is needed when creating a ZSTD_CCtx with ZSTD_initStaticCCtx(). + * + * If you are using the external sequence producer API in a scenario where ZSTD_initStaticCCtx() + * is required, then this function is for you. Otherwise, you probably don't need it. + * + * See tests/zstreamtest.c for example usage. */ +ZSTDLIB_STATIC_API void +ZSTD_CCtxParams_registerSequenceProducer( + ZSTD_CCtx_params* params, + void* sequenceProducerState, + ZSTD_sequenceProducer_F sequenceProducer +); + + +/********************************************************************* +* Buffer-less and synchronous inner streaming functions (DEPRECATED) +* +* This API is deprecated, and will be removed in a future version. +* It allows streaming (de)compression with user allocated buffers. +* However, it is hard to use, and not as well tested as the rest of +* our API. +* +* Please use the normal streaming API instead: ZSTD_compressStream2, +* and ZSTD_decompressStream. +* If there is functionality that you need, but it doesn't provide, +* please open an issue on our GitHub. +********************************************************************* */ + +/** + Buffer-less streaming compression (synchronous mode) + + A ZSTD_CCtx object is required to track streaming operations. + Use ZSTD_createCCtx() / ZSTD_freeCCtx() to manage resource. + ZSTD_CCtx object can be reused multiple times within successive compression operations. + + Start by initializing a context. + Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression. + + Then, consume your input using ZSTD_compressContinue(). + There are some important considerations to keep in mind when using this advanced function : + - ZSTD_compressContinue() has no internal buffer. It uses externally provided buffers only. + - Interface is synchronous : input is consumed entirely and produces 1+ compressed blocks. + - Caller must ensure there is enough space in `dst` to store compressed data under worst case scenario. + Worst case evaluation is provided by ZSTD_compressBound(). + ZSTD_compressContinue() doesn't guarantee recover after a failed compression. + - ZSTD_compressContinue() presumes prior input ***is still accessible and unmodified*** (up to maximum distance size, see WindowLog). + It remembers all previous contiguous blocks, plus one separated memory segment (which can itself consists of multiple contiguous blocks) + - ZSTD_compressContinue() detects that prior input has been overwritten when `src` buffer overlaps. + In which case, it will "discard" the relevant memory section from its history. + + Finish a frame with ZSTD_compressEnd(), which will write the last block(s) and optional checksum. + It's possible to use srcSize==0, in which case, it will write a final empty block to end the frame. + Without last block mark, frames are considered unfinished (hence corrupted) by compliant decoders. + + `ZSTD_CCtx` object can be reused (ZSTD_compressBegin()) to compress again. +*/ + +/*===== Buffer-less streaming compression functions =====*/ +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel); +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel); +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */ + +ZSTD_DEPRECATED("This function will likely be removed in a future release. It is misleading and has very limited utility.") +ZSTDLIB_STATIC_API +size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize is not known, use ZSTD_CONTENTSIZE_UNKNOWN */ + +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); + +/* The ZSTD_compressBegin_advanced() and ZSTD_compressBegin_usingCDict_advanced() are now DEPRECATED and will generate a compiler warning */ +ZSTD_DEPRECATED("use advanced API to access custom parameters") +ZSTDLIB_STATIC_API +size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */ +ZSTD_DEPRECATED("use advanced API to access custom parameters") +ZSTDLIB_STATIC_API +size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */ +/** + Buffer-less streaming decompression (synchronous mode) + + A ZSTD_DCtx object is required to track streaming operations. + Use ZSTD_createDCtx() / ZSTD_freeDCtx() to manage it. + A ZSTD_DCtx object can be reused multiple times. + + First typical operation is to retrieve frame parameters, using ZSTD_getFrameHeader(). + Frame header is extracted from the beginning of compressed frame, so providing only the frame's beginning is enough. + Data fragment must be large enough to ensure successful decoding. + `ZSTD_frameHeaderSize_max` bytes is guaranteed to always be large enough. + result : 0 : successful decoding, the `ZSTD_frameHeader` structure is correctly filled. + >0 : `srcSize` is too small, please provide at least result bytes on next attempt. + errorCode, which can be tested using ZSTD_isError(). + + It fills a ZSTD_FrameHeader structure with important information to correctly decode the frame, + such as the dictionary ID, content size, or maximum back-reference distance (`windowSize`). + Note that these values could be wrong, either because of data corruption, or because a 3rd party deliberately spoofs false information. + As a consequence, check that values remain within valid application range. + For example, do not allocate memory blindly, check that `windowSize` is within expectation. + Each application can set its own limits, depending on local restrictions. + For extended interoperability, it is recommended to support `windowSize` of at least 8 MB. + + ZSTD_decompressContinue() needs previous data blocks during decompression, up to `windowSize` bytes. + ZSTD_decompressContinue() is very sensitive to contiguity, + if 2 blocks don't follow each other, make sure that either the compressor breaks contiguity at the same place, + or that previous contiguous segment is large enough to properly handle maximum back-reference distance. + There are multiple ways to guarantee this condition. + + The most memory efficient way is to use a round buffer of sufficient size. + Sufficient size is determined by invoking ZSTD_decodingBufferSize_min(), + which can return an error code if required value is too large for current system (in 32-bits mode). + In a round buffer methodology, ZSTD_decompressContinue() decompresses each block next to previous one, + up to the moment there is not enough room left in the buffer to guarantee decoding another full block, + which maximum size is provided in `ZSTD_frameHeader` structure, field `blockSizeMax`. + At which point, decoding can resume from the beginning of the buffer. + Note that already decoded data stored in the buffer should be flushed before being overwritten. + + There are alternatives possible, for example using two or more buffers of size `windowSize` each, though they consume more memory. + + Finally, if you control the compression process, you can also ignore all buffer size rules, + as long as the encoder and decoder progress in "lock-step", + aka use exactly the same buffer sizes, break contiguity at the same place, etc. + + Once buffers are setup, start decompression, with ZSTD_decompressBegin(). + If decompression requires a dictionary, use ZSTD_decompressBegin_usingDict() or ZSTD_decompressBegin_usingDDict(). + + Then use ZSTD_nextSrcSizeToDecompress() and ZSTD_decompressContinue() alternatively. + ZSTD_nextSrcSizeToDecompress() tells how many bytes to provide as 'srcSize' to ZSTD_decompressContinue(). + ZSTD_decompressContinue() requires this _exact_ amount of bytes, or it will fail. + + result of ZSTD_decompressContinue() is the number of bytes regenerated within 'dst' (necessarily <= dstCapacity). + It can be zero : it just means ZSTD_decompressContinue() has decoded some metadata item. + It can also be an error code, which can be tested with ZSTD_isError(). + + A frame is fully decoded when ZSTD_nextSrcSizeToDecompress() returns zero. + Context can then be reset to start a new decompression. + + Note : it's possible to know if next input to present is a header or a block, using ZSTD_nextInputType(). + This information is not required to properly decode a frame. + + == Special case : skippable frames == + + Skippable frames allow integration of user-defined data into a flow of concatenated frames. + Skippable frames will be ignored (skipped) by decompressor. + The format of skippable frames is as follows : + a) Skippable frame ID - 4 Bytes, Little endian format, any value from 0x184D2A50 to 0x184D2A5F + b) Frame Size - 4 Bytes, Little endian format, unsigned 32-bits + c) Frame Content - any content (User Data) of length equal to Frame Size + For skippable frames ZSTD_getFrameHeader() returns zfhPtr->frameType==ZSTD_skippableFrame. + For skippable frames ZSTD_decompressContinue() always returns 0 : it only skips the content. +*/ + +/*===== Buffer-less streaming decompression functions =====*/ + +ZSTDLIB_STATIC_API size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize); /**< when frame content size is not known, pass in frameContentSize == ZSTD_CONTENTSIZE_UNKNOWN */ + +ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx); +ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); +ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); + +ZSTDLIB_STATIC_API size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx* dctx); +ZSTDLIB_STATIC_API size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); + +/* misc */ +ZSTD_DEPRECATED("This function will likely be removed in the next minor release. It is misleading and has very limited utility.") +ZSTDLIB_STATIC_API void ZSTD_copyDCtx(ZSTD_DCtx* dctx, const ZSTD_DCtx* preparedDCtx); +typedef enum { ZSTDnit_frameHeader, ZSTDnit_blockHeader, ZSTDnit_block, ZSTDnit_lastBlock, ZSTDnit_checksum, ZSTDnit_skippableFrame } ZSTD_nextInputType_e; +ZSTDLIB_STATIC_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx); + + + +/*! ZSTD_isDeterministicBuild() : + * Returns 1 if the library is built using standard compilation flags, + * and participates in determinism guarantees with other builds of the + * same version. + * If this function returns 0, it means the library was compiled with + * non-standard compilation flags that change the output of the + * compressor. + * This is mainly used for Zstd's determinism test suite, which is only + * run when this function returns 1. + */ +ZSTDLIB_API int ZSTD_isDeterministicBuild(void); + + +/* ========================================= */ +/** Block level API (DEPRECATED) */ +/* ========================================= */ + +/*! + + This API is deprecated in favor of the regular compression API. + You can get the frame header down to 2 bytes by setting: + - ZSTD_c_format = ZSTD_f_zstd1_magicless + - ZSTD_c_contentSizeFlag = 0 + - ZSTD_c_checksumFlag = 0 + - ZSTD_c_dictIDFlag = 0 + + This API is not as well tested as our normal API, so we recommend not using it. + We will be removing it in a future version. If the normal API doesn't provide + the functionality you need, please open a GitHub issue. + + Block functions produce and decode raw zstd blocks, without frame metadata. + Frame metadata cost is typically ~12 bytes, which can be non-negligible for very small blocks (< 100 bytes). + But users will have to take in charge needed metadata to regenerate data, such as compressed and content sizes. + + A few rules to respect : + - Compressing and decompressing require a context structure + + Use ZSTD_createCCtx() and ZSTD_createDCtx() + - It is necessary to init context before starting + + compression : any ZSTD_compressBegin*() variant, including with dictionary + + decompression : any ZSTD_decompressBegin*() variant, including with dictionary + - Block size is limited, it must be <= ZSTD_getBlockSize() <= ZSTD_BLOCKSIZE_MAX == 128 KB + + If input is larger than a block size, it's necessary to split input data into multiple blocks + + For inputs larger than a single block, consider using regular ZSTD_compress() instead. + Frame metadata is not that costly, and quickly becomes negligible as source size grows larger than a block. + - When a block is considered not compressible enough, ZSTD_compressBlock() result will be 0 (zero) ! + ===> In which case, nothing is produced into `dst` ! + + User __must__ test for such outcome and deal directly with uncompressed data + + A block cannot be declared incompressible if ZSTD_compressBlock() return value was != 0. + Doing so would mess up with statistics history, leading to potential data corruption. + + ZSTD_decompressBlock() _doesn't accept uncompressed data as input_ !! + + In case of multiple successive blocks, should some of them be uncompressed, + decoder must be informed of their existence in order to follow proper history. + Use ZSTD_insertBlock() for such a case. +*/ + +/*===== Raw zstd block functions =====*/ +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_getBlockSize (const ZSTD_CCtx* cctx); +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBlock (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_insertBlock (ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize); /**< insert uncompressed block into `dctx` history. Useful for multi-blocks decompression. */ + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */ diff --git a/dependencies/linux64/include/zstd_errors.h b/dependencies/linux64/include/zstd_errors.h new file mode 100644 index 0000000..8ebc95c --- /dev/null +++ b/dependencies/linux64/include/zstd_errors.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_ERRORS_H_398273423 +#define ZSTD_ERRORS_H_398273423 + +#if defined (__cplusplus) +extern "C" { +#endif + +/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */ +#ifndef ZSTDERRORLIB_VISIBLE + /* Backwards compatibility with old macro name */ +# ifdef ZSTDERRORLIB_VISIBILITY +# define ZSTDERRORLIB_VISIBLE ZSTDERRORLIB_VISIBILITY +# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDERRORLIB_VISIBLE __attribute__ ((visibility ("default"))) +# else +# define ZSTDERRORLIB_VISIBLE +# endif +#endif + +#ifndef ZSTDERRORLIB_HIDDEN +# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDERRORLIB_HIDDEN __attribute__ ((visibility ("hidden"))) +# else +# define ZSTDERRORLIB_HIDDEN +# endif +#endif + +#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBLE +#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZSTDERRORLIB_API __declspec(dllimport) ZSTDERRORLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#else +# define ZSTDERRORLIB_API ZSTDERRORLIB_VISIBLE +#endif + +/*-********************************************* + * Error codes list + *-********************************************* + * Error codes _values_ are pinned down since v1.3.1 only. + * Therefore, don't rely on values if you may link to any version < v1.3.1. + * + * Only values < 100 are considered stable. + * + * note 1 : this API shall be used with static linking only. + * dynamic linking is not yet officially supported. + * note 2 : Prefer relying on the enum than on its value whenever possible + * This is the only supported way to use the error list < v1.3.1 + * note 3 : ZSTD_isError() is always correct, whatever the library version. + **********************************************/ +typedef enum { + ZSTD_error_no_error = 0, + ZSTD_error_GENERIC = 1, + ZSTD_error_prefix_unknown = 10, + ZSTD_error_version_unsupported = 12, + ZSTD_error_frameParameter_unsupported = 14, + ZSTD_error_frameParameter_windowTooLarge = 16, + ZSTD_error_corruption_detected = 20, + ZSTD_error_checksum_wrong = 22, + ZSTD_error_literals_headerWrong = 24, + ZSTD_error_dictionary_corrupted = 30, + ZSTD_error_dictionary_wrong = 32, + ZSTD_error_dictionaryCreation_failed = 34, + ZSTD_error_parameter_unsupported = 40, + ZSTD_error_parameter_combination_unsupported = 41, + ZSTD_error_parameter_outOfBound = 42, + ZSTD_error_tableLog_tooLarge = 44, + ZSTD_error_maxSymbolValue_tooLarge = 46, + ZSTD_error_maxSymbolValue_tooSmall = 48, + ZSTD_error_cannotProduce_uncompressedBlock = 49, + ZSTD_error_stabilityCondition_notRespected = 50, + ZSTD_error_stage_wrong = 60, + ZSTD_error_init_missing = 62, + ZSTD_error_memory_allocation = 64, + ZSTD_error_workSpace_tooSmall= 66, + ZSTD_error_dstSize_tooSmall = 70, + ZSTD_error_srcSize_wrong = 72, + ZSTD_error_dstBuffer_null = 74, + ZSTD_error_noForwardProgress_destFull = 80, + ZSTD_error_noForwardProgress_inputEmpty = 82, + /* following error codes are __NOT STABLE__, they can be removed or changed in future versions */ + ZSTD_error_frameIndex_tooLarge = 100, + ZSTD_error_seekableIO = 102, + ZSTD_error_dstBuffer_wrong = 104, + ZSTD_error_srcBuffer_wrong = 105, + ZSTD_error_sequenceProducer_failed = 106, + ZSTD_error_externalSequences_invalid = 107, + ZSTD_error_maxCode = 120 /* never EVER use this value directly, it can change in future versions! Use ZSTD_isError() instead */ +} ZSTD_ErrorCode; + +ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code); /**< Same as ZSTD_getErrorName, but using a `ZSTD_ErrorCode` enum argument */ + + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_ERRORS_H_398273423 */ diff --git a/dependencies/linux64/lib/libjpeg.a b/dependencies/linux64/lib/libjpeg.a new file mode 100644 index 0000000000000000000000000000000000000000..9d4b0adff46f67c0d2a44f666eda5063f0a0f7c4 GIT binary patch literal 274046 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 z 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

l=d>3fnlzU`v{$I8xuOYUq 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 J$^Y)~{}=McYzzPZ literal 0 HcmV?d00001 diff --git a/dependencies/linux64/lib/libpng.a b/dependencies/linux64/lib/libpng.a new file mode 120000 index 0000000..5671875 --- /dev/null +++ b/dependencies/linux64/lib/libpng.a @@ -0,0 +1 @@ +libpng16.a \ No newline at end of file diff --git a/dependencies/linux64/lib/libpng16.a b/dependencies/linux64/lib/libpng16.a new file mode 100644 index 0000000000000000000000000000000000000000..a26ecb599cfc8bfa5b88bedd5a76b99389cf0571 GIT binary patch literal 405016 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

a~S52DFd_{ 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 z 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%0Aw5M0_36WbsMvz%K(`?GeSzPE%r(|2_0IUDdn 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 literal 0 HcmV?d00001 diff --git a/dependencies/linux64/lib/libz.a b/dependencies/linux64/lib/libz.a new file mode 100644 index 0000000000000000000000000000000000000000..e062372a9a8d46dfd087d735c9cf0ae888be741f GIT binary patch literal 146716 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

?5_R3Fd!7^~^ItE_r}VlnT^MzPlR|`w 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