From ad8de0c7b00caf9c4eada367f6f4263bb90f9e51 Mon Sep 17 00:00:00 2001 From: qinjianqi Date: Wed, 12 Apr 2023 15:54:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4libzip=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=9A=84gn=E5=8F=8AcmakeLists=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qinjianqi --- libzip/BUILD.gn | 522 ++++++++++++++++++ libzip/CMakeLists.txt | 252 +++++++++ libzip/README.OpenSource | 11 + libzip/README_zh.md | 16 + libzip/adapted/include/config.h | 65 +++ libzip/adapted/include/zipconf.h | 50 ++ libzip/adapted/lib/zip_err_str.c | 59 ++ libzip/bundle.json | 38 ++ libzip/docs/hap_integrate.md | 54 ++ libzip/docs/pic/hap1.jpeg | Bin 0 -> 40239 bytes libzip/docs/pic/hap2.png | Bin 0 -> 29233 bytes libzip/docs/pic/rom.png | Bin 0 -> 49169 bytes libzip/docs/pic/rom1.png | Bin 0 -> 23261 bytes libzip/docs/rom_integrate.md | 115 ++++ .../test/test\345\221\275\344\273\244.txt" | 162 ++++++ 15 files changed, 1344 insertions(+) create mode 100644 libzip/BUILD.gn create mode 100644 libzip/CMakeLists.txt create mode 100644 libzip/README.OpenSource create mode 100644 libzip/README_zh.md create mode 100644 libzip/adapted/include/config.h create mode 100644 libzip/adapted/include/zipconf.h create mode 100644 libzip/adapted/lib/zip_err_str.c create mode 100644 libzip/bundle.json create mode 100644 libzip/docs/hap_integrate.md create mode 100644 libzip/docs/pic/hap1.jpeg create mode 100644 libzip/docs/pic/hap2.png create mode 100644 libzip/docs/pic/rom.png create mode 100644 libzip/docs/pic/rom1.png create mode 100644 libzip/docs/rom_integrate.md create mode 100644 "libzip/test/test\345\221\275\344\273\244.txt" diff --git a/libzip/BUILD.gn b/libzip/BUILD.gn new file mode 100644 index 00000000..934f9cef --- /dev/null +++ b/libzip/BUILD.gn @@ -0,0 +1,522 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +declare_args() { + enable_libzip_test = false +} + +config("liblibzip_config") { + include_dirs = [ + "//third_party/libzip/adapted/include", + "//third_party/libzip/adapted/lib", + "//third_party/libzip/libzip/lib", + "//third_party/libzip/libzip/src", + "//third_party/libzip/libzip/examples", + "//third_party/libzip/libzip/regress", + "../zlib", + "../bzip2", + "../zstd", + "../zstd/zstd", + "../zstd/zstd/lib", + "../zstd/zstd/lib/common", + "../zstd/zstd/lib/compress", + "../zstd/zstd/lib/decompress", + "../zstd/zstd/lib/deprecated", + "../zstd/zstd/lib/dictBuilder", + "../zstd/zstd/lib/legacy", + "../xz", + "../xz/xz", + "../xz/adapted", + "../xz/xz/src/liblzma", + "../xz/xz/src/liblzma/api", + "../xz/xz/src/liblzma/lzma", + "../xz/xz/src/liblzma/common", + "../xz/xz/src/liblzma/check", + "../xz/xz/src/liblzma/lz", + "../xz/xz/src/liblzma/rangecoder", + "../xz/xz/src/liblzma/api/lzma", + "../xz/xz/src/liblzma/delta", + "../xz/xz/src/liblzma/simple", + "../xz/xz/src/common", + "../openssl", + "../openssl/crypto", + "../openssl/include", + "../openssl/crypto/modes", + "../openssl/crypto/ec/curve448", + "../openssl/crypto/ec/curve448/arch_32", + ] + + cflags = [ + "-fPIC", + "-fdata-sections", + "-ffunction-sections", + "-funwind-tables", + "-fstack-protector-strong", + "-no-canonical-prefixes", + "-fno-addrsig", + "-Wa", + "-Wformat", + "-Werror=format-security", + "-D__MUSL__", + "-Dzip_EXPORTS", + ] +} + +ohos_shared_library("libzip_shared") { + sources = [ + "//third_party/libzip/adapted/lib/zip_err_str.c", + "//third_party/libzip/libzip/lib/zip_add.c", + "//third_party/libzip/libzip/lib/zip_add_dir.c", + "//third_party/libzip/libzip/lib/zip_add_entry.c", + "//third_party/libzip/libzip/lib/zip_algorithm_bzip2.c", + "//third_party/libzip/libzip/lib/zip_algorithm_deflate.c", + "//third_party/libzip/libzip/lib/zip_algorithm_xz.c", + "//third_party/libzip/libzip/lib/zip_algorithm_zstd.c", + "//third_party/libzip/libzip/lib/zip_buffer.c", + "//third_party/libzip/libzip/lib/zip_close.c", + "//third_party/libzip/libzip/lib/zip_crypto_openssl.c", + "//third_party/libzip/libzip/lib/zip_delete.c", + "//third_party/libzip/libzip/lib/zip_dir_add.c", + "//third_party/libzip/libzip/lib/zip_dirent.c", + "//third_party/libzip/libzip/lib/zip_discard.c", + "//third_party/libzip/libzip/lib/zip_entry.c", + "//third_party/libzip/libzip/lib/zip_error.c", + "//third_party/libzip/libzip/lib/zip_error_clear.c", + "//third_party/libzip/libzip/lib/zip_error_get.c", + "//third_party/libzip/libzip/lib/zip_error_get_sys_type.c", + "//third_party/libzip/libzip/lib/zip_error_strerror.c", + "//third_party/libzip/libzip/lib/zip_error_to_str.c", + "//third_party/libzip/libzip/lib/zip_extra_field.c", + "//third_party/libzip/libzip/lib/zip_extra_field_api.c", + "//third_party/libzip/libzip/lib/zip_fclose.c", + "//third_party/libzip/libzip/lib/zip_fdopen.c", + "//third_party/libzip/libzip/lib/zip_file_add.c", + "//third_party/libzip/libzip/lib/zip_file_error_clear.c", + "//third_party/libzip/libzip/lib/zip_file_error_get.c", + "//third_party/libzip/libzip/lib/zip_file_get_comment.c", + "//third_party/libzip/libzip/lib/zip_file_get_external_attributes.c", + "//third_party/libzip/libzip/lib/zip_file_get_offset.c", + "//third_party/libzip/libzip/lib/zip_file_rename.c", + "//third_party/libzip/libzip/lib/zip_file_replace.c", + "//third_party/libzip/libzip/lib/zip_file_set_comment.c", + "//third_party/libzip/libzip/lib/zip_file_set_encryption.c", + "//third_party/libzip/libzip/lib/zip_file_set_external_attributes.c", + "//third_party/libzip/libzip/lib/zip_file_set_mtime.c", + "//third_party/libzip/libzip/lib/zip_file_strerror.c", + "//third_party/libzip/libzip/lib/zip_fopen.c", + "//third_party/libzip/libzip/lib/zip_fopen_encrypted.c", + "//third_party/libzip/libzip/lib/zip_fopen_index.c", + "//third_party/libzip/libzip/lib/zip_fopen_index_encrypted.c", + "//third_party/libzip/libzip/lib/zip_fread.c", + "//third_party/libzip/libzip/lib/zip_fseek.c", + "//third_party/libzip/libzip/lib/zip_ftell.c", + "//third_party/libzip/libzip/lib/zip_get_archive_comment.c", + "//third_party/libzip/libzip/lib/zip_get_archive_flag.c", + "//third_party/libzip/libzip/lib/zip_get_encryption_implementation.c", + "//third_party/libzip/libzip/lib/zip_get_file_comment.c", + "//third_party/libzip/libzip/lib/zip_get_name.c", + "//third_party/libzip/libzip/lib/zip_get_num_entries.c", + "//third_party/libzip/libzip/lib/zip_get_num_files.c", + "//third_party/libzip/libzip/lib/zip_hash.c", + "//third_party/libzip/libzip/lib/zip_io_util.c", + "//third_party/libzip/libzip/lib/zip_libzip_version.c", + "//third_party/libzip/libzip/lib/zip_memdup.c", + "//third_party/libzip/libzip/lib/zip_name_locate.c", + "//third_party/libzip/libzip/lib/zip_new.c", + "//third_party/libzip/libzip/lib/zip_open.c", + "//third_party/libzip/libzip/lib/zip_pkware.c", + "//third_party/libzip/libzip/lib/zip_progress.c", + "//third_party/libzip/libzip/lib/zip_random_unix.c", + "//third_party/libzip/libzip/lib/zip_rename.c", + "//third_party/libzip/libzip/lib/zip_replace.c", + "//third_party/libzip/libzip/lib/zip_set_archive_comment.c", + "//third_party/libzip/libzip/lib/zip_set_archive_flag.c", + "//third_party/libzip/libzip/lib/zip_set_default_password.c", + "//third_party/libzip/libzip/lib/zip_set_file_comment.c", + "//third_party/libzip/libzip/lib/zip_set_file_compression.c", + "//third_party/libzip/libzip/lib/zip_set_name.c", + "//third_party/libzip/libzip/lib/zip_source_accept_empty.c", + "//third_party/libzip/libzip/lib/zip_source_begin_write.c", + "//third_party/libzip/libzip/lib/zip_source_begin_write_cloning.c", + "//third_party/libzip/libzip/lib/zip_source_buffer.c", + "//third_party/libzip/libzip/lib/zip_source_call.c", + "//third_party/libzip/libzip/lib/zip_source_close.c", + "//third_party/libzip/libzip/lib/zip_source_commit_write.c", + "//third_party/libzip/libzip/lib/zip_source_compress.c", + "//third_party/libzip/libzip/lib/zip_source_crc.c", + "//third_party/libzip/libzip/lib/zip_source_error.c", + "//third_party/libzip/libzip/lib/zip_source_file_common.c", + "//third_party/libzip/libzip/lib/zip_source_file_stdio.c", + "//third_party/libzip/libzip/lib/zip_source_file_stdio_named.c", + "//third_party/libzip/libzip/lib/zip_source_free.c", + "//third_party/libzip/libzip/lib/zip_source_function.c", + "//third_party/libzip/libzip/lib/zip_source_get_file_attributes.c", + "//third_party/libzip/libzip/lib/zip_source_is_deleted.c", + "//third_party/libzip/libzip/lib/zip_source_layered.c", + "//third_party/libzip/libzip/lib/zip_source_open.c", + "//third_party/libzip/libzip/lib/zip_source_pass_to_lower_layer.c", + "//third_party/libzip/libzip/lib/zip_source_pkware_decode.c", + "//third_party/libzip/libzip/lib/zip_source_pkware_encode.c", + "//third_party/libzip/libzip/lib/zip_source_read.c", + "//third_party/libzip/libzip/lib/zip_source_remove.c", + "//third_party/libzip/libzip/lib/zip_source_rollback_write.c", + "//third_party/libzip/libzip/lib/zip_source_seek.c", + "//third_party/libzip/libzip/lib/zip_source_seek_write.c", + "//third_party/libzip/libzip/lib/zip_source_stat.c", + "//third_party/libzip/libzip/lib/zip_source_supports.c", + "//third_party/libzip/libzip/lib/zip_source_tell.c", + "//third_party/libzip/libzip/lib/zip_source_tell_write.c", + "//third_party/libzip/libzip/lib/zip_source_window.c", + "//third_party/libzip/libzip/lib/zip_source_winzip_aes_decode.c", + "//third_party/libzip/libzip/lib/zip_source_winzip_aes_encode.c", + "//third_party/libzip/libzip/lib/zip_source_write.c", + "//third_party/libzip/libzip/lib/zip_source_zip.c", + "//third_party/libzip/libzip/lib/zip_source_zip_new.c", + "//third_party/libzip/libzip/lib/zip_stat.c", + "//third_party/libzip/libzip/lib/zip_stat_index.c", + "//third_party/libzip/libzip/lib/zip_stat_init.c", + "//third_party/libzip/libzip/lib/zip_strerror.c", + "//third_party/libzip/libzip/lib/zip_string.c", + "//third_party/libzip/libzip/lib/zip_unchange.c", + "//third_party/libzip/libzip/lib/zip_unchange_all.c", + "//third_party/libzip/libzip/lib/zip_unchange_archive.c", + "//third_party/libzip/libzip/lib/zip_unchange_data.c", + "//third_party/libzip/libzip/lib/zip_utf-8.c", + "//third_party/libzip/libzip/lib/zip_winzip_aes.c", + ] + + deps = [ + "../bzip2:libbz2", + "../openssl:libcrypto_shared", + "../xz:xz_shared", + "../zlib:shared_libz", + "../zstd:zstd_shared", + ] + + configs = [ ":liblibzip_config" ] + + part_name = "libzip" +} + +config("libzip_config") { + include_dirs = [ + "//third_party/libzip/libzip/src", + "//third_party/libzip/libzip/examples", + "//third_party/libzip/libzip/regress", + "//third_party/libzip//libzip/regress/BEFORE", + "//third_party/libzip/libzip/lib", + "//third_party/libzip/adapted/include", + "//third_party/libzip/adapted/lib", + "../zlib", + "../bzip2", + ] + + cflags_cc = [ + "-Dnonrandomopen_EXPORTS", + "-Dliboverride_EXPORTS", + "-fdata-sections", + "-ffunction-sections", + "-funwind-tables", + "-fstack-protector-strong", + "-no-canonical-prefixes", + "-fno-addrsig", + "-Wa", + "-Wformat", + "-Werror=format-security", + "-D__MUSL__", + "-fPIE", + ] +} + +ohos_shared_library("nonrandomopen") { + sources = [ "//third_party/libzip/libzip/regress/nonrandomopen.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_shared_library("liboverride") { + sources = [ "//third_party/libzip/libzip/regress/liboverride.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("add_from_filep") { + sources = [ "//third_party/libzip/libzip/regress/add_from_filep.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + part_name = "libzip" +} + +ohos_executable("can_clone_file") { + sources = [ "//third_party/libzip/libzip/regress/can_clone_file.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("fopen_unchanged") { + sources = [ "//third_party/libzip/libzip/regress/fopen_unchanged.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("fseek") { + sources = [ "//third_party/libzip/libzip/regress/fseek.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("fuzz_main") { + sources = [ "//third_party/libzip/libzip/regress/fuzz_main.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("nonrandomopentest") { + sources = [ "//third_party/libzip/libzip/regress/nonrandomopentest.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("liboverride-test") { + sources = [ "//third_party/libzip/libzip/regress/liboverride-test.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("fread") { + sources = [ + "//third_party/libzip/libzip/regress/fread.c", + "//third_party/libzip/libzip/src/getopt.c", + ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("tryopen") { + sources = [ + "//third_party/libzip/libzip/regress/tryopen.c", + "//third_party/libzip/libzip/src/getopt.c", + ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("ziptool_regress") { + sources = [ + "//third_party/libzip/libzip/regress/source_hole.c", + "//third_party/libzip/libzip/regress/ziptool_regress.c", + "//third_party/libzip/libzip/src/getopt.c", + ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("hole") { + sources = [ + "//third_party/libzip/libzip/regress/hole.c", + "//third_party/libzip/libzip/regress/source_hole.c", + "//third_party/libzip/libzip/src/getopt.c", + ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("add-compressed-data") { + sources = [ "//third_party/libzip/libzip/examples/add-compressed-data.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("autoclose-archive") { + sources = [ "//third_party/libzip/libzip/examples/autoclose-archive.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("in-memory") { + sources = [ "//third_party/libzip/libzip/examples/in-memory.c" ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("zipcmp") { + sources = [ + "//third_party/libzip/libzip/src/diff_output.c", + "//third_party/libzip/libzip/src/getopt.c", + "//third_party/libzip/libzip/src/zipcmp.c", + ] + + configs = [ ":libzip_config" ] + + deps = [ + ":libzip_shared", + "../zlib:shared_libz", + ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("zipmerge") { + sources = [ + "//third_party/libzip/libzip/src/diff_output.c", + "//third_party/libzip/libzip/src/getopt.c", + "//third_party/libzip/libzip/src/zipmerge.c", + ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +ohos_executable("ziptool") { + sources = [ + "//third_party/libzip/libzip/src/diff_output.c", + "//third_party/libzip/libzip/src/getopt.c", + "//third_party/libzip/libzip/src/ziptool.c", + ] + + configs = [ ":libzip_config" ] + + deps = [ ":libzip_shared" ] + + defines = [ "PACKAGE_VERSION" ] + + part_name = "libzip" +} + +group("libzip_test") { + if (enable_libzip_test) { + deps = [ + ":add-compressed-data", + ":add_from_filep", + ":autoclose-archive", + ":can_clone_file", + ":fopen_unchanged", + ":fread", + ":fseek", + ":fuzz_main", + ":hole", + ":in-memory", + ":liboverride-test", + ":nonrandomopentest", + ":tryopen", + ":zipcmp", + ":zipmerge", + ":ziptool", + ":ziptool_regress", + ] + } else { + deps = [] + } +} diff --git a/libzip/CMakeLists.txt b/libzip/CMakeLists.txt new file mode 100644 index 00000000..f2949efe --- /dev/null +++ b/libzip/CMakeLists.txt @@ -0,0 +1,252 @@ +cmake_minimum_required (VERSION 3.12) + +project(LIBZIP VERSION 0.1.0) + +enable_language(C) + +option(ENABLE_OPENSSL "Enable use of OpenSSL" ON) + +option(ENABLE_BZIP2 "Enable use of BZip2" ON) +option(ENABLE_LZMA "Enable use of LZMA" ON) +option(ENABLE_ZSTD "Enable use of Zstandard" ON) + +option(ENABLE_FDOPEN "Enable zip_fdopen, which is not allowed in Microsoft CRT secure libraries" ON) + +option(BUILD_TOOLS "Build tools in the src directory (zipcmp, zipmerge, ziptool)" ON) +option(BUILD_REGRESS "Build regression tests" ON) +option(BUILD_EXAMPLES "Build examples" ON) + +set(TARGET_NAME zip) +set(TARGET_LIB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/libzip) +set(TARGET_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/adapted/include) + +set(TARGET_INCLUDE ${TARGET_LIB_PATH}) +set(TARGET_INSTALL_INCLUDEDIR include) +set(TARGET_INSTALL_BINDIR bin) +set(TARGET_INSTALL_LIBDIR lib) + +set(TARGET_LIB ${TARGET_LIB_PATH}/lib/zip_add.c + ${TARGET_LIB_PATH}/lib/zip_add_dir.c + ${TARGET_LIB_PATH}/lib/zip_add_entry.c + ${TARGET_LIB_PATH}/lib/zip_algorithm_deflate.c + ${TARGET_LIB_PATH}/lib/zip_buffer.c + ${TARGET_LIB_PATH}/lib/zip_close.c + ${TARGET_LIB_PATH}/lib/zip_delete.c + ${TARGET_LIB_PATH}/lib/zip_dir_add.c + ${TARGET_LIB_PATH}/lib/zip_dirent.c + ${TARGET_LIB_PATH}/lib/zip_discard.c + ${TARGET_LIB_PATH}/lib/zip_entry.c + ${TARGET_LIB_PATH}/lib/zip_error.c + ${TARGET_LIB_PATH}/lib/zip_error_clear.c + ${TARGET_LIB_PATH}/lib/zip_error_get.c + ${TARGET_LIB_PATH}/lib/zip_error_get_sys_type.c + ${TARGET_LIB_PATH}/lib/zip_error_strerror.c + ${TARGET_LIB_PATH}/lib/zip_error_to_str.c + ${TARGET_LIB_PATH}/lib/zip_extra_field.c + ${TARGET_LIB_PATH}/lib/zip_extra_field_api.c + ${TARGET_LIB_PATH}/lib/zip_fclose.c + ${TARGET_LIB_PATH}/lib/zip_fdopen.c + ${TARGET_LIB_PATH}/lib/zip_file_add.c + ${TARGET_LIB_PATH}/lib/zip_file_error_clear.c + ${TARGET_LIB_PATH}/lib/zip_file_error_get.c + ${TARGET_LIB_PATH}/lib/zip_file_get_comment.c + ${TARGET_LIB_PATH}/lib/zip_file_get_external_attributes.c + ${TARGET_LIB_PATH}/lib/zip_file_get_offset.c + ${TARGET_LIB_PATH}/lib/zip_file_rename.c + ${TARGET_LIB_PATH}/lib/zip_file_replace.c + ${TARGET_LIB_PATH}/lib/zip_file_set_comment.c + ${TARGET_LIB_PATH}/lib/zip_file_set_encryption.c + ${TARGET_LIB_PATH}/lib/zip_file_set_external_attributes.c + ${TARGET_LIB_PATH}/lib/zip_file_set_mtime.c + ${TARGET_LIB_PATH}/lib/zip_file_strerror.c + ${TARGET_LIB_PATH}/lib/zip_fopen.c + ${TARGET_LIB_PATH}/lib/zip_fopen_encrypted.c + ${TARGET_LIB_PATH}/lib/zip_fopen_index.c + ${TARGET_LIB_PATH}/lib/zip_fopen_index_encrypted.c + ${TARGET_LIB_PATH}/lib/zip_fread.c + ${TARGET_LIB_PATH}/lib/zip_fseek.c + ${TARGET_LIB_PATH}/lib/zip_ftell.c + ${TARGET_LIB_PATH}/lib/zip_get_archive_comment.c + ${TARGET_LIB_PATH}/lib/zip_get_archive_flag.c + ${TARGET_LIB_PATH}/lib/zip_get_encryption_implementation.c + ${TARGET_LIB_PATH}/lib/zip_get_file_comment.c + ${TARGET_LIB_PATH}/lib/zip_get_name.c + ${TARGET_LIB_PATH}/lib/zip_get_num_entries.c + ${TARGET_LIB_PATH}/lib/zip_get_num_files.c + ${TARGET_LIB_PATH}/lib/zip_hash.c + ${TARGET_LIB_PATH}/lib/zip_io_util.c + ${TARGET_LIB_PATH}/lib/zip_libzip_version.c + ${TARGET_LIB_PATH}/lib/zip_memdup.c + ${TARGET_LIB_PATH}/lib/zip_name_locate.c + ${TARGET_LIB_PATH}/lib/zip_new.c + ${TARGET_LIB_PATH}/lib/zip_open.c + ${TARGET_LIB_PATH}/lib/zip_pkware.c + ${TARGET_LIB_PATH}/lib/zip_progress.c + ${TARGET_LIB_PATH}/lib/zip_rename.c + ${TARGET_LIB_PATH}/lib/zip_replace.c + ${TARGET_LIB_PATH}/lib/zip_set_archive_comment.c + ${TARGET_LIB_PATH}/lib/zip_set_archive_flag.c + ${TARGET_LIB_PATH}/lib/zip_set_default_password.c + ${TARGET_LIB_PATH}/lib/zip_set_file_comment.c + ${TARGET_LIB_PATH}/lib/zip_set_file_compression.c + ${TARGET_LIB_PATH}/lib/zip_set_name.c + ${TARGET_LIB_PATH}/lib/zip_source_accept_empty.c + ${TARGET_LIB_PATH}/lib/zip_source_begin_write.c + ${TARGET_LIB_PATH}/lib/zip_source_begin_write_cloning.c + ${TARGET_LIB_PATH}/lib/zip_source_buffer.c + ${TARGET_LIB_PATH}/lib/zip_source_call.c + ${TARGET_LIB_PATH}/lib/zip_source_close.c + ${TARGET_LIB_PATH}/lib/zip_source_commit_write.c + ${TARGET_LIB_PATH}/lib/zip_source_compress.c + ${TARGET_LIB_PATH}/lib/zip_source_crc.c + ${TARGET_LIB_PATH}/lib/zip_source_error.c + ${TARGET_LIB_PATH}/lib/zip_source_file_common.c + ${TARGET_LIB_PATH}/lib/zip_source_file_stdio.c + ${TARGET_LIB_PATH}/lib/zip_source_free.c + ${TARGET_LIB_PATH}/lib/zip_source_function.c + ${TARGET_LIB_PATH}/lib/zip_source_get_file_attributes.c + ${TARGET_LIB_PATH}/lib/zip_source_is_deleted.c + ${TARGET_LIB_PATH}/lib/zip_source_layered.c + ${TARGET_LIB_PATH}/lib/zip_source_open.c + ${TARGET_LIB_PATH}/lib/zip_source_pass_to_lower_layer.c + ${TARGET_LIB_PATH}/lib/zip_source_pkware_decode.c + ${TARGET_LIB_PATH}/lib/zip_source_pkware_encode.c + ${TARGET_LIB_PATH}/lib/zip_source_read.c + ${TARGET_LIB_PATH}/lib/zip_source_remove.c + ${TARGET_LIB_PATH}/lib/zip_source_rollback_write.c + ${TARGET_LIB_PATH}/lib/zip_source_seek.c + ${TARGET_LIB_PATH}/lib/zip_source_seek_write.c + ${TARGET_LIB_PATH}/lib/zip_source_stat.c + ${TARGET_LIB_PATH}/lib/zip_source_supports.c + ${TARGET_LIB_PATH}/lib/zip_source_tell.c + ${TARGET_LIB_PATH}/lib/zip_source_tell_write.c + ${TARGET_LIB_PATH}/lib/zip_source_window.c + ${TARGET_LIB_PATH}/lib/zip_source_write.c + ${TARGET_LIB_PATH}/lib/zip_source_zip.c + ${TARGET_LIB_PATH}/lib/zip_source_zip_new.c + ${TARGET_LIB_PATH}/lib/zip_stat.c + ${TARGET_LIB_PATH}/lib/zip_stat_index.c + ${TARGET_LIB_PATH}/lib/zip_stat_init.c + ${TARGET_LIB_PATH}/lib/zip_strerror.c + ${TARGET_LIB_PATH}/lib/zip_string.c + ${TARGET_LIB_PATH}/lib/zip_unchange.c + ${TARGET_LIB_PATH}/lib/zip_unchange_all.c + ${TARGET_LIB_PATH}/lib/zip_unchange_archive.c + ${TARGET_LIB_PATH}/lib/zip_unchange_data.c + ${TARGET_LIB_PATH}/lib/zip_utf-8.c + ${TARGET_LIB_PATH}/lib/zip_source_file_stdio_named.c + ${TARGET_LIB_PATH}/lib/zip_random_unix.c + ${CMAKE_CURRENT_SOURCE_DIR}/adapted/lib/zip_err_str.c) + +set(DEFINES -Dzip_EXPORTS + -fPIC) + +add_library(${TARGET_NAME} ${TARGET_LIB}) + +if(ENABLE_BZIP2) + target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../bzip2) + set(HAVE_LIBBZ2 1) + target_sources(${TARGET_NAME} PRIVATE ${TARGET_LIB_PATH}/lib/zip_algorithm_bzip2.c) + target_link_libraries(${TARGET_NAME} PRIVATE bzip2) +endif() + +if(ENABLE_LZMA) + target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../xz) + set(HAVE_LIBLZMA 1) + target_sources(${TARGET_NAME} PRIVATE ${TARGET_LIB_PATH}/lib/zip_algorithm_xz.c) + target_link_libraries(${TARGET_NAME} PRIVATE liblzma) +endif() + +if(ENABLE_LZMA) + target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../zstd) + set(HAVE_LIBZSTD 1) + target_sources(${TARGET_NAME} PRIVATE ${TARGET_LIB_PATH}/lib/zip_algorithm_zstd.c) + target_link_libraries(${TARGET_NAME} PRIVATE zstd) +endif() + +if(ENABLE_OPENSSL) + target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../openssl + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/include + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/adapted/include) + set(HAVE_CRYPTO 1) + set(HAVE_OPENSSL 1) + target_sources(${TARGET_NAME} PRIVATE ${TARGET_LIB_PATH}/lib/zip_crypto_openssl.c + ${TARGET_LIB_PATH}/lib/zip_winzip_aes.c + ${TARGET_LIB_PATH}/lib/zip_source_winzip_aes_decode.c + ${TARGET_LIB_PATH}/lib/zip_source_winzip_aes_encode.c) + target_link_libraries(${TARGET_NAME} PRIVATE crypto) +endif() + +target_link_libraries(zip PRIVATE z) +target_include_directories(${TARGET_NAME} PUBLIC ${TARGET_INCLUDE_PATH} + ${TARGET_LIB_PATH}/examples + ${TARGET_LIB_PATH}/src + ${TARGET_LIB_PATH}/lib + ${TARGET_LIB_PATH}/regress) +target_compile_options(${TARGET_NAME} PUBLIC ${DEFINES}) + +if(BUILD_REGRESS) +set(TEST_PROGRAMS + add_from_filep + can_clone_file + fopen_unchanged + fseek + fuzz_main + nonrandomopentest + liboverride-test +) + +set(GETOPT_USERS + fread + tryopen +) + +set(HOLE_USERS + hole + ziptool_regress +) +set(ZIP_PROGRAMS ${TEST_PROGRAMS} ${GETOPT_USERS} ${HOLE_USERS}) + +foreach(PROGRAM ${ZIP_PROGRAMS}) + add_executable(${PROGRAM} ${TARGET_LIB_PATH}/regress/${PROGRAM}.c) + target_link_libraries(${PROGRAM} PUBLIC ${TARGET_NAME}) + target_include_directories(${PROGRAM} PRIVATE BEFORE ${TARGET_LIB_PATH}/lib ${PROJECT_BINARY_DIR} ${TARGET_INCLUDE_PATH}) +endforeach() + +foreach(PROGRAM ${GETOPT_USERS} ${HOLE_USERS}) + target_sources(${PROGRAM} PRIVATE ${TARGET_LIB_PATH}/src/getopt.c) + target_include_directories(${PROGRAM} PRIVATE BEFORE ${TARGET_LIB_PATH}/src) +endforeach() +foreach(PROGRAM ${HOLE_USERS}) + target_sources(${PROGRAM} PRIVATE ${TARGET_LIB_PATH}/regress/source_hole.c) +endforeach() +target_include_directories(ziptool_regress PRIVATE BEFORE ${TARGET_LIB_PATH}/src) +set(DL_USERS + nonrandomopen + liboverride +) + +foreach(PROGRAM ${DL_USERS}) + add_library(${PROGRAM} MODULE ${TARGET_LIB_PATH}/regress/${PROGRAM}.c) + target_include_directories(${PROGRAM} PRIVATE BEFORE ${TARGET_LIB_PATH}/lib ${PROJECT_BINARY_DIR} ${TARGET_INCLUDE_PATH}) +endforeach() +endif() + +if(BUILD_EXAMPLES) +foreach(PROGRAM add-compressed-data autoclose-archive in-memory) + add_executable(${PROGRAM} ${TARGET_LIB_PATH}/examples/${PROGRAM}.c) + target_link_libraries(${PROGRAM} ${TARGET_NAME}) + target_include_directories(${PROGRAM} PRIVATE BEFORE ${PROJECT_SOURCE_DIR}/lib ${PROJECT_BINARY_DIR}) +endforeach() +endif() + +if(BUILD_TOOLS) +foreach(PROGRAM zipcmp zipmerge ziptool) + add_executable(${PROGRAM} ${TARGET_LIB_PATH}/src/${PROGRAM}.c) + target_link_libraries(${PROGRAM} PRIVATE ${TARGET_NAME}) + target_include_directories(${PROGRAM} PRIVATE BEFORE ${PROJECT_SOURCE_DIR}/lib ${PROJECT_BINARY_DIR}) + target_sources(${PROGRAM} PRIVATE ${TARGET_LIB_PATH}/src/getopt.c) +endforeach() +target_sources(zipcmp PRIVATE ${TARGET_LIB_PATH}/src/diff_output.c) +target_link_libraries(zipcmp PRIVATE z) +endif() \ No newline at end of file diff --git a/libzip/README.OpenSource b/libzip/README.OpenSource new file mode 100644 index 00000000..dddb2f98 --- /dev/null +++ b/libzip/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libzip", + "License": "BSD license", + "License File": "LICENSE", + "Version Number": "v1.9.2", + "Owner": "nih-at", + "Upstream URL": "https://github.com/nih-at/libzip.git", + "Description": "This is libzip, a C library for reading, creating, and modifying zip and zip64 archives." + } +] diff --git a/libzip/README_zh.md b/libzip/README_zh.md new file mode 100644 index 00000000..baaeddf5 --- /dev/null +++ b/libzip/README_zh.md @@ -0,0 +1,16 @@ +# libzip三方库说明 +## 功能简介 +本软件是参照开源软件 [libzip](https://github.com/nih-at/libzip) 的CMakeLists.txt 重新编辑了适合在OpenHarmony上使用的CMakeLists.txt, +libzip是一个用于读取、创建和修改zip存档的C库。文件可以从数据缓冲区、文件或直接从其他zip档案复制的压缩数据中添加。 + +## 使用约束 +- ROM版本:OpenHarmony-v3.2-Beta1 + +- 三方库版本:v1.9.2 + +- 当前适配的功能:读取,创建和修改的C库 zip 存档。 + +- [libzip License](https://github.com/nih-at/libzip/blob/main/LICENSE) +## 集成方式 ++ [系统Rom包集成](docs/rom_integrate.md) ++ [系统Hap包集成](docs/hap_integrate.md) diff --git a/libzip/adapted/include/config.h b/libzip/adapted/include/config.h new file mode 100644 index 00000000..0c69f0b5 --- /dev/null +++ b/libzip/adapted/include/config.h @@ -0,0 +1,65 @@ +#ifndef HAD_CONFIG_H +#define HAD_CONFIG_H +#ifndef _HAD_ZIPCONF_H +#include "zipconf.h" +#endif +/* BEGIN DEFINES */ +#define ENABLE_FDOPEN +/* #undef HAVE___PROGNAME */ +/* #undef HAVE__CLOSE */ +/* #undef HAVE__DUP */ +#define HAVE__FDOPEN +/* #undef HAVE__FILENO */ +/* #undef HAVE__SETMODE */ +/* #undef HAVE__SNPRINTF */ +/* #undef HAVE__STRDUP */ +/* #undef HAVE__STRICMP */ +/* #undef HAVE__STRTOI64 */ +/* #undef HAVE__STRTOUI64 */ +/* #undef HAVE__UMASK */ +/* #undef HAVE__UNLINK */ +/* #undef HAVE_ARC4RANDOM */ +/* #undef HAVE_CLONEFILE */ +/* #undef HAVE_COMMONCRYPTO */ +#define HAVE_CRYPTO +#define HAVE_FICLONERANGE +#define HAVE_FILENO +#define HAVE_FCHMOD +#define HAVE_FSEEKO +#define HAVE_FTELLO +/* #undef HAVE_GETPROGNAME */ +/* #undef HAVE_GNUTLS */ +#define HAVE_LIBBZ2 +#define HAVE_LIBLZMA +#define HAVE_LIBZSTD +#define HAVE_LOCALTIME_R +/* #undef HAVE_MBEDTLS */ +/* #undef HAVE_MKSTEMP */ +#define HAVE_NULLABLE +#define HAVE_OPENSSL +/* #undef HAVE_SETMODE */ +#define HAVE_SNPRINTF +#define HAVE_STRCASECMP +#define HAVE_STRDUP +/* #undef HAVE_STRICMP */ +#define HAVE_STRTOLL +#define HAVE_STRTOULL +/* #undef HAVE_STRUCT_TM_TM_ZONE */ +#define HAVE_STDBOOL_H +#define HAVE_STRINGS_H +#define HAVE_UNISTD_H +/* #undef HAVE_WINDOWS_CRYPTO */ +#define SIZEOF_OFF_T 8 +#define SIZEOF_SIZE_T 8 +/* #undef HAVE_DIRENT_H */ +/* #undef HAVE_FTS_H */ +/* #undef HAVE_NDIR_H */ +/* #undef HAVE_SYS_DIR_H */ +/* #undef HAVE_SYS_NDIR_H */ +/* #undef WORDS_BIGENDIAN */ +#define HAVE_SHARED +/* END DEFINES */ +#define PACKAGE "libzip" +#define VERSION "1.9.2" + +#endif /* HAD_CONFIG_H */ diff --git a/libzip/adapted/include/zipconf.h b/libzip/adapted/include/zipconf.h new file mode 100644 index 00000000..d36f47ae --- /dev/null +++ b/libzip/adapted/include/zipconf.h @@ -0,0 +1,50 @@ +#ifndef _HAD_ZIPCONF_H +#define _HAD_ZIPCONF_H + +/* + zipconf.h -- platform specific include file + + This file was generated automatically by CMake + based on ../cmake-zipconf.h.in. + */ + +#define LIBZIP_VERSION "1.9.2" +#define LIBZIP_VERSION_MAJOR 1 +#define LIBZIP_VERSION_MINOR 9 +#define LIBZIP_VERSION_MICRO 2 + +#define ZIP_STATIC + + + +#if !defined(__STDC_FORMAT_MACROS) +#define __STDC_FORMAT_MACROS 1 +#endif +#include + +typedef int8_t zip_int8_t; +typedef uint8_t zip_uint8_t; +typedef int16_t zip_int16_t; +typedef uint16_t zip_uint16_t; +typedef int32_t zip_int32_t; +typedef uint32_t zip_uint32_t; +typedef int64_t zip_int64_t; +typedef uint64_t zip_uint64_t; + +#define ZIP_INT8_MIN (-ZIP_INT8_MAX-1) +#define ZIP_INT8_MAX 0x7f +#define ZIP_UINT8_MAX 0xff + +#define ZIP_INT16_MIN (-ZIP_INT16_MAX-1) +#define ZIP_INT16_MAX 0x7fff +#define ZIP_UINT16_MAX 0xffff + +#define ZIP_INT32_MIN (-ZIP_INT32_MAX-1L) +#define ZIP_INT32_MAX 0x7fffffffL +#define ZIP_UINT32_MAX 0xffffffffLU + +#define ZIP_INT64_MIN (-ZIP_INT64_MAX-1LL) +#define ZIP_INT64_MAX 0x7fffffffffffffffLL +#define ZIP_UINT64_MAX 0xffffffffffffffffULL + +#endif /* zipconf.h */ diff --git a/libzip/adapted/lib/zip_err_str.c b/libzip/adapted/lib/zip_err_str.c new file mode 100644 index 00000000..5cda90ff --- /dev/null +++ b/libzip/adapted/lib/zip_err_str.c @@ -0,0 +1,59 @@ +/* + This file was generated automatically by CMake + from zip.h and zipint.h; make changes there. +*/ + +#include "zipint.h" + +#define L ZIP_ET_LIBZIP +#define N ZIP_ET_NONE +#define S ZIP_ET_SYS +#define Z ZIP_ET_ZLIB + +#define E ZIP_DETAIL_ET_ENTRY +#define G ZIP_DETAIL_ET_GLOBAL + +const struct _zip_err_info _zip_err_str[] = { + { N, "No error" }, + { N, "Multi-disk zip archives not supported" }, + { S, "Renaming temporary file failed" }, + { S, "Closing zip archive failed" }, + { S, "Seek error" }, + { S, "Read error" }, + { S, "Write error" }, + { N, "CRC error" }, + { N, "Containing zip archive was closed" }, + { N, "No such file" }, + { N, "File already exists" }, + { S, "Can't open file" }, + { S, "Failure to create temporary file" }, + { Z, "Zlib error" }, + { N, "Malloc failure" }, + { N, "Entry has been changed" }, + { N, "Compression method not supported" }, + { N, "Premature end of file" }, + { N, "Invalid argument" }, + { N, "Not a zip archive" }, + { N, "Internal error" }, + { L, "Zip archive inconsistent" }, + { S, "Can't remove file" }, + { N, "Entry has been deleted" }, + { N, "Encryption method not supported" }, + { N, "Read-only archive" }, + { N, "No password provided" }, + { N, "Wrong password provided" }, + { N, "Operation not supported" }, + { N, "Resource still in use" }, + { S, "Tell error" }, + { N, "Compressed data invalid" }, + { N, "Operation cancelled" }, + { N, "Unexpected length of data" }, + { N, "Not allowed in torrentzip" }, +}; + +const int _zip_err_str_count = sizeof(_zip_err_str)/sizeof(_zip_err_str[0]); + +const struct _zip_err_info _zip_err_details[] = { +}; + +const int _zip_err_details_count = sizeof(_zip_err_details)/sizeof(_zip_err_details[0]); diff --git a/libzip/bundle.json b/libzip/bundle.json new file mode 100644 index 00000000..6a10ce59 --- /dev/null +++ b/libzip/bundle.json @@ -0,0 +1,38 @@ +{ + "name": "@ohos/libzip", + "description": "This is libzip, a C library for reading, creating, and modifying zip and zip64 archives. Files can be added from data buffers, files, or compressed data copied directly from other zip archives. ", + "version": "0.1.0", + "license": "Dieter Baron and Thomas Klausner", + "publishAs": "code-segment", + "segment": { + "destPath": "third_party/libzip" + }, + "dirs": {}, + "scripts": {}, + "readmePath": { + "en": "README" + }, + "component": { + "name": "libzip", + "subsystem": "thirdparty", + "syscap": [], + "features": [], + "adapted_system_type": [], + "rom": "", + "ram": "", + "deps": { + "components": [], + "third_party": [] + }, + "build": { + "sub_component": [ + "//third_party/libzip:libzip_shared", + "//third_party/libzip:nonrandomopen", + "//third_party/libzip:liboverride", + "//third_party/libzip:libzip_test" + ], + "inner_kits": [], + "test": [] + } + } +} \ No newline at end of file diff --git a/libzip/docs/hap_integrate.md b/libzip/docs/hap_integrate.md new file mode 100644 index 00000000..89e694dd --- /dev/null +++ b/libzip/docs/hap_integrate.md @@ -0,0 +1,54 @@ +# libzip如何集成到应用hap +## 准备应用工程 +本库是基于DevEco Studio 3.1 Beta1版本,在RK3568开发板上验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) 。 +### 准备应用开发环境 +开发环境的准备参考:[开发环境准备](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) +### 增加构建脚本及配置文件 +- 下载本仓库,并解压 + ``` + cd ~/ + git clone git@gitee.com:openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` +- 三方库目录结构 + ``` + tpc_c_cplusplus/libzip #三方库libzip 的目录结构如下 + ├── adapted #存放三方库相关文档的文件夹 + ├── docs #存放三方库相关文档的文件夹 + ├── test #存放三方库test的文件夹 + ├── CmakeLists.txt #构建脚本,支持hap包集成 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` +- 将 libzip 拷贝至工程xxxx/entry/src/main/cpp/thirdparty目录下 +### 准备三方库源码 +- 三方库下载地址:[libzip](https://github.com/nih-at/libzip), 版本:v1.9.2 + 解压后修改库文件名为libzip,拷贝至工程xxxx/entry/src/main/cpp/thirdparty/libzip目录下 +## 应用中使用三方库 +- 将三方库加入工程中,目录结构如下 + ``` + demo/entry/src/main/cpp + ├── thirdparty #三方库存放目录 + │ ├──libzip #三方库libzip + ├── CMakeLists.txt #工程目录的构建脚本 + ├── ..... #工程目录的其他文件 + ``` +- 在工程顶级CMakeLists.txt中引入三方库,增加如下代码 + ``` + include_directories(thirdparty/libzip/libzip/lib) + add_subdirectory(thirdparty/libzip) #引入子目录下的CMakeLists.txt + target_link_libraries(工程库名 PUBLIC zip) #工程依赖三方库libzip + ``` +## 编译工程 +编译工程,安装应用可以参考 [应用的安装和运行](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md#%E5%AE%89%E8%A3%85%E8%B0%83%E8%AF%95) + +## 运行效果 +- 在 [libzip](https://gitee.com/openharmony-tpc/openharmony_tpc_samples/tree/master/libzip) 中,运行效果如下图 + ![演示1](pic/hap1.jpeg) + ![演示2](pic/hap2.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#%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87deveco-studio%E5%BC%80%E5%8F%91%E4%B8%80%E4%B8%AAnapi%E5%B7%A5%E7%A8%8B) + diff --git a/libzip/docs/pic/hap1.jpeg b/libzip/docs/pic/hap1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6e51f1d59804068a6b6317e4e559b9ea6dd5758d GIT binary patch literal 40239 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%0A@ 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 HpP&8%6I4pg literal 0 HcmV?d00001 diff --git a/libzip/docs/pic/hap2.png b/libzip/docs/pic/hap2.png new file mode 100644 index 0000000000000000000000000000000000000000..a23ff6ac15f63daf2506bf2a0bb1400db8f88d15 GIT binary patch literal 29233 zcmd3NWl&u~)8@q`NN{%z?(XgcxwyN#dywGnZWniliv)Lvi%W2a;K7p3TVL(J{k89p z-I=L6)ivFHx@x+*=XvU!ziWSg0zNCq$jbnrpa1}PZ|23 z)KGa;*( zc>>X@3tms=$Dqqt*i_tDbPEY*#($^@k3n}*wM zCQ?JVv)&L^9z%G`7;b4}Z{;q$%8Sx;FP^|)gC722GSb->%&+_9)`0_8iZZ*cW)h`N z7Ce>(Xe-RPuE=Q$5VQ+30ONdUSnMM7o?#?a>Fzp(iTKS8>owuBx!!2`_a=-wRX1)f zO8eC+ESVM-x87OzOvSwF6NWb+(4)E@Vn|D3k%Cs#WYHFPegH$XRpzcs5FJt|r-y}7 zek;LQX510=YCs1HNGjrcYqG#k$KO?{7Zo>ryQ&rOrTcxJsME1_)sZ>emIieT@qCj zU37j=R0OdPwCXf+JqXIeW<`HZ%^(c4xA+V2K#>@AdKPoN66Gy$omU8rI;r0H-uqfY zG&dq(oh2~4c!pt#G?geL-5p6{?kp%j3~vI>;eJ~lKi&^pc}s`dv1_agsv-GNa8mk5 z;6mZ)#96Olt|>Mpx5GTde)6@Z$1i6*SGP&covuldkTWo%%LIe|P(t%dsAD3FM7aoe zi}sarxYMQw5j*uI3e~8yu_D6nNzmB+fqXF0gt@$@Gx7)+-4>|fxQWTBnfE71#EB3C z1kY))S?D%}PsJTWe{FpguG8&2kSY4ee zqgG_${GvYVG=!&9tr_zUR6VI9@oQseZnu{O$(5R&Hil_UVH|cRAjB(H=%VkD~Sxqx8#JrIqg~u zh=rFr&y4bka{9Ru&MAwU=k>6|thG*|rF)8<-|f(eE3UFG)YHwocXGfp2^C-SXDN}Ozgx=Zoe`$3j z5Q8qlNs^>tdZ!}DgjH&h$xV-wi@d7&DZA$LQ_aiY=g_|c(f|0R<&f_!-&eX}f+pG) za`EuXNc&7jRbaUh=6<3FQKhtkj@DVdP=}6@149>UP;!6a*FHfr@oyX8;an8`9)fb9 zMMe$*-N_&Go@=^AL5X;Oy6~k!3}SXOAOw`-YbrA??Xhjs>6KhXFs>QOVo{T^V0|v5 z%D6wjtYBDHZ{GYD@6tGm)k0)zQtK-(!o^FBQ(C+N ze%agG)#?5ZiAS!!)!{tKz1;HpB=IRv^(EsVDVrU+qdTF$0FgR=kkRevw%{Ft?3(9r z!fK}iZ0k3-#}3SfpCgI|GG?Q?c+^*E5%+_H5^>Oyfk~vHJA&JI35BnH&6T!G9~HL| z_~@`yBsH%@d3?yK40R;yPg|ERYP=}1mlmIWTFZy>I@Xwj*Pn~)K2Tac3KJmAJuIfXlh zJMk9`t*o)N7|dO_tapgQB+J3^VfPPRh#B~?eWPQEf(c5RQR`;|DZ}6S40(j`U`NKGXD$k|?$pdq_7UEM{Y3GK4BVfjRmK!)-leAdZO7@8cqzuuU8Y zQ5NpYAQkUQEvg_!n&O#3Zq0GDdjC3XK>3!R?9e0mO+EB?+P9a_q+_yHn=Barp|CSXX){}g{PULlZ!DvKbf8}vzrbE6`Z6y23 zUaN&jNrngjwh~_;&fc!LeWK8fa(BugzD$V2#i@u}aX^^!Rg)UPrvALPx;Gse^h?bZ zPPdcvs~YjrhC` zUPpJ&uRdG}?|-C$64VBUkAwEfpi&f<3$o+cU*V&>Esk{>7gUfzRmx;S<_G1~-6q0Q zY6;_6ZZqmPA#t3K;&9t6u~y^Nds7h_;@uut+m@?_j_=CUYVx8yYQTSG(L-67do%EP zbH?+2yZ3$?yi0bwqmt$UAKHyQL;hbr`LQnNFgE+QuX{Yt6NIBRp8Q$dud)|mIPt>1s&*4fw{j{y-yD6Ys%<&d z>ldrD9;?_~qdH=q1C~E73ucK+MZjw&)Kt(wt4d?M0oa-@=)wvFNySSu(AW44Q;%7{ z0&7N932VS;dV&sp(Y4!Co~_$B^ZLp-(uTas%G|rg0r$J8;nUNjG*~XT1pGDz6w`re ziw0a!+6z%(6LyD0(s~N$Z8nufXcn`u>CR+gHSICk2BxszPmg4rJXP&pS-2HEGpE?= zbsgti_1J1#4k<^!Z}1Y^`MMBi>xv_8F4A&9CzQ6F^?XMn_`)E&%0Wvcc>pEL%_Lny zl?#F~M7Ua2o|%^l5*1M!SP+^&$;TfMAWJ2W@OU3=yo7Jj!l)rVG$#pA_DAW;q_n2u zUhcblBG)!SSe}M@6}$A3mnMO_{|kt-`U_axx*1t1WEInQPp6W4G*;;Yfn=F=0!tyQ zhU^OfN0(9ynj?8&T4TgsTW>5%#8@^39dhFtyIC_lj6At~s2#V)YLO|soaQ*O8#6mM zW-3C|Y|#5V))#u%%HM}$zos5WCPY6Gdo5t3pbrhN$hppe4F%uIUaMMzAFg>JqP}^r zUqHzx^3GiE?2FpF!o}Xj^V+Q98kcASEtiC6c9j1aW&l(XH3@NC?_p1bM#5}1#uBKWx%)Xv8Z)sesg_kaC(}^v+s5R-WaEPcJ zPT{?eKqZgIt-H0V*oAq3g2gecCWWNJC{*#Bj>1CNn>$Wwo(|C|la{$W2kb(kf=>3A z(tB;W@*-nDN`bp{zoYU@C}hM%15>qCx!z{Hc6%Vr*Fqmvl;y9#aV*I^jVzJELFb=j z_PB7qM<_+rFuquZewAw@rd{BWT9XRT^cwhn4Uw-;B%w|X%%jf{s5;NRXy_&wKCr9) z3phrJcc0SY_w5i6PViWY(r>ql>n0$_K8d@=s*@4A-2~W={{H*d5xE5Y}ci=+P8Q6 z-sIZf6!@R?{ad~_*)adlum*y@h))&L7UcDnTiJVYooFQ0Y$Rz^kKu3#lD3ewP`80b zx@!2msdcHt?J!YdWD}-!T9jjZVP2(jb6yY-R;R0_WiDl(j#5V{fgo6az8OkNf1lX$ zTFU6Dh)d8?y zC8+l7Y6Jr|KXp-VKm|7L0hO9TW~Ug>AU|DU3@Mh(#$riuuUG~~o+~O9vYFAyn=3CT z6-dxtjs?S7M4}x8Y>!X$5Tn~1b*Qlsj)Lw_=7^U}pFfQ?^fZ{mFGoG}o%Z06$zukO zJHX1diC0w%$}Zzvc>M)f8nqN>$`VVKx%tF4yB;|0H)E-d$(YfNOzuZ)!B8KX4If~J zB#^?T$QD+vT8pbjd7bKht8S+p7`!3|)vwTH@uLl$TQW(ouUqPCuR=aUsWZy#cGD6K zT+nm!BdJP^>fy7^tKD6HnwTu#i-Lj*NehzpO7Kud7nz&efmX?Wk2V5xSTzVQx<|0qe^4>L zz+6;~EEqkY)NlTR6lz8X!Gryd;dIVEN5eC$b#s)$LhANxAki)KYiC>&CAI8^a)Ds| zo?A--_Vo@w-h-4GUQfAda$Z$7IrI5f`=F344_LnqgGV^bYEMI4KRN2=WcJ9EMv!*U zr915{!n}u-{k5h(=->@4X#4s@)y=KUf5zZtV8mS2WU&j<0o!}1C0(XBO{2ahoLkA* zIv(@u(*Kq$YylIJ1|?RqVll{w<$o}G?U54mBo+&CLBxE&uCF}<6)V>ZI-V6jPIzvZ4sY=7!fJLx5-q?O@-dYXRc^wpvsg54(DY&r8vVhaAO9+XEW#_^t9E^l%O*dO<4 z5HD=o(_6CNZY}z z+v1v(_JD*VY2+YR1ZUo$tX^ZA)bO{WLfY+af~xh!~oB<6% zo)~`574JfhxwsKVU*;CplhcnhOO~kE0n^-iP-_=Hd#8y@qE|wcQ)^Tz8|DGa144cM zXL)aik{L1b1e?AxgMk1oyk+hhOj$->23lc64P{;&8u+W4qQ%N&XKeAgoajvH=CY*jxiJ82$=Sad~jE&~$i?=$k|BCQhTH%cD@3KIS zd`XlkQ!9KJCob6(9X0$WYmo%0%n%(1=yH%7}mqV*()-J*796 zk=hyj=3nK!USD8;h7=J0VRKbJa}?=Vvo~-4?3+#heqO{o*}J6OjJrVO;}S8%qLPN_^OMB ze9Njk$u(Y$oUW@_Gs&2wva&|qI+L%$pXR;}E>Hmr8azU|t+cR!V{+ZGGVkOkD__-} zj3uyl&(gd}T}o;7c~1j>uk|jU+a;zUDA*1y>L24>MXPRLWOu*NFpGp=k!6y|NFW7o9<+^SBD5 zN*gi3lgjkUjg8WALKGLrwtPCst9NY5s;qLM{3g>!j*=|(VOi79Xo{8wo(%m#rFvZG zgjI2ZF-3W2`P+>)^B@|eAkC0IHvOSMuHjAi*7Lrh@)vM@8W#0CGuZcoafL;fgLEB4 z4!!^zTC->Yhcb~XyCXkUfv4)ho3AA`Ow|RKCDqmCn@%OUSM6^%9o>#M-TpUS#dsB? zS5>mw8Ap*X1G7Af0dL&susK&39z!Fc(K$t5V@2S!wM($gNW6>!XOF2|EX9FynRlkm?QLF{xM!*et$^#MSr;ieXlbd zP3jy7XY!}7#tMB;CMr|u%+d_=ODm-;bzBo4P}E>t5|(9{DH6ED!zKKtee>0oVz`g} zdLo<>(X}pp&aC!At0veJ(zEC^O1o6VLJjSLVs!pJGb zI)W>aA&%aXs=m;X?pKAkUCUayJ#R$OI|fUPNAocCrdV&Dx6woP1?JXm$#s+wg!!NA zbePr**lbpeU4|pi>SOslkHJElz#eGS^0()D8?5$#(CUt@5Lb6HSB92w>`3iYJ`b?M zY3yJ%Ng!076e!8-$TQ$$v2G_Jk;AaW|8%|lv`rjV{jRiEA6bySnJK97SZ}VnmI!}- zNpa!`^FlpO32j=|huaFOl=z0dhGIO?E0jqH($Vx6fMr?(n?hFOp{XnU7f^4UaH|<# z^h+3dspd#4ZFCF=J#vKq5u!~9D8ohkkJ15a9?{|xbi_8HyrJPFqV;wSoX>wfKnN^@M|pe)pF2!Tt0Rn zu(PBNndW$>Xmz_0ojcMBr)X=rjEnury>|tezMdlrv3We?s#6EL7;l zH0zh9j3qCg+7Qhm9I9#}CCk4~rQd&kRHvJaryqep2HkZ+Ig)|`72LTN|7+@3WtY{( z_LKZPPQvaB&SmToB5p?6SZn-;C0C+O;{>A)oFQHwTAnl!!-^nnuxQkv*bGP-j=Fxc zT~8t4N1;ZwDsVwIiV_?Q8M|X%%e+K3*4b#E`T~m^q|W1I1@JUh9a>5ui%#;;T$PEEE5vach*7@w%)d>=NP{^(@ZfedwT*A@CtjY8V1 zFi6ZX-Dj|L6rm6Ogrv0P9AC7RYi&umMmNg0WGIql#YRglWS5q%H5#b@0-TAs$iIL0 zbUEX~hQYaefqmh*TANXsO^Y+QI$)#tCCo^xH+sI|0K3pbCblEn2A^L}*=ubZG}jfd z>@^&i?WgbcN>_jLv@XoET7D99{K??9LDjRZ0Ue3So$j%L?jB!WE-fZjZ!4EmLD51t zZljy<7B+ebl1pYV_UXDjo^bLgEcxDJl6pkb;VAhwWON#1!pJ>tBP?PacNY_a+tDhu zxSUPlYJ{sFwN;`lnA|^*hCvsfptLDI-h{{mYKBM5HW|eqiMTl(oTP>~k2rgq71+%u zjLZupB+g}{5jpt~MU~tN0%YLk#x#xNew?U1KBostO_R5XN^)<=aI==Zb-~*r>ki@g z=X7+vX5=th<9yStsl2^QXSIE1pOw>;-YWgKyel@m7Dw8E`m2%KL z>}(0tQ9}}?#8Jx1ycUhp+r2&4L6Pl`A^cbl~A9?1kA1@cjNtnD0nvLeArWa zve>gn&70T|+4;m4xjg>@H^DtNnw z!YgX^K5js(sRq|#XHr)pE%)+oy-nb+@8{}+k#F+ihM|(1GK#$4gd3@6kKu???TPI; zz-rzFk(A9~9_La^Ln&c|SzH7@oiO_@_s-TTT`qMx;cto;?)r)pJW{xBb7RT!4%8iS zYa*1?b2;@8*g_aBzE$dK((~6;t zo65vLa5CIeUwq4qp2pCayxGkZEMf8ds`+@k1Ago4UJ+WUk2^A4Y44&t2#RW;3V$_X zMzAV-`ErXfI8)H)SZ=G^9F>=&ca}=R8}Zcz6&6u`u0F$zO3UprL)I+1Z{6=73G1RX z+o007LK1M-p@7-Uw8C{N_snbHH)}EDpdM^p^h?V84*!y={Bpa~u!fliYBMv6_T~3V z0(wak`)e0;%mG*P@$dHTsx(Pj2(tZXN3+rlK8t1apCkhm zksumZWB}bu|8+qwRCGUH%U-wd8~zL%KRyXlsC{pi&+F`RnLr-I3s6Cort*S)83q;o zamFD{-WVz!nu1X13$vinvBXSrDR15$EE7@SP7L5SOrh>+!Q-Xt8II_XLVZ=EglIIIVrpn zlu0TBMbsSi-?BZpJ@M!Wa;7Fn58SU!K0X|M;vmmQ2W~KNsICu}S-v8GT3#t%=-M*`Efl22b`+u@gYrl8g*e!xEm_bm zmwj9I%@V~GL_RC|BcO*)Z1Jo&*Z2GdByWrs)Yax7ebDK#Rqp?TLPYn#J1rCj4Zf^T z7_1!>B9kCnR8G?g8g)y2%A-j~f|64(n0C9`->x90vi%&YpmT<(Nre4+a)(TWL1FTw zrQK6jKfb*l%{f+Qc+!~L17jbGB#D&)wpBju%iw~SI{8gmXvzILfr-)%?cNlt#`Du# zUKR{NO?u`q^R3m=WBOYB%(P2qdJTT85}>6(#Q_5$5|F8nYAZg6#zh1qFiRL;izubQ zb70HXMgwL*FH1<{y+Jy`bI!MLLrVRJoChFNOdgl(iYA|9GkE;3XVFY%7xj-G;4nFM zZ$jLepSH0SM`Qz&FqDQ8&sdx%jEmU0Flo zVLfRz@$yz>Bde3_$zzR3RJ&*HB-dN24JGke=um-~e#|ERBKfF&&?XXbn!9y^VmJ0} zNn9X|Xj6_{=E%p2+1BxS`zPzKxHbiiM5e-J^?WFkMp_`DyJ|wYxK|S8c8$lvG-Clh@3aLF{tNm9YV{)JJ#N6>Lvi4c3yzYRN6COsvTH>Y55>Sra{E~wMC>Wa> z=-->nhIX;}41W>$#x3G|k4o22)fTl=S3e$B8}wE|d)fdY%>okQR@fIvtMu{0uwcQWUKUp@%iN+T^g zC5WDNys+buHOYt|v{%vBz-mIbx@8|yA*(vE4r#8p?4Pd1Eve$(y7s$Af2~-(ugsR%iB5NX_o;%DxodLk7>1`}M@pTHV#)n$ zGb(}I=TDC7lcczaCJ7r^0o<{;q`!*?Zz_nW4xr+*s8V`P2-*-nH8c0oR5LrcOfE84n=X)mX-3|X4;>R z52uEu;85;x?ZTJyqZ;Y`ZkEjE8#=bvEwuGvG3D}M51$EXi}mxQ^lFmB4EgoCKu`^h z_G_SEaD1Q6CmWC0CcAOI{ZnR4e@7YVue?HcX9{sFQReG4c=U!QXgsATQ9-Cez97ia zkq5LUQ8dZWgm!+kl__Hzbc%puy8VV%8XX7eA~%Z$Nx8RAHZE;ztcx)QaR!?aH_W|x z?IH)bPuu;$a4lv zW0a?$%E`)1i1op}fkrcZ)=%rApcHO1-HU$fIZ6UcSoU~X`5%PkWIW5P6uf7(*!la% z({9J<+|<;nd|rrEaLAE={S+_TjdE?Y9P5_Tmm&FhS&wDY^R$urdO}3vMOKt z5rUs~o2u|>5}AUXVylxsQ;Ny>#05OM6QdOs15g`d+)0jvObS|vN z2>5(1X7uZGrMZkXeMJ)mM95q{sC?ntA=1A0g=Xq1ai_q(d|5i5@;T#QCqtbDULL40=ne z$GFMc;J?KvyQs#%L?oJ9d?p|LLW4>ZKSC21GZsxdQ~H!3{HlGpK?;ac8$n8X>muhY zBxn&DxwRY53|h@=TEab&TBIY#L(Yfyg~^{Z`U_}f_B0)tD2&A^vIt{ruFJm!GbdAC z_#Wtxf*N?0rOzYjEO%r%*p}CCW8$lT%n!_u6oXVx)-D ziN__kB~6X@il@1rZwg9E6ufn73d6G7JWNR&l@-LBOys@BBFTKQ z((t!icdXj$L#n-e+3p#{Bs=INc*Jh~@@BbtmS=9E8y`g?`*Vg zDWE3JgxR$@^fF~+ zrpUmslm2WLGNMq~5xVPi;sq|xtWh!(;cmFkhwl(=Oj>$-O=qf*yKuh|{YX=Ie@&7~ zxN@c7UKTlO|9%cJuF&4ze%UY7hPaPv`+JGQ5+a zslX>w(F$;|Q*v*WgOVhY-v6_^jp<~D$78#O_K@pUbX(Um=~1e6XTl@G9qvR$WedT=&~D+6J;8=6 z6v14aIlvshAAgh$o;?og{~!ot4-&QKOcQ-M*QejnAQx9oatQ7FQH7k35tG$#28-x2Z+ z1c~&xe9BYZK{tz|Hz8a1>9~4Ib(y+_JpOEXm$c2XHFK0(u9Q5bMJKRIl7cp+G9JCn z9v3l9v3E{6_)GT!ogQ_2fnA9ozcMf3Sw~J?d5mv+pJF;0{qAZDVzNLvOlw`-@lQMn z>5LUs)K6!MCd-ZwJr3H-7913eO^{&^`$c^+>Ri4l$FGkqrSv`9JZ~>%H8~JtyS8eu z-Z4wMl%a!HCg&d(pnG6!9roP_&>k3Ay;6N<*W^)6S)aiV{Fi#M>A=1bpe9AONBr=p zHeIG50V(1&kb;}agOCznpiWOQFsLG5%fXI^xSgf5h`=Pst!~mswO$yQGqjD6g913Vk_g4lA{w zjK(4X*RCj9si=9@#}K z7pH>LOgzQ!>HYFmH)`F$i-*>-*YBM?MNE%tjo^zJOKcJNT8mut*~7fmc|9L>_95S9?j>iksCYJD4Z@wdJwr>NCpKKk1$OXB zY(?KyPF0D1VEKmc)%3MdLV}K==6D@rGm*N%q6n&jyS*%uT`7*eo@^jNn8<m3&+W!FYc=+sx732;^s37DC_|H8 zbG_+uD-%pAKR6x{|HBM<94;@CgPT5i+3(p29S&RWaxd}7{BAs6l|cqw97rS$X7vc3 z)GQs(Ik-hk0=TVpz9$O%d;#eSdIVJMdv_h`KQ(Fyl_@j$l@3PT1NVde+`5%V;c#5K ze{KkJU=Oj4hnvp}+RU#Pkve0~CwNivFQ(jv(bRb;%Grh_jc;jvVXa>x;ES9&3Nzc4 z&?BLJjqpIF^D7$4?SgQRw~04zuCb`Sz#Y$;m#eORy%ON)P5pk#pPq(k4fSn)6qE_k zE2TiGnOwZgR6>3=>UiLg*z!~KJBsU(l%@NWf;(V_eEK6RI}XOX&@+*laV2ozPFhR8 z?7(tILILv_y!aCd14FX!B^2EoxnFb|#>! zIS1aJEqn5^>EKS6tYQgB<(*eBe+toWtCi_#yv(t(_#*`_jJ z)EPgZTE{dVNCN5;;7o8xNq(cfY38;T=)H7xY6V*6 zCs5FPjgpg{r)!+S4sK8{1#W)XpE^lkLp?OV>tos#&`gr{Ljb=V4^;3!aZ4A&7kk!G zr*TKTxDpw$BBrP50eK^*Okw8`oIVFUvhS5$0bgn45FKkGu%$=795{s^cQSv01ne!B z)PLB|#_L5Vv1NUAFe$fcvgIbC&c-KQchSQ5Jx@1a!Av{1DePKhOxmQD8m!-@fAtLP z^Em*lso#q{)_wcpIJ4ryM?zuATTy*Pgt9`yxkAU=xQ`+2hf)2O zw|kSI$YPm^eIX-PslCOxUrVQ`_*0_6sc8tQ&JC9RCOdvR?#82 z(}L+et^5m+CBqP67F8@^^p^_^gnf;QyZ*6Q=SJG)iI_X{PTk_OPKEHkVsMp0st_TI z?cD9r2U&aP9))UcN0=^8P|~?jNt`UAHgn%hW8eqy7cy5H#aTN`TOCZfY|^ z^F+vGVn$v!`7PjOqW9S+yP}dip%LfDHux_fU;GYLR>fu~wwiu%+mVF|g4Ibt#pI`_ zNT7~B2gxHGV7UggA^ESHuz*eVk@57P9N6E)41Xbopmnp&2@H7u2 zdtMl6#S0Ni^z?49#*I#U8%CymZ0JROtS?$8PL{P@VtA!~m?&1sEYJQay_G+?G)~dQ z7>ow|EFobGO-FPQ>wS~blDm{6;Tog#F+M*(cV74!cu-y=QenEQI^6Aw&fc8C2ED#~ z4jH-hH%ZH*7J)Lnr%s{b4eOTwCL_0rb5+cfEJ>ssneR%8vqv#wS(~2VKx5Hvb8_+h zCi-_jFLc3+RCP`4RM+I-J}&~pVy{OK9C`HTBW<>J+;kR+YHClLZJX!LH(3$MX zBV?6*$Ek3uk%f4*1e|;Et9-|i)ekr&J(8`}N|uZL&8`b4`AiEF zrIH3xru&*i3)%`;#nkTzn{iBui=BInzs>peL7>fl=e?XeYW1VTFMGX6cOp^ zLTmMwhFnTJ^G-Y?IERVuL|)H}NCs8!-Kj!eJ@wqAtspG#7F*MmAJi^CtFq(!H#_ZA z8_#z98|=9!Z6+tlb5Njist%nh6k357-$HjH^h8!vuBMJ9gFIbBl#93SM_W-QiWk~9 zdU@I+2#w%1%`5BErWAUioVn6CQn*}iQjTcRKk-Scy*0_37PQ$+?HZ!3Lo>&pCvv`=eszy4xwsN>q?1lM=6JsQXnwPy%+`4 z;gITZ^9Odx)q>9-RYTrj&H5Ot^7gxKE;H4T8T;=_)Kk` z4YNTpr>ia!1s`T%s`B3DYxsvdJ+@6Y^Ph8#wxd7O2Y;*rAx#@^JE`@d>q|c3V21k` z$gRblq=o&6&5M}GlK zJ$Y_ZJ#|kQ_33&V!LBpflJeoCvA|jUu%-*Q#`F%R;a?ZbImaaNt6VJd!@}_id>au1{XbjbPbc8mL+HW#{oTOz?GajF8 z4gfnU?Jvf7OOI`FFNI>yhOT_ACes57zD)&f#eX!{mKI>3rgdU6>UeQX5<B>q>V-cI_a|$G+vMI zUKFeQ(l(djxV7CHVu}m*Fj^l6x!asnqDO1j_$Zog3rb7NWgRcR$_Qbh_n4(|BPUc4 zpEJ>p#)^xt(2gN|0^!|hnE*SaOJitc@F6pm#mbo7PP5mT4gj48k9p+HXv|AnvTWN!ytkDtU0k~Q0@00W%*I_G?}lb10?zP1rM7&X$GEOshJ z4qwnk}P$@!o6PJ2+Mhiass$BEfUYW%~C{7%jUHetAGB!eKS(3RMLmQ*)D2u-xVj|HUhjf21-*j0Eo% zHJ)>+{1<>qgVH*rzkrEG38F=>85^ggv^aIm5Kt0+9T;zR`S)uAv4Bk`!Au4^++uzZ z@);fZMVno<`f9nOf|NhuMh?HpG|B48&=g3*QD&BTt=5fUeXoCm6M3IfMYDd;@Ve%T zsK@cR-aQo`z906|NGi+=PigJ;cAJFlgk`D1*>B}m?9i+^+@Mi5bNFidFc#cta`t|X z8`vWif-g`)JZWL7$qY_`AC4r4)Tk;vV-zOM>Q+08pgC&{G#GZ3#!!0ye3(=r8Za_^ zLaF}?AmA`kuw8Z$Dr?1NTT#a{O(y1U?K1v~vVI>AF}#W9c8&Vo&w{lR`kntL{w~8Q zhw4!{S!4M&?BVQXgfEIZ0d-js&J;!z#;=tzo>Y(V>k<3ml8b!TI%fA?_zwB2A*vP*zu5+!EPoG(3*@8qi+BXx=fwogCnWr=3xWIq?F zSmW$>CNT@5MJU}LbhO0eRZo}s{Oh&88&``CJ-Ng$aEJ61L7Jz(*o|URADzFrIiP(H zlbD6BEA>D>rWT=NO5|yrQN&lZNPQt^XDw&_)EHNW7RO*J{_mw9Vcuwq_o%la4x-Et zCs0}emaN5>aDvdiUDv6wo5t2D>~nR?pVn93a9Y(r>1mG1U>9L7Hpy_C-_onB%vfENDoF zYZ|>bakQG_YR(KzUR7pSoj!;J->i1s8AYWz8+&;)hA<{zhM%$HA3CVl13e`-W|u@s zPskEU2>qbIZBPDtboIozkL?)Tt_hp+L}Zhu6|O4$H&;CCx|GoqXtz3 zZtkx;X$$y#b*eiGcMIs7uGHG6=LFqR&sSUm>xw1-z` zN;yl79H##2BHd69!o7C|Y$TJQ*9Y3~wItIX<^L5yCx#b|moEo3x$ z$?mnKYUnzRsP~5duzMwIa*#oJSCOSEPtudBbep3FSpxWIDu-YeQ^degG-<@JY15|m zbb)~62XX{d7M}u;_?`SSRJ&rc`O{hFI&aSBa^q|lLhFNyJMbqaWViE6B8_#N(=~~@ zt>gy!SMHnWmGrKwcS9gPR-uk_;W`VKI|X^sqK?oxnQ)3EY)*`THFkXV=id$>Uo|Veu8+ff zPL~p7X?2y!==}OWQYCbU&z?1m7g%|xZT^<)=4J&7#<8FiCsbj7CnpY_TMT%Tkw;=a zNu7?A;{tyB8eY|0ZdvW~<54zLGut~H_!uud7>{Kw97YbhH2&4BFYD8G;zc1K3oAQ; zGda}IYucZ#rH&o=k9ZCFL&jNK_7w`{OYWvJw#_r|N0jcyaj!or>ATHZ*|+Fd(w8TC zbLsHd8Y)wPOm1Z5~nSFb=pg3GA)4_yXfW3U zD^;)==a5~_A|)e4n@NUTc1WLiLnV2<3QuMI3yGY%S%w9eHq)!*Qh#a7gs^Q8?_ayR zpYioSb0IoE!PS;_H*A@{+iR->ejO)YAjc&xX91=)^LeTH45{X@OjKjubLFa$9 zca}kMHQm0S;30to0txOA+=3Gq*TF5gLr8FU!eGJO-4lX41B1J}+n{&e_fwv# zbLv)|b8g))=VMo`wWoLQ)jhq}`t^S|c?eV*n9{#T#mWs5Ed4#>S`tV7^IQ_gY}qa4 zI0D&_pSrmS`&0a-o;`5DbMJ+iK^db9)jJwWxiJG(F=h4nWbgi6jL~47seIA?bcOuR zD5>#eE+B>V_r;>cuv)F<_5=efG19AMy=Ncxj$_UMIlvP4E~-N`&RipCNTTeZn_$m~ zROUMmtDt|&yd7vp=lGccNPzE4uAk^u$UzhpQZl|IStZuzF%cK>*gKUmmj{mM3( z{?10f8{*Ewe~>p=c;LeoBZiSnB8T-$)aWqA`e-=L9xpH)m0bBiXkOCy_|ngHQPNG# z>i9p*@&6_8C#yB3*Jwol5tYVsVgI?|O#6bHJi+V^ znd8>wmJ>!#ynS11qQE`z_0@zrD{Af3?_@roHt}`C*xJ-&zq0@-5=VLJbP>W8=O1B- zEf(^jYxEWtCN&8^k^`P7R{KCdU=uWD?VwfJ4vf4nUI3j@%@ZAZcnci1t8a|EgPIp#QmuE%kj}1oIZJzRyi~CP3CpCXT4p^b_SKcm+N@YLY({?s)AcmKhhdJmcsnDv`V5& zy=yEFiA2hv>E^S0nOu)VX6XHm;eR~UN~fa$*#aHWUM(l;y)krZ`ySf37MAoVu8Qh4 z_4^^UO;8Rxw?L~cy@U4GX;);*iirTuPt3uS9PXRvRT-!T`{&d5<2|;o>+zBF=R0iY z1ymSHN8_M5I}(gtY-GM~^G)6m~b+-a=eQ%G#SgL~pMom`0UNygVn=kwy8 z0DnKK=s{WXQ^qI2rCG@nfU}oe6K*y!$K|J!C(v8$J#l0CgPd-S4Qp4aTBJvY{Qs|G zhPYh5_QSl{OA@iAcF)zf5wo?m`{=BTEsptx4K}mQAF!tMI`{3fWwMh}3yV|t^C5@z zOCCq0AX&m{QGaV+eAiYJU2q#+;BZB5dzWc_^};9f*eB@;&@#I5mG=>UsACdy z;xVn>QFvEPh=od4p^9d-q(QZ6q6cnlK5xfWYv+|6WkL3c72kAdrAU^{jiZ+%$I^kU zbqE>~txc}irKwk);Rw7cCe}0MZf`HRFvl=(py8?n0q2hm-$#&vZ)o_)KGm z0!O8aMHtGIH}m`-h^ZgvqX(?j;FgAdQi#*2^@v$B@oSl1YGMYKA=KbJP2HoVHMH>S zm<=1QjA&B$s%d8q$|K+MNIx`?CrlNbL4Q3)#y$aT5zYiF_Gvkm2UeqG^Uc-{Ng7VP z?1F=T+SLvhx%>WM+q=nKbYEL3k^}aecNFR2Bi^Q;^CGJ0MbJPCrip38L)d30#|d|C zijL@iSvtTKt^8P+U+v72UoAwRMxnt6crtoQPY+x28wgF!KR6+`whC?vFHY$C|84nq zkE!pkMny@9*cqxRUsPhz$exWuN2OY=*w3hzj<_IM2IXP4ax{Ela+TgW_#jx${!cjF)vf9em?&DCXwt0Ty5#owd1eg>I*)Yc>)uNFCMB3~!L zI!~|_iqu-4cT=?E92ha%LiccY8}Mn#Z$kdtax^`3Ao~d*e*^hI5%u6U|L|@(DZ>m=_T_w?PQJ{Ys?c%D^sq&i8n3_io`)2Bl+Fm-j)m`U$W*kjl;6pl#LS z?841+8)9vhm*-{Jpbi}vm0H%(oF!&X)~@%UHq=CyQ9tvLzeSHV%=cHMXBJpPhZ zJ7;0d>L#CV%H2F~+n}bX^QBRj$=sBi6bp;=18reRX-Q#{fTxv}`^LW}s|v@NP?>>p zM2rXvjb9gH4TC`{?g#&|QpL9Vm~5shTZ}*0CG4|i6rC%t<{NsahP3kL2_T}Fkiu76 z<_QoAdIFSi8^DwPaUqhwT*>~|^S?Vn?#Crf)XxIKk8<_)UmuRS%8$kOF$c~|Mafj* zh9{ywi^HYf_mhb;oN%eNZnmV~WviQ4bbUA$;(?obtw$z@>ue;+tc6B4s`8)7f0!px zk(x}=h113!MDcLrk9y5bWjFPOm)n#M?OAyi4@5Ne#;ATCpVGB1&hI4n#^@>N)1IU~ zce_`#Y;U7};mq|}5u~N|AqAD2nR8O%N|JafO_(Dhf!^f*si4*~j?5>3tL^Az6!{Zi zd%>d)mZvw!YfkGe0)2SB1-J9utMSyxF6o2jt{_QwjVRwriM*Qv8NvmkWD4w-`eql9$F%NLPNbzMau}rjdo2~yXi0d2Z0&{%SjOex|j!xnKJztPG=Fn?; z#h(KDoN*-#42#&HAV&Kpg`>V)!RuOb9)f*tUPc@BM$V*PgyAhZArLgn-yuSRJ{C?6 z6|m6>Nr!xtCZAU;{Ln3IGv-M~_$ z0;3h$S(%-VMcIyHLDQjg*A`DBqA(70~+mo`rAL^7)%^3EA$^cPOhR zMV~ewz;IJ;?vmpLx6&$6gnCIhamG}US530yRQxOry-Ufs?h`;~=HTmVm2i)=*O%Q` zHfD?-EFZ5yS$#i?L-}nxGHZPBmJQ~&Q*G~jx?ZKux-<;njrgqy*$>%eqVhdOBtLa0F;1mh+i z#VxKZr4z@F_&gS;qDjpE5$$tsD^2ghLm0v|8)<4SzprH4VQjM50`CbAoT*Bi1J0=(N>NthGJ()4SLC0)84&xmr zE@_!ufoidmYAeC9S1!=|-GL0p4eIhHBw6nQR39%Hk2yEMPQ@=U-M9Rgl*|Y0oTAeE z{$kWeCR^0j#i>={ReCp_p*PV>*s%{`MHzr=%#gmY(y^ZpqjhMfKhKpu?H!Va z@xFez!?n>&(25Sv7g`_BCE{_bX5u$KB;^&8{|;RoHoQo~e53jZ8k^)6LrEY{k0^#u zwR-^qV>4y78i+LPT&gT-DvKDLXs${p;u@L1dt? zq}CT1%$AteF!eTk@{EBS+`4#Rz>k@WLB9HkkXc@8_O7E-6N@Q28^W!TUYvVH>ZsJ< zTy>?`)iP}kb=712-pgei$J~xs-lMg*EY)+6QX@_R)O}!`Czhb1ek*K+4%nsN@#9#h zHMF{rS>w%X)oJq=J<3VnqA(qK;P7>tA1$Ohx^5c_#{#_`Q-5-rGG=U1E0lq-yl!I< zy6h4H|D5Oy(8df_=u-3#Ro1LIf0f?lCP*N-!<}$GSqC!UnYMR(2d8gcV-NB9#7e7r z{Hce5Fpo_Cn?LQ1b(qg3mMU3NeAm3_;^>C$AB-LsBQD4bLRNniU)a&$4M{5_|GACo-QM=84l(0K;p|l{7|YWg(29(D>OFVkm%Iz zlvpAafzDwPROa}e% z#<;St)=m74R2MfY5z*@WHS+q}M~9V@A&~c_+4t0XF_0avvS~wD`x78*$q%#f2{8F% zhfwix&$Qqa8SM$MbC@dvB5b+1pAJP@~e%?In-Ei`aNJJ<;^fsu=f5q~blH zqCGut(3ZNb+{V=0k9OqJ23-l8CPzJPypF2=;0vBxCuhi?Av+G(w&ymcmZNIu!;SuCn;G#cI3r@p-j` zYNWK3Y*sxNyKEA>U+aSHOF46r1dBJrIO2LB%ktstjVAjVv({?Ng&^!wh8M*Rt%RL1 zRZL801jgo=jJM6K3X?Q@SSDwMmO)ZEqlyHV@c{}q^Wc6y*r4PUtbNDd!I$68OKV%` zK5{IopjsNQFEe_7q>osKQA}|y!rV&BSyYl%G01CsHrK>~CWL)cAcGqT zO2H$F_hYAVjq1}extV|ztglP_mF<2nhDEdWwaaoJ%3O8j@pA>w;LUCPf=}q-s8#TQ zHbbLhJ^_1lUF#i_s?Qr+k$K3NJ@T(KS2~-O@O^fxx1P7@%_n=>gpgc2p9lI3UqxW$ ziLoXq6u-!iDDfmKr4%&eb3U+Pg}yzUr@x0$+)@#G5P<$*)OcQqo8@G@FUBUWm)CnZ zXBy^-)Lt77sc)9lDq!Meo3^FHQEZEfs*$-_@#;dZ3u#G0kCC46ExJT?Zx2B3xN~>{ zXf76Ow*jk*2BxERwe+yOrH@-^@V{I{$P&D^$g>b8noZ;<{jRYrlcrHcin2Hna8;pQ zYu$owm=Wt-zL0QE_q#1AjbCFk$qZ>5(ZJ)bf0M)9;PH|-xNYQp4D-Wc>?5UNbv$gD(%)U;Ll!ROho%~ zZQ*lG{OnUZryo^+G|=GP=xj`FEq)!gs9@X+ks1MA`dHTlL2FEOAs$7;iiN}3MkwLx zPB@uLWu7~}8)~^URlDBF2_8iFG{j(E(?P{)_Ha=#Ym4w;uXa{6D6{Wse4+?Ri~!Iy z(t=}$x*T5*81oTk+p4A?b`O8S;`h1o(c}F)158wu`P^VWjR$#P^Bu^A;PfEIc$D?vbIz8l=624)Tu@xPSJSz7%gReoDL?N}H$I zl~UcE^{i}@q$S5FUAt<{Zr3Cr;Bqw0(pyKrvg0&ZHKTsKmmI{W4zDyGYdRnwZa7j- z;Bg%E%11v3Gk*6YXx?vp_;g(`4|96maGzaFtt*bK_|xu%TzDwiq)Bj2sCY8-S*0j5g6{qO^#`b+uy;6|pH*QlG_lxLXWA z)#`{{Qu6=q2l`-s<7fL=Y??*B;jiu23htP=Gk=5)Rg3f^)jk2-`~3>8MjuL2jPD+U zJ?x3Cl4ORoLDIm zU+n~qy`dpciomXr53Qp1OO9BN)Ruf8{%Da?*aSiuaNoX8wWdVPXH=Y!NzF~(U-g1->m%_ACrVfRr*_X&xXeRKCNd`@G={( z{$!oPDekuf@tr3v{6Qx>;VP1WYhuHOgEepUHO2{39hLJCZ(~~0dN=oChDN^E7PP$! zJlkBg?Ma#~ zLzK59e4@hn?bm|-6yHs;sW`S5V=**9iYvly%NLY8yGN}hJr{(yNizD8fv#yUvime+ zcxdpXc-g&hH@#|yEXRL8dhFRvVFFX7hur3`Y!JXRqTdxq*4qi+Q*NP7gFNbMe*!v- zo19*-B7Z2c!E7H4>xhF@4;(q(7=7TN`l^|MW}ssE8UugjSW8B$)uu2XaExYu(m61AR~jnBtjP+!#wsFE(>FZ zkH>+%nZvJ%8Wpg=2f{mBc0w;JkJe&`)@zT2onR?Yp5VmhXK$;(I98XMHv!pWF5sfZ zsLB|USb5QU3IBR~v|7vcZj!A0j{BsCcjiv%?=*ik#XW9$2xVv|?e3%pi85R5%5mnU zpe0UD*c+aU<`0QWheVJOt)2}neW&3PeFC^yWfwKc!<--5eMKKd%}!e2I!kp~aMub8 z?J|CaVT(pZeXTllQ&3#Gj4vaqNDxswonU+zZ)nDU%<%gqj&H7Olgil9`_zd*kn8CvFh^jwzE-pUs?1Z&?<03LYNn#&O zh$_~YoU?&LU;QMLkahAYf1vfyMQk%5l#0K+X5yQ5^!tuWfB&ku`gD!>FnibEgq4+Y zGi*EV{_sRYsEo4kXr@(_dN6S!Sd2)s)037PJE|F=$Ej?cyKZWTFSz5-yJjHytUGg7 zQ5itQ978VkhU*s8LgeihadWz=#UbET5UZ{3RjJiI&|@pWr_i)fETElXOW|NCL-HB> zD!H2&LeV>S!?(2>Dg`+3h=*>bCrVB*nux&Z+L#*^gVhGsV1f`OOOOT(tdVGgq&d}; zOQddDa)4`RC)hHRP%!6iz`^Qn*Rg%cW#yigT=ud!HUxdxd^cA3Dox;S(OBrM~%Jf`S3@i z5U@WMA|6>XFYfIhCd)Vx|DVK-W^?u4r4$q~aXTZX#C>VU9 z$14@asiTL)<9PT=yQw8@RT0MJrtUUurct*ir(J=5TH#y98K$@YYsi4yv25enLPCJi zfiXWpMPIH%Qb~b9EUc#SF0jGs!ataq#{ldooi4x~EX1x4<@J$pNG3kY)+g1^v&|LDR)^tR%MyzTRif{o zE5Cu_T4tii!Kauer-YE@z<22^f7qRS~iq;e9CaJ<`4+pIOmQfO>W zRi;p=v%!v`EKx{f;<6@+VLWdzmrb8L!!f5IV}2!5~2purMaA#Z21t=#sr#2cwmVG2{opF z;XxJU2v%O7*f`@IRI*Qe6Rxl8gq`Z)f%6^zi<(7uunT*%{Mrb`X-G9vPk+Lk9+zqG*9EY-Pr2 z*8~X+(AS`f)K>N>0wvX=^u_j9cX?9WcA{3J^!S5kiY5!(q<`ddB%Dwc@!Gc7_pygO zl&8-Ley^VwI%Ef{#M@nT$I@D)<|t!UWEm~H9idhWcpTU$`24B1BR{)-=Q&U@V@ato zEpkrM4C5d~C19D5|FuQUwpJvq{epmR)r8W<2nP2sSXd(rcA;g^ZDrgIPIa%o<3D}R z@XX=I*>Vq_>$kPLqxByy4?YNVLc^IIk^{a>Yie_$ECd^^#g}m3B3V3y$9|2Xu~1t* z0sK)Ij=-j`wvf?jL9NfPiu=^1S+k9X%op*4ejQ~dB#zhcUdIEYJ{n~AaSa)h#-F1v z$pXR#HIzg#s2T4mTcSw~n4B2waB=G|X-Knf2U8D!Y(ooDPlagL#EVilATum*Og64O zM}g0Ll^dwXa;C&e5vTU1(_ z?%+N?-YDMt1W;d}OpHc~cN!`^nevm|*Tb`ulK|Qm!#W{Nccc@F?6hRg+pOBQ1Jz`| z_y0`KH-1RH9&xO&UUHd3qSIA1i|?nYP9;(Q`g-PM3|)eoOz0;tG@dT|)~cB$ z4run!!RZJRyx`vT`tWsnF~{{>f-r<-^<0L(-MheSyf+wTl`1l&W?OV`v7{!L z$$I~cG{J(Fs;K%+c~@X~(C*SM%cxjcSP;I-x!QzK$9F#Kk98)Rx3uaZl z-4LDI;R$(4dhLiDs3nU17h^1oZ*x?r@u;n)6^WQ|jKt3I*7eZyWQIOQ>ou*HX(`#S zKu$u8GU~;EUtjzBtuE9(2cOa5c++@PN}FWrZcvrCnJp$-E@_$kamn+ zv_+aK&!1-soLfJ3h|ou2go!lLaHCiCQK~plGRITg;zjze?!VMkISqX4M4;v%0ai@4 zpq(`&VI-bAFHf#DeGJa%sXAh&!={@Uz+dkduz7V(|Q5*N_`Ol3PqgGIk zHQ$#Xuec4X+3RB)_GnhZO_2L)Eg|FojTfTj#+{5o2k578FS@M^&2KZDT12W%frG$b zW)8$;y7s1I{HzDf@>;0-TP^(|Lh8BE?iUzDxiaweXngTQ5{pK>!T-6c5$^mf1=_1p zi;W1J?=KaU=2K-q$ML9a+miMs{iq!0=Jg|p&)#jx1@9lWLw>>}60DNjnc7>93m~I? zBCl1KDoXdfj9SUA0{)b}sI~Q5jnoNDh`>@~d&^^3cNV`$_0yFdMIwSXW|X?W-lXO% z3JN4d(%CQJcKG(U=CQp2#`P26-8t;d(3sYu&T|bXyqeqk$&9`$uklRx?ycwN*{_@R zH9Hp2GW?l+x7b&^b!!Or(N7rZ!4qfsh z&p0tGA&*FqdU}FZ)Q`*tpLlNdgL4nroEG*s>A=QTg20S{SR;Xf7g(f{?XX@#pRa6n zwUaI&>%=oFH$65@v-VvzqD9tgq94%mYL`GpjSSQ%2%k|jUfyrx*9^KDSe&H?Hw*3W zD7oJx_R7svZFK|ssRPo21@Pj1iv3*e?zN=sezZz2`&_=qpwDc7Ty)B~8$eW!<859| zHf}%Cjf$}{5?qukISRfrLXS>~fiPm?(TCO`t*(Z|Ii7%ZEj<{JpqvrZ2T7vxobLzX zdEhM)3yBn`XC+N)8KWN+rSGg8>`)lBJAZ7g&gWipA>c#4R4#-T3(4enD7 zee-%nPI-jS5bV&#Jn|(gKcWDQKy3IR(O1)UOYQE_(%Z)>`)oLlb_UnViJ7x)Ir}|ku?mo+P`AFo4h@o ztqVWo#U#$FPeoE$U`b49z{G5H%wdFTYtJ#P7v&X(g3uUgVwCY5tAO}8!;be>@K7qhg|ET!}ekscqCmFg~27AvSn$f3m=v%`@_k)!prMZ3!Rqz@sKhA?!`wZmQ z%wMKQlxnYr&A%Qly6`nH@o)YhoikeI;W=u~xd;3IZRu+>mpRmed^;eGfLXcEKDQ{pVd9S@kVS0~wI{zAbgOYY$I~;DTc`Tr{?g)_-%Jt9c*i=i zFO(Ah4`Alxkt?TK|1@xIJGAlvD-1%Mk6k@e$k6!GDA0ihrZ%l=G9>=Fnc?JOa$JnG zX@LgD(R41+!w<^*XR;FPm$CAE%^} zOW5AK*?lcm)n0V<%Xi-M!>-c@&1!>MHjPlR-zS&q_|7LMqfS(-<^^%|H=t_7cKU($ zeg2gsHDr--W~nezdkLvc=VXchw|m$@Vz_nX+7Q2I6KykwRrw41x+VJk65Jq2e)+eI z>?+HZScad4<=H`&4;Y&z1(72u8JP%V#uPEZf~KDUxiEtpI}y$ezdzQ9?@(A(-1Bn% z9fNWXb{bBD?1Hs_+HGtXU8MgN@~qPLJRJ{oh^6n313a1fk=Wod9_Y8)_;<+vuiO7^ zNZ=IWev5iQD_$nnd6C7JR{RH6C2@AYwUYQ8^S2!fx*E^cL9B0j-&zszSE7;sEJ#`nWjDRU z{>%cj{=n0&t<6_rS2?Wpkqf`3Tb`sMC@xza%({9S0fzVgCt4=|;GF;K4dkrEyQ^v> z<<|2n8YBBxybp-l=Ke*2+E|PI{5FD{@i~15@i=OMm*3uPx7(Mu_%46Q_)qm!{_EZN PkJMWJhpvYFH2Z%57j2FU literal 0 HcmV?d00001 diff --git a/libzip/docs/pic/rom.png b/libzip/docs/pic/rom.png new file mode 100644 index 0000000000000000000000000000000000000000..1777393a1d70ca1fc03d4d7d4fa66cb8c67dae86 GIT binary patch literal 49169 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/config.h" 改为"/data/libzip/config.h"。 如图:![如图](pic/rom1.png) +- 在开发板上配置 [perl](https://gitee.com/han_jin_fei/lycium/tree/master/CItools) 工具和将toybox替换为 [busybox](https://gitee.com/han_jin_fei/lycium/tree/master/CItools) ,[工具下载与操作方法](https://gitee.com/han_jin_fei/lycium/tree/master/CItools#ci-%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA) 。 +- 将libzip文件推送到开发板,在windows命令行进行如下操作 + ``` + hdc_std shell mount -oremount,rw / #修改系统权限为可读写 + hdc_std file send D:\xxx\libzip /data/ #将文件包推入开发板 + hdc_std shell #进入开发板 + #cd /data/libzip #进入libzip目录下, + #chmod -R 777 ./* #给libzip目录下文件的读写权限,执行test命令.txt文件的命令 + #注意需要将库拷贝到/system/lib 或者/system/lib64目录下 + ``` +- 运行测试程序 + 运行测试用例,结果如下图 + ![result](pic/rom.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) +- [如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md) +- [标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta1/zh-cn/device-dev/subsystems/subsys-build-standard-large.md) \ No newline at end of file diff --git "a/libzip/test/test\345\221\275\344\273\244.txt" "b/libzip/test/test\345\221\275\344\273\244.txt" new file mode 100644 index 00000000..d52f11a9 --- /dev/null +++ "b/libzip/test/test\345\221\275\344\273\244.txt" @@ -0,0 +1,162 @@ +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_dir.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_buffer.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_file.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_file_duplicate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_file_twice_duplicate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_file_unchange.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_filep.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_stdin.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_zip_closed.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_zip_deflated.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_zip_deflated2.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_zip_partial_deflated.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_zip_partial_stored.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_from_zip_stored.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_stored.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./add_stored_in_memory.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./buffer-fragment-read.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./buffer-fragment-write.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./cancel_45.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./cancel_90.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./check_torrentzip_fail.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./check_torrentzip_success.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./clone-buffer-add.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./clone-buffer-delete.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./clone-buffer-replace.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./clone-fs-add.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./clone-fs-delete.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./clone-fs-replace.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./cm-default.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./convert_to_torrentzip.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./count_entries.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./create_empty_keep.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-correct-password-aes128.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-correct-password-aes192.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-correct-password-aes256.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-correct-password-pkware-2.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-correct-password-pkware.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-no-password-aes256.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-wrong-password-aes128.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-wrong-password-aes192.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-wrong-password-aes256.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-wrong-password-pkware-2.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./decrypt-wrong-password-pkware.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./delete_add_same.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./delete_invalid.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./delete_last.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./delete_last_keep.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./delete_multiple_last.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./delete_multiple_partial.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./delete_renamed_rename.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encrypt.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encryption-nonrandom-aes128.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encryption-nonrandom-aes192.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encryption-nonrandom-aes256.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encryption-nonrandom-pkware-2.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encryption-nonrandom-pkware.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encryption-remove.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./encryption-stat.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_add.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_add_multiple.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_count.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_count_by_id.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_count_ignore_zip64.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_delete.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_delete_by_id.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_field_align.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_get.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_get_by_id.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_set.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_set_modify_c.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./extra_set_modify_l.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fdopen_ok.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./file_comment_encmismatch.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fopen_multiple.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fopen_multiple_reopen.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fopen_unchanged.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fread.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fseek_deflated.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fseek_fail.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./fseek_ok.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./get_comment.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./junk_at_end.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./junk_at_start.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./name_locate-cp437.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./name_locate-utf8.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./name_locate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_cons_extrabytes.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_empty.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_empty_2.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_extrabytes.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_file_count.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_filename_duplicate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_filename_duplicate_consistency.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_filename_duplicate_empty.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_filename_duplicate_empty_consistency.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_filename_empty.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_incons.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_many_fail.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_many_ok.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_multidisk.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_new_but_exists.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_new_ok.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_nonarchive.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_nosuchfile.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_ok.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_too_short.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_truncate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_zip64_3mf.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./open_zip64_ok.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./preload.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./progress.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./read_seek_read.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./rename_ascii.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./rename_cp437.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./rename_deleted.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./rename_fail.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./rename_ok.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./rename_utf8.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./rename_utf8_encmismatch.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./reopen.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./reopen_partial.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./reopen_partial_rest.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_comment_all.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_comment_localonly.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_comment_removeglobal.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_comment_revert.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_bzip2_to_deflate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_deflate_to_bzip2.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_deflate_to_deflate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_deflate_to_store.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_lzma_no_eos_to_store.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_lzma_to_store.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_store_to_bzip2.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_store_to_deflate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_store_to_lzma.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_store_to_store.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_store_to_xz.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_store_to_zstd.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_unknown.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_xz_to_store.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_compression_zstd_to_store.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_file_dostime.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_file_mtime.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./set_file_mtime_pkware.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_cp437_guess.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_cp437_raw.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_cp437_strict.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_fileorder.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_streamed.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_streamed_zip64.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_utf8_guess.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_utf8_raw.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_utf8_strict.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_utf8_unmarked_strict.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./stat_index_zip64.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./truncate_empty_keep.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./unchange-delete-namelocate.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./utf-8-standardization.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./zip-in-archive-comment.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./zip64_creation.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./zip64_stored_creation.test" +perl ./runtest.in "-v" "--bin-sub-directory" "" "./zipcmp_zip_dir.test" -- Gitee