From b0bbe1e870a9ae07e33cc36ee6e6dca70f062dd0 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Fri, 9 Jun 2023 18:20:07 +0800 Subject: [PATCH] add giflib Signed-off-by: zhongluping <278527840@qq.com> --- thirdparty/giflib/HPKBUILD | 65 +++++++++++++++ thirdparty/giflib/README.OpenSource | 11 +++ thirdparty/giflib/README_zh.md | 17 ++++ thirdparty/giflib/SHA512SUM | 1 + thirdparty/giflib/docs/hap_integrate.md | 91 +++++++++++++++++++++ thirdparty/giflib/docs/pic/giflib_test.png | Bin 0 -> 26815 bytes 6 files changed, 185 insertions(+) create mode 100644 thirdparty/giflib/HPKBUILD create mode 100755 thirdparty/giflib/README.OpenSource create mode 100755 thirdparty/giflib/README_zh.md create mode 100644 thirdparty/giflib/SHA512SUM create mode 100755 thirdparty/giflib/docs/hap_integrate.md create mode 100755 thirdparty/giflib/docs/pic/giflib_test.png diff --git a/thirdparty/giflib/HPKBUILD b/thirdparty/giflib/HPKBUILD new file mode 100644 index 00000000..facf2ad6 --- /dev/null +++ b/thirdparty/giflib/HPKBUILD @@ -0,0 +1,65 @@ +# Contributor: liulihong +# Maintainer: liulihong +pkgname=giflib +pkgver=5.2.1 +pkgrel=0 +pkgdesc="giflib is a library for reading and writing gif images. " +url="https://sourceforge.net/projects/giflib/" +archs=("armeabi-v7a" "arm64-v8a") +license=("1997 Eric S. Raymond") +depends=() +makedepends=() + +source="https://sourceforge.net/projects/$pkgname/files/$pkgname-$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +buildtools="make" + +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz + +cc= +ar= +# giflib 采用makefile编译构建,为了保留构建环境(方便测试)。因此同一份源码在解压后分为两份,各自编译互不干扰 +prepare() { + cp -rf $builddir $builddir-$ARCH-build + cd $builddir-$ARCH-build + if [ $ARCH == "armeabi-v7a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clang + ar=${OHOS_SDK}/native/llvm/bin/llvm-ar + fi + if [ $ARCH == "arm64-v8a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clang + ar=${OHOS_SDK}/native/llvm/bin/llvm-ar + fi + cd $OLDPWD # 1> /dev/null +} + +build() { + cd $builddir-$ARCH-build + make CC=${cc} AR=${ar} -j4 > `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir-$ARCH-build + make install PREFIX=$LYCIUM_ROOT/usr/$pkgname/$ARCH >> `pwd`/build.log 2>&1 + cd $OLDPWD + unset cc ar +} + +check() { + echo "The test must be on an OpenHarmony device!" + # real test CMD + # TODO +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir $builddir-armeabi-v7a-build $builddir-arm64-v8a-build #${PWD}/$packagename +} diff --git a/thirdparty/giflib/README.OpenSource b/thirdparty/giflib/README.OpenSource new file mode 100755 index 00000000..85e4046f --- /dev/null +++ b/thirdparty/giflib/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "giflib", + "License": "giflib COPYING", + "License File": "COPYING", + "Version Number": "5.2.1", + "Owner": "huangminzhong2@huawei.com", + "Upstream URL": "https://sourceforge.net/projects/giflib", + "Description": "giflib is a library for reading and writing gif images." + } +] diff --git a/thirdparty/giflib/README_zh.md b/thirdparty/giflib/README_zh.md new file mode 100755 index 00000000..7b9bcb86 --- /dev/null +++ b/thirdparty/giflib/README_zh.md @@ -0,0 +1,17 @@ +# giflib三方库说明 + +## 功能简介 + +giflib是一个用于阅读和编写gif图像的库 + +## 使用约束 + +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:5.2.1 +- 当前适配的功能:阅读和编写gif图像 +- [giflib COPYING](https://sourceforge.net/p/giflib/code/ci/master/tree/COPYING) + +## 集成方式 + +- [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/giflib/SHA512SUM b/thirdparty/giflib/SHA512SUM new file mode 100644 index 00000000..b13c20ac --- /dev/null +++ b/thirdparty/giflib/SHA512SUM @@ -0,0 +1 @@ +4550e53c21cb1191a4581e363fc9d0610da53f7898ca8320f0d3ef6711e76bdda2609c2df15dc94c45e28bff8de441f1227ec2da7ea827cb3c0405af4faa4736 giflib-5.2.1.tar.gz diff --git a/thirdparty/giflib/docs/hap_integrate.md b/thirdparty/giflib/docs/hap_integrate.md new file mode 100755 index 00000000..01fc5169 --- /dev/null +++ b/thirdparty/giflib/docs/hap_integrate.md @@ -0,0 +1,91 @@ +# giflib集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- ubuntu20.04 +- [OpenHarmony3.2Release镜像](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fdayu200_standard_arm32.tar.gz) +- [ohos_sdk_public 3.2.11.9 (API Version 9 Release)](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fohos-sdk-windows_linux-public.tar.gz) +- [DevEco Studio 3.1 Beta2](https://gitee.com/link?target=https%3A%2F%2Fcontentcenter-vali-drcn.dbankcdn.cn%2Fpvt_2%2FDeveloperAlliance_package_901_9%2Ff3%2Fv3%2FuJyuq3syQ2ak4hE1QZmAug%2Fdevecostudio-windows-3.1.0.400.zip%3FHW-CC-KV%3DV1%26HW-CC-Date%3D20230408T013335Z%26HW-CC-Expire%3D315360000%26HW-CC-Sign%3D96262721EDC9B34E6F62E66884AB7AE2A94C2A7B8C28D6F7FC891F46EB211A70) +- [准备三方库构建环境](../../../tools/README.md#编译环境准备) +- [准备三方库测试环境](../../../tools/README.md#ci环境准备) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/giflib # 三方库giflib的目录结构如下 + ├── docs # 三方库相关文档的文件夹 + ├── HPKBUILD # 构建脚本 + ├── SHA512SUM # 三方库校验文件 + ├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将giflib拷贝至tools/main目录下 + + ```shell + cd tpc_c_cplusplus + cp thirdparty/giflib tools/main -rf + ``` + +- 在tools目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + + ```shell + cd tools + ./build.sh giflib + ``` + +- 三方库头文件及生成的库 + + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + giflib/arm64-v8a giflib/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + +  ![thirdparty_install_dir](../../thirdparty_template/docs/pic/xxx_install_dir.png) + + 其中`xxx`代表三方库名,即为`giflib` + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/giflib/${OHOS_ARCH}/lib/libgif.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/giflib/${OHOS_ARCH}/include) + ``` + + ![giflib_usage](../../thirdparty_template/docs/pic/xxx_usage.png) + +## 测试三方库 + +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +进入到构建目录执行ctest运行测试用例(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录) + + ![giflib_test](pic/giflib_test.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) diff --git a/thirdparty/giflib/docs/pic/giflib_test.png b/thirdparty/giflib/docs/pic/giflib_test.png new file mode 100755 index 0000000000000000000000000000000000000000..ff5fe5eac979da990a64d966cf57ed212f6f6db9 GIT binary patch literal 26815 zcmcG0dtB1@{{LEAwso=An$uFJuGPA+Br8pz(xP*6nJYCfLFI)drJ0%v0-bJJY8+Q- znnGzy6O@$5Qh_y1%?o4-cu7f3QBg?|5D@sivDet*m!+kAk2;&pl6Ugvi0 zM9%rt;?oa4_+ZZ8w!8lD!3Q5M`{09VcV^B2|K-cgPrm|xOpEvdx#fdG-r@o9FCSqx zf4}*I4~odMCJ%fJ{{54q+kGNF_+V~@@t0m6dUnJj zK0phJqc2?Ma8JzN?%d)TG<|T-!g4cm{pH!5Ho zr1IFcycdhp>cz*zeq!$MDyg4(CWc)a%2@3T&Az&z`<8s@6jgt<{p#Frtqp_n>9yXW zGR;NsWikiS(WxIfLV9=#?Izpdt6u2Y@Ds(aST&g=lMOzT!^V8j3Rq`xn8L?$bT$q4 ziH-iUi|H~eEccG8pL?^qO}!AWA`NDCsjb-YFiBYJB77`?9CHC#|9Q7Ztn#|ViO`%J>Mh;1TRIK7td|YbTDapF4QRz{bNHtU~hez8?#ZTH=Sq3niz@YJYkkj3(g<9 zHfBDOte~8|M(sU4&rn-8{Zl<@v|QrOog6zcri|9{62Br{&xY((Jlx1cIFHj%I}&g> z94oExtgHTUYeiIFRQdqF?H+H;ld!dfcvE8KDv!T_N|ldK!=sMhgoJdUJVtl3~RGd^{ zw5s@q`wf2JihIF_WJ{Q5V)E~pE;}{aYk&KbV&yE{4YVM1^V)!ZE1wy#`k2x+yQ|yw zF3O9}3vsq))k;`t{QhzB9sFkv=rY3yA?SXW%}^I^n~N=prZ>+KzL?xBAT`9{grF?7s2N3Wsl($hB5f-Dd=v{l zZ?1BvXtg7pCeRO%Z%roUBQ%)@$b?FH(FNUwvsS@-Y0o$*)tmyD>7(*brNa&T$-49T zH+%4<2Z+tpk*A@V0hXfKLUYe=_H6x}n%5hLGt1nkkc&-w4g5p_(kom#e9^gM*E?#Ks(=Z#B@jG93?&ee zLmy)X_rWPsb&EcaA4fL@3{ReCYY|br7jfiHmvv~Fm@}k{E#!fet^NovgXFAlG?}v9(rcQX?lwR*sThe*7t+3kbBWhGt6WgKt&^9kj zp!v8HC+$(qAZ*TNMBO><6Zo|kCSMRv2u$$7q?mqhcIrIE_;?6p-<)%k*O~FsdZ~RA zl@*@VOVgYW)w%Iu34NxP?3I#%>B{oMUWhzRj`co#n=jWly4bUGIy5z)AyOGEU2%l& zA#HZW<$fXZRx~Nb<^4R>964S8fFyq0edFxW|D)_U)Co)%~tT;Ni-u0b9s7Lyq6{X$6@pzwWizk*Yn~z1Gu+vTb z4m*PJ4xZF>b)F|-Md}bO!}<^fwFW#ad`bhV%)lcQG^|w2$ZDM}tXDFGDPHphky?H; z6l+iS#s;553%=?YY9pN277s!m9kc^2DEu2L({p%#pwsL67(7+hlh3(}e}Ip&B=MK129xPxMKu~n+@zL4 zPIj8ax7`cgfWJY$O?DVsbD8R)KvJPYMdTQ`ut?naxMDVT;nVeFEhQ|8O}h61Hrsrt z2<;(=jB{UKPu5(yaP({hy~pX4^hol4cx}Uke;r3;H#X5Gq;x(UoX4+Q%gZ_Iq^0MS zd|e?z-5gtPEs7iNip}$Z{n}b@R{a9Z%v{bW_)66&62b8Lq!zCa964cI*w9ENMGHN} zj|MqPj*JEut#;Sx`4?2`ekeY!&E(R9iC^X){<@IwK_y}O*s92HocPF zk$`VqR+%2FY$xeUO2ow^(^^X+nENYbJG|cCLol%h(CXr?b~y`)10#*3@5wCr3gw8Q z*|949Wit+QX~vkKSWlL2eqrMmMey~|12!d>dTNVQ}$U*YS^UaW-I-@$p0f_7e|xcZTwb;GZ?tPWXGg^3_nC z&mxfzC!f(T`cFaK^L zd)}|7Dt7sG+g&Cnt(34et(4Z%C&}sQTb!N1Y=F*Prd;s3?1cT7=(*Fceud@kM`}EW zzi@?~9Z3m#T#=N!2pUCCX8i*fpI;>hm4?ErlXe=mmo06aWNBrc-k0kpYvuhK)LEE6 ze*eB)PSb)Sz0W>D#POT+$ZpybPjm^~i!jzoJ02U~;>B z{Cv8e-jR4%*`|vg!5#^|wZ6YT_;&DJ66?a9gwVUS4Pawy^qHFZKM?-G`*SlNzd!h9 zr@Rv>dV^W;c7&f^+e_RP?=#u6eiQQ zh(cw$i(F%^8y~r@3>3WCbXIu7QRQ~)1J>Azx$cUq7o zu}ftN7xY5LP8KRC=TJWxI&OFofZg^8g^&RI&jwFxGmmi^=CU zR+n-}-(N%To@t{DY?@x%$@Lo^NAy@{+zm5@aLvH_tiAm_;^~-NEQLAAwTJlp7xq}= z`cJO4F}bwdOzo2un?m~fUT(j}DpR3$w!p+(*wGhuUsfO!EAK{$3tlK$BIpa}8({fw zj0Hb^yYbh!Pv~zlez@fokF;?8Ws=&^t?nMSl<6%?j($7waEudp8Fb8*1NWEU`3Q}^ za4uYIM^$)=dzc(Bl(Q6jm|~%5+1lcGw+;$czh_)LmqBbRzUij#z8QhGC?!T7cZf&lo|Q zeEO#(n{3E-#Y4wGi~#QDbhQ@ZBm)|jLmsn{LYrFkCn;8qFN-KEs`<|0qVU}?Ur-`t;hNA*+d7U$)|(`)y~InF+O@@?6F zS&B^EYzn1>);AZe6V4d4%(vhp3&vuHd!bG`yJ3o}Tr|SPqdj#KOHnzp1Mt4Rb&)xP zp8Loo+};cF9W@#YPlJQ}Ow3w}j+e_F1?Y70=-4ChAPwiZrEFObn!}c;rv-tB8%-RC zR8X(EzJ2fi)N*K0s^JlF>m}MCSd<3aXc(vTgwP|G{g@^;R>{g~LEmu}&s_H_=z^Fr zM?b;bZ8t9_CWOE&S+%M=q2J$Nt`pA0S(X!1s@v`rj@?9}&U!Zqoc3t*Cm*;GE*0SF z>E`1bS^FAla9-?uX*$k*k?1YnD6FZQUK_6;!j_m4CmEpQw4{NKWBhB;a}a@3e9;|19n3JbMS7xm_52i$!z?P9fce<6uox*y9(crRmslEBg3)V`#krC zh0VYZdGB$s6gSP0=fH2;Wp*u=-c$aPlvcvo)>kC!wKpXQ^Rdmdm9v#aGe(^mR$Yht zW`%DxK3j_QF8vU|!V3Tvwl+4GCh$o?=+maxS_7Co87zBOPr`S>5U|}g$0*6%ue5&D z32D0tLN91H(T}evQ5ipRY2b6#Zw8Qk4f<)P{wh~t@66dXbKPem$!|N>1rx+lg4dR2 zXKexaY?4XC%71`A5#|V(dHlsuX%=7HsqW$fR$!36loyMRYXeX&j z@K}61DVFQk->Cc0>wXP?us(6p?g4D8NcD`)mo#pui14>3)e)=-2J&{5I!x{O$!LwU zmKCk%C30tO)N`YZzdbM<;k zukN$%+0I&CG$%q^O`5E3M@&{Ap6c~7gI*a;Qbm_=)mK5E)=AM^!Y~$HrXw3h5l?^p zc@Mgjg|7WK>{daMQ#D$ei~+cg=4nB3v0w6`b2f|X8Yc3fDP+Z2Ni6p3CuM;w;l_*y z@L+o~p}A4oSM0XcE73}GFWA(f8CLKi_TB}UQuYbIO6Q7)cF6y^lPAA7m$7j_OjKMY zT~>`tJpic<41C3@#QYsF7L#YraW)Cer1kn2j~TdCHiH8L0#qr0`Ysq#QMxGTCIZ{z zROhW&*r7?M;O8}1JK=nIO(sLJt)XmD-4q~umeKFzi!oQ)uCkSOG#ZyAf6MKZdWsMKx3s$HsfmiOfUO3{Cu%c+f+qvZr)ie&lacSld0-#ck#cU!=tk>h0^xdfjXadCV}9wmr=0+T^fU ze?O&ITkQ*u-h2ahRllOT$ z%=b^!wYWT%7akctbZ=XhJkN#_pCPczG?GlVS1or{vK%#X8LxD3qfdvZQ$-L+N*8v@ z8=(shT0-V7GYlYfl6DM2b^m+fL%YJd-vXc^Q{r6B%F}!K07^;p-H=e(1PgrD)fj{} zb$TsctVNaVGOkJoAt?QM%;ZPC!?Kv_;oVgIIOycnaQ$dIX~NX-VAbcwuG5mZUT1k} zbipOGPJm_;#&%On3Eh1CkkXo@P6I^K6uinRnOxEezNbW2%Xmsu9|^;cF8F+M**=iX5} zeA=TKgf*%RyVLV9&qlc24-os=h{G!kKPo$$%w@4V^7$oWs)NIH{D|jF8_I{#h8@KM z>*sjGW`u^39!}Q9YCQ8sWO-WjM%5toDnNi&%}g$h7_N>^xLg@^ZkjjFewswaJx8{_ z13;Pk8229heRFF?4Zqkb%Sm3IRA7gY@0CQ|SaapUVr=;rTN0pS-6swjvhR*se_9C` zU#>>*Lj3h2U6+^cdPy!BCBS^^fd;s#=?!k0+o8#qQQ$aF>)_{19K%||%&3>r)A~{F z&DkhGanAsM8Ir5w$-WBfT{9{e_Sgg*-YKL5=6S!M&pYBuC_$jIB3>SS5wgoq%H*L~ zsO)I`r#6-5hrqY@m~H@|M__$Y^@3J!k=?m2?U8-|fvTqDbSGg|+a~soT+SfDlv^7U zOgFcuoJ-``5jp_QjlZFEvG2a4u33Jd+nRZmMWwb!qasb(YS=^wr*fq20EJmymmY^onk_^T<(L1eok$9qNm|@T`a!r?M%08*PE$Qp( zRdpw%AGA)5yWmIEBl&;HKUiEBIguKYMOZ;WWIb41GdV{yvvLDkYqnB(|~V_U0q1^27jRI>i@ z(=@2FI7ju*2Chb%D@&W#z9wpuIT}928j_EBd{Y`+-!r=qMvd_JM!umZ*0R`FYT2;g z8k$}WAMB5c@VRMA+iFViXU1C$QoR1*;9qT}Rh`E45VP6oBeC0;N@Dk7T;YS1YAmE0 zWl~se^@`Icw3&Ra|8*<+m%&8G-GCA5W9`FZh4(t;c6>i%n{PHnFgc>n)^B@mng#R6 zpwa;9O_r`i3%nzx7~II_wWR+3AV+uW+maxr=79xZ7m=d$FCMh!-5qpTU|Dkq~6e$%Ap=YkCW`@sH*Lrh~ z;d?K8qvGy!CLTgM^`@z9Z9|& zFLjfTul6|Nz#W4X_$?TqCp(-(nK01Li`Es=$_G-?x&)D|xdP5|(s#S9gJ@PzEO|MQ z8%CX*tD?LRw_lU~&iu}pp5%6S;@HJ@GI2bo-IO#@(QZn7ajG55U?10ZsyNXv_o5mk ze9X3=FuH4zXf{Tqx#GhAjtsS&1FL^wv6&2|csC9Y2mL`Bz~NNXHWA$(_=?$@N= zmU?FEw4g90C2Cv;b0Uus{T0xH5v)v09G46Z8}eo6=aGM9f|-*GW_P(>BONiKl-o1c zwOzzFR664MrM5^ImsgLM4Y);8$d6U%1SY5fqYC&^900Z69oc`vwsNbZM)bMH;oQ7~ zbFNzL8ZT=PYKf5lj>$9RNFZIe_-5UQ7a!ZyXg1pLjG0g<`v*Mj$m^|C<_K0(TPQ)* z;!+~9VxHMx7j0N*N-P>*f?t70EP%-gj&)kXxTIV($#fP!m@nr?8nz5ITsOJ2!hR&I z0XCwG8;@_}yjJR{13K722&NQl%fW!{=PXW=q@TTJ-J9(e*>I)W+#e5@WV`i+SIM3J z;PSY7?6&ZQGktV&nORW2aT?t!wwjt&MwITVJ@G3#p?}s7gz(@&@Yh>@7aP`KA;J@% z$G#~ybh9|&KePNLVe6~u1BkWFIkT}TRza{08=)rY>EBl7{ILQqRqT+^2ha+uNG;O$ zBMheRD^SHTk)4s7%ng>5ktq(pZ`N6zqeO81uCRpl4=4OgiSRSU^ZVQW8>H&zc%r4_-oxHE z@Kkxn@WcEo1L6TpB-1lA7?6KFV}n3n8l1KEZ9iNt7S04z=vsH#X96$z3UO1ZLkh2L zuU&uC3(Zz5Y)@(JRjXKY)c4-fUBk376R5)D?%*0`@L95}x%+y1YdrowU6^1`m(NDw z_kL4%92ZkM&pS}yzU!|n$sTo{kNaunWiqz;cGZhwsJXwK6)(9SteA;`q7zntq4}=j zL;;8f1I+9yjF>tPV;rSJ57@!onQY9ylpG5BHODTodIndv)OG4a$CSEH!q>f#^)>PN~dDtDgu zvwu!M&q)ZILERcjFde^txWb&$^OM?dMBA^W9;nlzT%xTpt&Dki`Pd12{YK~Gn_?9L zZ?x4e_+*!9*_j;=AgP?dupk*G8^eKMV!32}ru8rke@Qom2(1?5Hr==F(F>pUbn=m; zyx}@?imVYIQyD$vp`^J&+V-H}xu{19R^$*6h+?X*G7ypD#hJOLE%IU?^myucEiO`;qqtWXH~tpwIXmUTuYE-! zw+V@WfM&VEXzC93o|lW{a>Pb)Q-0jGT+)q>i$CfCVJ*WBOxCJ|+xzCEPULwKKgQ&= zNag5*r0w9?<3wJ0z8^~+j8CQT| zfL#*|Bz_4;SkH(H+Xs}Xd^MAq9;*9^@M*ZGmu`vA;nSe7-u67--gb)v04w(m?8|No zA@<^ZOTKyHvk3bUdoGGw6L7@eJGRLVQb8LCvCJoU>i6G-*LuN%g*7i8%bJhdSN(+Z z_f}Yn>%K~TRGei+SzWpCjiSzi_dSNz_qZWlOrho59`__kJR|Y=KMVk`$OIOB;b)`9 zgY7f@a;{&n3Q72nr3uIBTSrF>w-5_#maj7`enfNeXI==)ezHVVuM}<>V~5m4wIg+1*Mu$mNWhQJTt%=+4YOQ z+>+n`cGX6iSK0x7Lq(nJ;e6;r_)7KSlF3OGj$F*as=^dlt?Q7$JAro0xcoN%`|`_H z=-NArIhV;tg*2&h@K>l^DHu+?4xYo4Ya~I zGhDo|>>TrbgCFtp4j{ta6u2N7M4#XQeFx2Fi=WPu=gVZ-SWuPQetL zT#qz`rceZPzS|vSa+!ZLjILVyk#6PE%H7$7OK*LHHnQ_O%{$tbmjs(`@lVF|a4Ud+ zBYcB;B%14||Eo$Cl#Q1<{j4io8jzgfUCl|`yz*kuMws)ygxu}g6WxUHzjCC4E%)-H zavv%baC=?8eo%_!H*}3MSmuKii*w}5WYwOCrZ;+Zrw*aO*jDB2dHnBU;ZwovW9~OP;D4RfdGa>dBHS^vJa47sRD-Gb}P1&Y-nrCmv&YxPf|EQs6 zFaMV5vII%aT^9PywgCBSY&F6r__f(p@d5i61U8r?{n@SDbG3X0KSv6N;?d!ML}h7q zx_^^DpyUt2z)A&NIxr00Z`CPypWUhoY26;M37n65xd>Q)7tAhY6K;%^*k&*TIo`~1 zI1S|~KEFhp--pb|^{yYs45I>>Kx2zQW1&0Pn=$K7IWTpgYkImmbm*aq`i$99L55Ga zw*#Ptk5do&ePQ@$iRN0q>Cu~Wfz*vHQwr&xoPznvqgjV2olEiot;WfX!rErBincwL zK2sz*gFWl=df1qKc}Ah|dYgBzY4BjqVL?Ff@ITViar`=5k(XMK!C)W0M77D6kN-Wf z(5|8GJCC!NSV!T#88BhFuhOyN)k5DA?}^wv#TD<92F!(3IP)Tn8W;8>7+5H`mXxIZ zQ8%8se;D>7xkqRfhD?B%#l{`My2}nmB}jrS@F_gFw13s37p$~f<+ato5foz;;$^hz zJ%l@J$I`fQMs6Zh$tW)&b?Ej_N=FbA4@@~Tan?03#0@sal0YK!a>}i}b#8C0e9j6j zVq>Qyhd(rVSigb-yC-tXWUA;Zjy21rZ%lo?{c8A(3C95@ZuWZtz?XiAZDw2OT@R=A zl5`A%qWi>H69D~yWmAaIr0`AZ3dE#K$zvC8yWd&Z`roVbBK#eg9}&LA`NR0dyT-TT zp%W{!rTA<7phd6kxWK%(aDWK+BVO3D_|Z+1OLHe4Hm3C#4C&m)>s7rgWvWJM#9E{O zF0)s+;NUEvtox^gldvPYZi4?}YDU;0@)aaWfUP`oYbO^A* z9356?CfcW0oAagr{0ogX&PEWxebH!kO>?lm`TDxT*dwCO42MG1WQ|;yayK;(1&1Poxx3|~bu7-E3_f`{)ID+nZR9q7v7E*2t)5Mzu#WE#g8@#z zn)8Y-NM{$8IGj{3Ti?S3J5HiA=PoNZM>eo+&ndv+0XUC*-pbWR8$vGvugefj+ONe& zTJ`Gg4Pty>Nk?r#!#cdeU6=mp=#Y5wDoNh$?c9U-yvF2`H<}Qo@pi@^Wu$Mw$b7t? z=Sf8Au`*cJIi7reUF)FwAeF^FeeXj)aTM$u579pjFP^f}*^E43hJR@e+&C}!_3o9< zS_w&yF#`XukcNy++?%g~fAqhvAzTqYvQO1Sp>_ocZ+oL{c))n`Iic|#TZT{to@S}c zD@NNUHIK1+((p<6@e%zBtI6*E9pk^-F=82N41vTZSQdF_#tJb@T+@Ij*E{g3I0OGw ztL`@~AiOly;duzDRyr(AU{e(8nMJ2>O|Oknn;Vr~MD5n}{){zb=sjf|Z)GT9}U-Z6cm6>9_EvbK~%Sm1errr^Mj5?o_?T2WJFwIuGAR%?JniDWc zd*jg~q8)hPQZEH26K{oEU+htMK10I;e!Kci&54tM|Mt@g-n{4!y>~Ov4F~ckhvM96 zW9C`^t&so+3{IlK(8@XLefs7v1#o-VBS+!Ock7{ArS?pIR?OKpWv}OL1717AXvyS<2ZXftcI0x>ifqRn zeRzi*GUlMCqF`?^BZPP(7WWX4A|qSZ;fM7bRf2TBA&_fZ>!|>q->6{$G|SDk#2E|fKm5d*^n)YkAK6oTn@vY2I56VZuGejn)<&r+(Y}LL&`Ez6o5Sx0r%~?LiX%~ z=_}g@x(2p5+tP?9Pa5sBWy0#kxU;dD14boSG!vIOT7Et>3{qjGO^^gwYK<)WZLbFe zJ2Jr!Z}n5`LSg&W2UgmJp5IriA}c2I$OAJm8>*cOVc+%i7BEs`hw%67U8t-<3x`v% zQv~{EXFd(N;i?+EA<&2412|s#SVo&$C*N1p)u*Tz;VW!_O9mC&d)W+q766J_B>+&! zOMqe#@moYe7~EZA8ux5^==CXNf^yS+G-a~uwt7vxf246Z^O|^X`ZwYoSZL({BAmJR za)QUbbAsDFA?W>xJHfyzGn_Z!?$!LnzRaecqo|Ej8?K4y#OimGNc=J4C*h{3#k&AT z(GP&n<5GnB5fHeI5=R=a_e`8Z9G#VROaT$Rh7{Hz+GDSLbB1Oynm~HE+i1Q2>&W>3 z%gONI;+K*^qNIg>+5 zzK+hBIobkvzSu#oA4`iYf9jDL?%tiTGM0Zg4nd}HO^ocnUqsEc-t*|SGNN0%mRP1! zbyi=Fd5(!X%Z8+LdpS&aW9BM}Y;!aT!!@-jeX8?zo_ILQamAC0l!NGwx|~jt(D_M3 z%q7hEXB6^NLnD861}Rm-H1p;nM(=DGKha&JO3R0mj+c@+?hEjqx>7^L6}}CfC9-w%hZrHhHUyJtX^LNs>Yp@>m|nyG;plPB!v7 zY83ApAC;D8f{Iv|56z}4(jSDdt^URDN{Nr!_B>}KwjA&PQO|HgUH?9uf9B*e&q~wb z*n#oI=De;pX-aSGK83w)SpQHEEC;^OBP$mJ#b_e)`uG!_iV4i6foHvC#xUA%vod>o zOigwDPEEEO774sy7~?X%I%?CJRaaADcMOatDF^rAeH|($Lkn|qs)!Ct4-UjN7q_OT zc{ET*+0wT&e`-iCFR7v`@_lB$X6JdlZuBUC>ceKs#*VCB(7SiNeb~2Ilt$EOTSXl% z#=$B@HbD0=`sTalUdZDqRA zsGh(=U#p>}Q-jI~!K0dN5X=dlT)8Ng(mCu{Q6EQ6sVm;08W3Dx*Mooka>7^O+%M3c zbW3#Ij~i^*;%w11t(PT2tuVY^z=@HThde2YJj|Y}4;%y;#y#5e__+~<>tpH3s73(h zV}&_M@#|MeFRMGFQf1(w`o?>t3B2C0^j4n1!EhimCrjzX{ck3)(VNwsV|17X!#`8+ zt%HYnRP7z~+`CGI$NhZ$!WAJEdzMv7!`x-vZT)g|wSejwMZ${> zIS6!^!JC9Ro!0{9Zg(m8e^t9l!62+s_AKHFaCMJOk?k|XO@9+)omn&sEXrHB-^}kW zY8^i@)=Y{HQITWr=WOVqR66*KQI4pIRxr{h?gY-fdSFanL7ZQ%U2{aH9af6**52JI zRDrpY6R1zsc1D0NuECm-qWCEmt}9%H9(|TL%zlpNPT&=ckzNlO7W=Bij`EQshJH-R zZ=~#Q4Uou2TeLsR>Zu(rOG)E|tTRa5T=JM(3Uo-_4;ykcxXCK#;~krHiBc$VqCl4R z#NIS|q-s_6De+i72IL46c6Qne#k9?Qxnl(`b#$!~1lSfd-fD;wI-Y{#_hnnfG_>aN z5{iYG88ij%_U|>btyV${O1uNbsFAZStepY%6xz{Vaqy|-8?H?bVGwvg7mSiglYm3e zNEzG>*Wy%VVnQs~r|of@X=c&4zz4nyca!hy1Vf&UxTnMg#-hC0Ni~a{@IL%J_pKl# z)monpx6D^VIngk^d5}|#y3n`;zul>a+Z)zkHKubE%PM?tAbm`Ey!y=m0~e+4u-xTV z7aZ96gA*)=jT2G48ouLRmGgOhC+X@su#>bRVWj6-Pa*$dp z`sWD_hJ9UI6dH)ywzjTJc?THP-z0C0@35k74j-gb9WdV;@>Tn9-fc29kFAiKc=B7* zf$$3UUt1yPSqcJ*s5`E$?^bLD5WjxHXWf`HyFKD;y4uPvEhufIiRN;oN>%tO@mKKZ zrQQ}S!SA`xR$}VMW#iD&*5&JsKe~~v8_)KFyhyU%w}@^mSBl4x8KON{;c~98ck7Z; z(Sps4S;DQN6t7+%vb|L&o$lR-2Z5neX|fQ@ZTr0Z-h^18707JhNlz!U+5TQwS94+P z3uU$w6(^z8Y^}O`%_vk&YiKgc|ISLETRXYZWx0qPW#dBs<`Itq?B0m zr)gSO;th;L5AKVhhp=~KRvi9sWgOOGjI1QX4N?9&A5T?@N@pB*6y*pv6QTw2W~?k2|V;lq(APQ+(J#JVf0I(W7)Ud~CC}E#qZX&wnaU(IPahur`cpnHE;3 zT|${*452BB0~_TS)#FFj1T>~Ag;J5@y!-iVJRE1Ld8+K0Pc4Y?H%f24fiHt--fGl0 zV}KzWvPm~crNGmCkplG{HzPAqk4194$b$GT?nnO|NP*pG^cAqU(o z0o;rQMUn83)}i{ksd*peiEb>Q4%|0+nI0280Wh*4rGC-MQ4iYWr@U<}Pd@Nm(}P~e zRLOBy>s%d$$@PAJ&&AyFE?2%Nwn8N%pW~gdLd0OBP5#5q?Uw>NYRZ#-OpP8sBzWiR zr+3*6b!7mlkiPVk`uxt9;WVrBkMEZW(%*&;2?v`MaKhDp27_-^&=- zpt&IU==UsOSffQ<-j|Js%^xq_zwhNBU)IyrP>T!VL}&GG1npFKpgD+j8FA$nx!9AO z?qKf>f+JZ;MK`R#mQby-PY5bLoEx7ztH|UvWWK82{ybonHgBtWz%B0sEPvU+<+D!R zYWipft3Gim7Gg3a9RSGw(i(fnDeW<84SAd%?9V^RzGw1|gh((j@6C~KsBpqT&3Ofl zyO5?1mGWIo+-YMR&Fb*+P4h+Ds0OD(Jw0FBuGNz%q~qmU5Jhv%qymwAJuuNd1QDG0 z538pL4?O^w(Hwc!0I-xwv-u=*z@S+Y3`jm=*2H3phB=S?p!sF&Yzh$@<@BcOK*l?0 zc0uoOl9+5$8NeKv)_cnk+B9N4dJGv}1v`f=ehzCN(>;~K_?p5Fu7EMTpa?Kv%I<#x z>6^Q(Q+MUAN_Sird^$DRn6WI5)jF=Y> zRh*CTq&4r^xwgR5~K*4mSBJz){=zG%ZuPPi*VU_a=Sq?q1 zsHs?a_sn%0uO(n}_#{hjl9xa?Ofb0X_Ki%d$n`wWh4J(O;`O>MSSs|rQOVk zjK@=2v}($LeB(jL2Kl$;bw&#Sl?`^}iE0F~Zdz}B|D_>#p z%maL+%;u^gfjVGUq>{s$B+->9N}F~gSn5sVUnV2`d-3Tt6)Xu82okPK!_1{J!L=zP z8}Rqyf&J}Ve{(Qgnz@Ufw|8N_61pxeKF46qDQ<4nbMfr`%3TKxX1WAt=h=V8Ln$qpe|8QW#e-KDkBnxLcW@(Xah`tlF|><(Z| zko%ajmcV~d*VG*Aq)`VB8D(kgV2NWhltF$b^uh^`9A$J;W}f7jOkp``$Y3jR965+HuF6OF3!4?Pj%C zbW1iKn4J-7pm&}E5=M=EOT^t0fqj1f{E2-z#|?zp`*Mt#jrmyXqkpb_u+o3-yav7c zAfr_en7QS~_e#eFe}7gH(y(%rW^v={zA`?o==FJvHUD!r`QyU7#`BF=@2`ao?~1yY z?X~QVO|L@TVDg=CJM4iTxSTN--XOAimE@YF8M7(=iwJt@JqANnNqJbUp4r%C+%eFR@1gX_9K(tyy12WOiyt=i88cUABK$cOu}JkkK5wdvgr}<9 z{ZARs-{85;?^!Dj>+Og)$)_odmY=57wpTeyPfpr7XJCfMZ|~b0IhIq*oih ztgR{Eye~S!($YambDY0Jl9SrND^Cj1C&_?R_d2;bb!qCocP;j;)Gst$w^_*fB_%8( zeOYzsE7I`1$O1i6fFStg&k+Q|;8ffx-r*V8U@b`WB=!f>o&w+S^0$`U z$$qCN`OZ=ge%`uM*n9`)mXX5l;y5jsBM_Ur`v>343mOIVH@x7X zf8_;76cnmj8}R0G#e86qDV)g0s{-0ORqexE6}+(04qU7mA{bB9Oj&a8j+8CzRuxVs58DNc|DK`tGX)Z zE@N;sg8;&na1;f=ut)65HoJ{mlcu5YEDA9i`p-=ffg9qn3}mV#N>Guo7sl{5m@}E>lFK^w7TJ0i`7s$^Kc1&B?{e~I#H8E4YK1m zmBBDq(q(Io`5YgBvz?lQ-?E(IBPWLW!=Ma+GZEt0-ih~ ztFU-SBxC7Glo=g(>I!O^Rzc3?K0b_kRUtFZxYIc$mD2CN4bm8G`VMwdA4Ps4W)OD7 z|1HSa`)mFykv}8J zuRJhy6HhZK3Rhq}JH(wTMs&Dkr@RTe5c%>RUZaGYl&i0&Xmp5Aji$NJF#oamW5Ljm zM@)8sShkUc00f2Dpc6;Wf>AWG)x-Mvkm%1bPcPp4W=AJ;mDrsvnbO)@PJ)AX-jlX5 z?`{R)S{1^!L&EKqeC=BGUr>ag2h10rTLt28|B)la^GKD^2X}zqFi~s&|3f5*wGwqj znb0M^!Whe5z%mYPO;4h~q7MFAl5kjvXFGov;3%A3c&;!f3LI&8Vq4s4*>MGg;C%md zg)d(}844lOj|Y>%B?J$t@74|z$F9_edLnpope#Za3~{cz$F5$^BzQXZgM+6q)M@} zB@zD)Qyq2&cBnM}+%w;yYO9l!Xke(Va2U))&H>R{`qVX zCpu2uV8BRTIZ!}p8r}B5fdbBrkTUfP$@f-kCeucnsja)Y2IdLsDfq0>nLxw_>-tQa zk$=3rf4RZ(l_(!+RN+sHkBr<$yjj}sx=>|K7l=gi3w1%OxD{NA4CsiY_rnq>Yaw{Hq)JjE#l_LR-B^evG!4mS6r5Au7wD~f9cLDO6vt&p6J#pGkeD&3rY{+6&0-xV;h#38gFHG= z=uIA{Bg*1;>ie}$vl`(gZH63Y6PwgsY%!i|z!->@QHGBDSXH!A!gVlSs5|<0u}@d5 z>H!|OMeo!F@_qe~`Xn=OmI^1__&UAAtBdh{KH64SBw9j4zRs?H@xTX#v}k%1xF4n( zH6FhMnnSR#Bq`T>55WYaU)^$#-vX9MW>g<^C^oj)4KrK|_WjQ3l~F%0+Ccy(<;I{# z-m4WX!mYEDJK@fFr!|Zlozun;UVp=n6jXuTD&u&uetG6@{Awd6*i^_{pQ-^zEPF9+ zvpsZP%u*fT69c2N%zbn}4A=IbD4v!@5uj2h64V|3NMy1uWM}0QHJv{`@Hor5q3{kY zjts877|+2i_fyE~8Dr)?j0+c%>OJIOA9?+%ZJcen{F;>=)o%N|6UWmvw6VjJ(J@ui zf)?)_Ix)tU5g3z3NRV%G59lDx%Mne&Cj&miLH_?H8RDF<8}K*XO{5L3j_&-mw1D!% zHx6W_f#+sgFSi$7?DBWLtcYt~P8FdzzlIdI)k?<`Zfodw2aN)Y@r8qH2IJ#n($DWC zl?5Zf9f{JyF9x6r@1F^q2H;ngm%RF}yZeXr`Gkfya$-TB@%JrQAd zzJ$3vUlS4>?d~EUpX-$-Kw3!w_1s5$`hyspyqt8qdf+DU5k2p$BJ@J~Eon#!d^gF{ z*sE~61k*D|bFl8=Xdx<|yMurZ0tG&v0n^eHvfZ9Y_((oqt-&?D?!x}$%z11H!XQZZPLYc8LS zziDUm3w2pUL1gMH^6|~N99tUlmD|rU8+SF))toajPf_u@nejAJXEeQuTXU_Vcr6xd z$Opu<19L=qc0;kE1nuNVzMMnyu5@bb_=i=%;frYM37z!j00}Y8hPw#om97Ry(X?Q9o)Hm(s1Nl!&7Xb zNOT7#nOkaf{rtcyX5dEx$Uds4hLv|qm?N@VIecVh%9LC0gU+-AGDyuE0P!Q$Z`hDR zk((o!NF4DXWl#-H)nU57f5no60HR)55{H{Kadj(WXt}r6t{v#8vT!QYh3b zxj4P?=K;Syg+`{pb{iyE@he~oz;QJG9abdn!feUWVMWbYc_Gd`WqqWw znBqY_pBLH>u)ef^U%uvN9ax2(I3|6osxt8XvtAt z7uA`HJHVs2{W)Y{Nu_V(rq&ZX`5}-Uah1Py{|GUf`dtFZuuK4AZTpP$nuEe))su#L zr82HLUvr)%XFFU}dm8dfiUd}r^3!`OraVA5aN)0;2=G48*hyGZh_p)(;|e@X!MYqP z%WPkF%p44VJpFn;x=jqUesJWHtMK2v_%J6q&)oshWN+zn@c`Qwn$=qG*6@>> zzG~nA{nl2Y(wrEbIuGlkNDC~QZ@k(2Ul#ek{EVMm>J zb#+Bm4*f;K0q+NDz)Y6cqn~i|2gU=>S_?c`Tk4CA`$Oxj^M9nEe+`)jS)VsKbEJXr z7|EV4I!N#ifIMl%ShAOxbCmX%tKs;e=tqN%F4U-TC*mcVJq7V1jxLX@-->(wNztWO z1|hR8{Tm@8kNS*S%m* z&@upAu(X?`9OLU+b#|zcWxRX2P(a|LpC!&_tSyPJaB)+$wVqr{G4J9XFMK{=$o6a5QYc>e-bv==3xz3&9=0z%hQSzUhHP}`;~7-RtuejVL=EZo7J%^$6IO>8Bj zCjVbwXCIZ+9mer>+(~;`T3a=(Y3j`CR7}ZJ5(<@$Q(4Z+JZM5iNlVLPXaZ)It=95| z*;1o?>1~iNfm&o`NTqfv3^D~GH(6A|l(YmP!Hat?t=ie~^zXgr{C>alJNLQw`906~ z`?)<6YCnGbf&)vML@HmY@kY<~u&zgHDf|1(dFO7NrDFqy=hG{CEIou&lv+*wk(L+B zpZ$2L2mptr`=^$azal8fYq}ZAcED(O7f3D?yU|I`C%({|s?BxHq}Kj!9B!u}hT&5r zqi6Eu6QdCd5+be&$0dF$9+zO>$!L3W{c zeaa%!cSm#w!7B&gY7E!^UtwMlwPqP82hcWKT+QArMdL?d-bSP21=6q3v^T`^d>!Cv z9`-c1f*e>b@(alg65V?m+SD(bqBVRJ)4l~@Z}fhiH!!C>N9p-xcu+G~#+$thqaUJM z@EEFg#=wXZ&&ZVgAXGcMRx(~DHw(MB+mG9$*YN$Z!xsgWQ?*HsLQK~lB5L@xfqybX zV#&Z{x2@)&mK85xm6i^wY2}Qvn8}0YQ5t|PX)(_eXB&O0$G+Kf=z--{<0g&bNlvPn zOiEsPL@17USu6Ln#n-V-k02)VyRbWBhWBC=c(Rt46uyr@?XZ67TojEG_%()* zo!30r1~9|mw)AzI3Pv^DLY`id4<=S?$d3FFuYY@dvO`_2V9Z66a1KG=7eE`EjN!c! ztI#AoB~p-zp)Zqfa7l@D7*m{f_Y({<)6W(4#eD1hzLxbjbs{}?oVV-_;9|sTno=L! zS^t~Hb{)vBx%ie0N=_NqO*x(uC9-dNxO{VA^cLUxe-_W|5pZMrdrv^&6&rCpwZ)_G(#%9COWzI z;$5j0r7ok+6*`J73s}-J=5ShrdC|5!)Q>u@G*mI{7rOPmY^I4RuCrG^w7wgJ+MCgP zv>*pnhTuBpQC+-GqG(b(F`#DLI^^t^Lp)km>nYipWK}`8f(70(SQ*p3BZ-h(JotJi z-bd3;zHE=;Osu-iHqdZ~8i98nqhq<~0_$)lH&cMzLpdv|%PH|(5}yJv*Y z185IaxTi;s>00qtyIiI&@9(m8HlSDiMs;n%IW+}WhM+ws7LkPvsx+y@q3*?!A?*Pz zvNm3lSWc3!1_+bB4YIQ{7J|U))fp^EC0>6lhO0}wikF@-i2V`HfaDw z#?T2F{VPY#4-55V2UQS44CUN=SL#H3wa1$}Lt0RrFG>g5!h68pFvzWMw!kC)&;eR$ z3ldB=LSW*jwL5=x6P~s1tXY-T-6K1?A6?%6C#4Kc<@ZjbR|O>|BF73|?yJw@FRYrr z+~o}uU*WWhcj=YJuTpa(S(LEr61DcKBt2d+!TTrXrc`2zfG%>cvp(~t%=WFi1P;n@ zK8W9=NFYyvMKU9%ee*+7-YE;g1v}y!rAW7tu$Df}cHVwzQW^%P@7qIe#GDOI1RYT9gl;HC?;{Grlk3T<69S&>bmVw~KPW0UsO>ywk(b<=l` a5G=W$t2x?PQuyi6XDh?kh6$E$&i)6l_{9qV literal 0 HcmV?d00001 -- Gitee