diff options
author | Martin Matuska <mm@FreeBSD.org> | 2018-10-23 10:58:07 +0000 |
---|---|---|
committer | Martin Matuska <mm@FreeBSD.org> | 2018-10-23 10:58:07 +0000 |
commit | 30bb24b1cb0751cbbb2b53d60e3e4f5bdbe58abb (patch) | |
tree | 9171287ccceff48608b8bd6649eb56d020923550 | |
parent | 21d41b7887a19cdbe00ce6559aafa5b111e3efe2 (diff) | |
download | src-30bb24b1cb0751cbbb2b53d60e3e4f5bdbe58abb.tar.gz src-30bb24b1cb0751cbbb2b53d60e3e4f5bdbe58abb.zip |
Update vendor/libarchive/dist to git d5f35a90a4cb1eeb918213bff9d78e8b0471dc0a
Relevant vendor changes:
PR #1013: Add missing h_base offset when performing absolute seeks in
xar decompression
PR #1061: Add support for extraction of RAR v5 archives
PR #1066: Fix out of bounds read on empty string filename for gnutar, pax
and v7tar
PR #1067: Fix temporary file path buffer overflow in tests
IS #1068: Correctly process and verify integer arguments passed to
bsdcpio and bsdtar
PR #1070: Don't default XAR entry atime/mtime to the current time
Notes
Notes:
svn path=/vendor/libarchive/dist/; revision=339640
46 files changed, 10345 insertions, 41 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3141dff772f6..a5641ade2411 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,6 +179,7 @@ include(CTest) OPTION(ENABLE_NETTLE "Enable use of Nettle" ON) OPTION(ENABLE_OPENSSL "Enable use of OpenSSL" ON) +OPTION(ENABLE_LIBB2 "Enable the use of the system LIBB2 library if found" ON) OPTION(ENABLE_LZ4 "Enable the use of the system LZ4 library if found" ON) OPTION(ENABLE_LZO "Enable the use of the system LZO library if found" OFF) OPTION(ENABLE_LZMA "Enable the use of the system LZMA library if found" ON) @@ -508,6 +509,33 @@ ENDIF(LZO2_FOUND) MARK_AS_ADVANCED(CLEAR LZO2_INCLUDE_DIR) MARK_AS_ADVANCED(CLEAR LZO2_LIBRARY) # +# Find libb2 +# +IF(ENABLE_LIBB2) + IF (LIBB2_INCLUDE_DIR) + # Already in cache, be silent + SET(LIBB2_FIND_QUIETLY TRUE) + ENDIF (LIBB2_INCLUDE_DIR) + + FIND_PATH(LIBB2_INCLUDE_DIR blake2.h) + FIND_LIBRARY(LIBB2_LIBRARY NAMES b2 libb2) + INCLUDE(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBB2 DEFAULT_MSG LIBB2_LIBRARY LIBB2_INCLUDE_DIR) +ELSE(ENABLE_LIBB2) + SET(LIBB2_FOUND FALSE) # Override cached value +ENDIF(ENABLE_LIBB2) +IF(LIBB2_FOUND) + SET(HAVE_LIBB2 1) + SET(HAVE_BLAKE2_H 1) + SET(ARCHIVE_BLAKE2 FALSE) + LIST(APPEND ADDITIONAL_LIBS ${LIBB2_LIBRARY}) + SET(CMAKE_REQUIRED_LIBRARIES ${LIBB2_LIBRARY}) + SET(CMAKE_REQUIRED_INCLUDES ${LIBB2_INCLUDE_DIR}) + CHECK_FUNCTION_EXISTS(blake2sp_init HAVE_LIBB2) +ELSE(LIBB2_FOUND) + SET(ARCHIVE_BLAKE2 TRUE) +ENDIF(LIBB2_FOUND) +# # Find LZ4 # IF(ENABLE_LZ4) @@ -23,6 +23,13 @@ the actual statements in the files are controlling. * The following source files are in the public domain: libarchive/archive_getdate.c +* The following source files are triple-licensed with the ability to choose + from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses: + libarchive/archive_blake2.h + libarchive/archive_blake2_impl.h + libarchive/archive_blake2s_ref.c + libarchive/archive_blake2sp_ref.c + * The build files---including Makefiles, configure scripts, and auxiliary scripts used as part of the compile process---have widely varying licensing terms. Please check individual files before @@ -34,7 +41,7 @@ do use the license below. The varying licensing of the build scripts seems to be an unavoidable mess. -Copyright (c) 2003-2009 <author(s)> +Copyright (c) 2003-2018 <author(s)> All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/Makefile.am b/Makefile.am index 2c3ce999ee7b..80a4e17d1b71 100644 --- a/Makefile.am +++ b/Makefile.am @@ -179,6 +179,7 @@ libarchive_la_SOURCES= \ libarchive/archive_read_support_format_lha.c \ libarchive/archive_read_support_format_mtree.c \ libarchive/archive_read_support_format_rar.c \ + libarchive/archive_read_support_format_rar5.c \ libarchive/archive_read_support_format_raw.c \ libarchive/archive_read_support_format_tar.c \ libarchive/archive_read_support_format_warc.c \ @@ -251,6 +252,12 @@ libarchive_la_SOURCES+= \ libarchive/filter_fork_windows.c endif +if INC_BLAKE2 +libarchive_la_SOURCES+= \ + libarchive/archive_blake2s_ref.c \ + libarchive/archive_blake2sp_ref.c +endif + if INC_LINUX_ACL libarchive_la_SOURCES+= libarchive/archive_disk_acl_linux.c else @@ -485,6 +492,7 @@ libarchive_test_SOURCES= \ libarchive/test/test_read_format_rar_encryption_partially.c \ libarchive/test/test_read_format_rar_encryption_header.c \ libarchive/test/test_read_format_rar_invalid1.c \ + libarchive/test/test_read_format_rar5.c \ libarchive/test/test_read_format_raw.c \ libarchive/test/test_read_format_tar.c \ libarchive/test/test_read_format_tar_concatenated.c \ @@ -1,3 +1,5 @@ +Oct 06, 2018: RAR 5.0 reader + Sep 03, 2018: libarchive 3.3.3 released Jul 19, 2018: Avoid super-linear slowdown on malformed mtree files diff --git a/README.md b/README.md index 1a127bbb2653..df19125f9030 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Currently, the library automatically detects and reads the following fomats: * 7-Zip archives * Microsoft CAB format * LHA and LZH archives - * RAR archives (with some limitations due to RAR's proprietary status) + * RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status) * XAR archives The library also detects and handles any of the following before evaluating the archive: diff --git a/configure.ac b/configure.ac index 17d6641888bf..64f77a673682 100644 --- a/configure.ac +++ b/configure.ac @@ -340,6 +340,16 @@ if test "x$with_bz2lib" != "xno"; then esac fi +AC_ARG_WITH([libb2], + AS_HELP_STRING([--without-libb2], [Don't build support for BLAKE2 through libb2])) + +if test "x$with_libb2" != "xno"; then + AC_CHECK_HEADERS([blake2.h]) + AC_CHECK_LIB(b2,blake2sp_init) +fi + +AM_CONDITIONAL([INC_BLAKE2], [test "x$ac_cv_lib_b2_blake2sp_init" != "xyes"]) + AC_ARG_WITH([iconv], AS_HELP_STRING([--without-iconv], [Don't try to link against iconv])) diff --git a/cpio/cpio.c b/cpio/cpio.c index 4b8ce79296f0..9dddf417a5a5 100644 --- a/cpio/cpio.c +++ b/cpio/cpio.c @@ -134,8 +134,9 @@ main(int argc, char *argv[]) struct cpio _cpio; /* Allocated on stack. */ struct cpio *cpio; const char *errmsg; + char *tptr; int uid, gid; - int opt; + int opt, t; cpio = &_cpio; memset(cpio, 0, sizeof(*cpio)); @@ -204,9 +205,15 @@ main(int argc, char *argv[]) cpio->add_filter = opt; break; case 'C': /* NetBSD/OpenBSD */ - cpio->bytes_per_block = atoi(cpio->argument); - if (cpio->bytes_per_block <= 0) - lafe_errc(1, 0, "Invalid blocksize %s", cpio->argument); + errno = 0; + tptr = NULL; + t = (int)strtol(cpio->argument, &tptr, 10); + if (errno || t <= 0 || *(cpio->argument) == '\0' || + tptr == NULL || *tptr != '\0') { + lafe_errc(1, 0, "Invalid blocksize: %s", + cpio->argument); + } + cpio->bytes_per_block = t; break; case 'c': /* POSIX 1997 */ cpio->format = "odc"; diff --git a/libarchive/CMakeLists.txt b/libarchive/CMakeLists.txt index 82dd56c9d7d6..79719773cd50 100644 --- a/libarchive/CMakeLists.txt +++ b/libarchive/CMakeLists.txt @@ -100,6 +100,7 @@ SET(libarchive_SOURCES archive_read_support_format_lha.c archive_read_support_format_mtree.c archive_read_support_format_rar.c + archive_read_support_format_rar5.c archive_read_support_format_raw.c archive_read_support_format_tar.c archive_read_support_format_warc.c @@ -215,6 +216,11 @@ IF(WIN32 AND NOT CYGWIN) LIST(APPEND libarchive_SOURCES filter_fork_windows.c) ENDIF(WIN32 AND NOT CYGWIN) +IF(ARCHIVE_BLAKE2) + LIST(APPEND libarchive_SOURCES archive_blake2sp_ref.c) + LIST(APPEND libarchive_SOURCES archive_blake2s_ref.c) +ENDIF(ARCHIVE_BLAKE2) + IF(ARCHIVE_ACL_DARWIN) LIST(APPEND libarchive_SOURCES archive_disk_acl_darwin.c) ELSEIF(ARCHIVE_ACL_FREEBSD) diff --git a/libarchive/archive.h b/libarchive/archive.h index cd65cd284b62..438ce4680a9e 100644 --- a/libarchive/archive.h +++ b/libarchive/archive.h @@ -338,6 +338,7 @@ typedef const char *archive_passphrase_callback(struct archive *, #define ARCHIVE_FORMAT_LHA 0xB0000 #define ARCHIVE_FORMAT_CAB 0xC0000 #define ARCHIVE_FORMAT_RAR 0xD0000 +#define ARCHIVE_FORMAT_RAR_V5 (ARCHIVE_FORMAT_RAR | 1) #define ARCHIVE_FORMAT_7ZIP 0xE0000 #define ARCHIVE_FORMAT_WARC 0xF0000 @@ -449,6 +450,7 @@ __LA_DECL int archive_read_support_format_iso9660(struct archive *); __LA_DECL int archive_read_support_format_lha(struct archive *); __LA_DECL int archive_read_support_format_mtree(struct archive *); __LA_DECL int archive_read_support_format_rar(struct archive *); +__LA_DECL int archive_read_support_format_rar5(struct archive *); __LA_DECL int archive_read_support_format_raw(struct archive *); __LA_DECL int archive_read_support_format_tar(struct archive *); __LA_DECL int archive_read_support_format_warc(struct archive *); diff --git a/libarchive/archive_blake2.h b/libarchive/archive_blake2.h new file mode 100644 index 000000000000..337be194654e --- /dev/null +++ b/libarchive/archive_blake2.h @@ -0,0 +1,194 @@ +/* + BLAKE2 reference source code package - reference C implementations + + Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#ifndef BLAKE2_H +#define BLAKE2_H + +#include <stddef.h> +#include <stdint.h> + +#if defined(_MSC_VER) +#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop)) +#else +#define BLAKE2_PACKED(x) x __attribute__((packed)) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + + enum blake2s_constant + { + BLAKE2S_BLOCKBYTES = 64, + BLAKE2S_OUTBYTES = 32, + BLAKE2S_KEYBYTES = 32, + BLAKE2S_SALTBYTES = 8, + BLAKE2S_PERSONALBYTES = 8 + }; + + enum blake2b_constant + { + BLAKE2B_BLOCKBYTES = 128, + BLAKE2B_OUTBYTES = 64, + BLAKE2B_KEYBYTES = 64, + BLAKE2B_SALTBYTES = 16, + BLAKE2B_PERSONALBYTES = 16 + }; + + typedef struct blake2s_state__ + { + uint32_t h[8]; + uint32_t t[2]; + uint32_t f[2]; + uint8_t buf[BLAKE2S_BLOCKBYTES]; + size_t buflen; + size_t outlen; + uint8_t last_node; + } blake2s_state; + + typedef struct blake2b_state__ + { + uint64_t h[8]; + uint64_t t[2]; + uint64_t f[2]; + uint8_t buf[BLAKE2B_BLOCKBYTES]; + size_t buflen; + size_t outlen; + uint8_t last_node; + } blake2b_state; + + typedef struct blake2sp_state__ + { + blake2s_state S[8][1]; + blake2s_state R[1]; + uint8_t buf[8 * BLAKE2S_BLOCKBYTES]; + size_t buflen; + size_t outlen; + } blake2sp_state; + + typedef struct blake2bp_state__ + { + blake2b_state S[4][1]; + blake2b_state R[1]; + uint8_t buf[4 * BLAKE2B_BLOCKBYTES]; + size_t buflen; + size_t outlen; + } blake2bp_state; + + BLAKE2_PACKED(struct blake2s_param__ + { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint32_t node_offset; /* 12 */ + uint16_t xof_length; /* 14 */ + uint8_t node_depth; /* 15 */ + uint8_t inner_length; /* 16 */ + /* uint8_t reserved[0]; */ + uint8_t salt[BLAKE2S_SALTBYTES]; /* 24 */ + uint8_t personal[BLAKE2S_PERSONALBYTES]; /* 32 */ + }); + + typedef struct blake2s_param__ blake2s_param; + + BLAKE2_PACKED(struct blake2b_param__ + { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint32_t node_offset; /* 12 */ + uint32_t xof_length; /* 16 */ + uint8_t node_depth; /* 17 */ + uint8_t inner_length; /* 18 */ + uint8_t reserved[14]; /* 32 */ + uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ + uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ + }); + + typedef struct blake2b_param__ blake2b_param; + + typedef struct blake2xs_state__ + { + blake2s_state S[1]; + blake2s_param P[1]; + } blake2xs_state; + + typedef struct blake2xb_state__ + { + blake2b_state S[1]; + blake2b_param P[1]; + } blake2xb_state; + + /* Padded structs result in a compile-time error */ + enum { + BLAKE2_DUMMY_1 = 1/(sizeof(blake2s_param) == BLAKE2S_OUTBYTES), + BLAKE2_DUMMY_2 = 1/(sizeof(blake2b_param) == BLAKE2B_OUTBYTES) + }; + + /* Streaming API */ + int blake2s_init( blake2s_state *S, size_t outlen ); + int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ); + int blake2s_init_param( blake2s_state *S, const blake2s_param *P ); + int blake2s_update( blake2s_state *S, const void *in, size_t inlen ); + int blake2s_final( blake2s_state *S, void *out, size_t outlen ); + + int blake2b_init( blake2b_state *S, size_t outlen ); + int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ); + int blake2b_init_param( blake2b_state *S, const blake2b_param *P ); + int blake2b_update( blake2b_state *S, const void *in, size_t inlen ); + int blake2b_final( blake2b_state *S, void *out, size_t outlen ); + + int blake2sp_init( blake2sp_state *S, size_t outlen ); + int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ); + int blake2sp_update( blake2sp_state *S, const void *in, size_t inlen ); + int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ); + + int blake2bp_init( blake2bp_state *S, size_t outlen ); + int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen ); + int blake2bp_update( blake2bp_state *S, const void *in, size_t inlen ); + int blake2bp_final( blake2bp_state *S, void *out, size_t outlen ); + + /* Variable output length API */ + int blake2xs_init( blake2xs_state *S, const size_t outlen ); + int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen ); + int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen ); + int blake2xs_final(blake2xs_state *S, void *out, size_t outlen); + + int blake2xb_init( blake2xb_state *S, const size_t outlen ); + int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen ); + int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen ); + int blake2xb_final(blake2xb_state *S, void *out, size_t outlen); + + /* Simple API */ + int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + + int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + + int blake2xs( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + int blake2xb( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + + /* This is simply an alias for blake2b */ + int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/libarchive/archive_blake2_impl.h b/libarchive/archive_blake2_impl.h new file mode 100644 index 000000000000..c1df82e0c95d --- /dev/null +++ b/libarchive/archive_blake2_impl.h @@ -0,0 +1,160 @@ +/* + BLAKE2 reference source code package - reference C implementations + + Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ +#ifndef BLAKE2_IMPL_H +#define BLAKE2_IMPL_H + +#include <stdint.h> +#include <string.h> + +#if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) + #if defined(_MSC_VER) + #define BLAKE2_INLINE __inline + #elif defined(__GNUC__) + #define BLAKE2_INLINE __inline__ + #else + #define BLAKE2_INLINE + #endif +#else + #define BLAKE2_INLINE inline +#endif + +static BLAKE2_INLINE uint32_t load32( const void *src ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + uint32_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = ( const uint8_t * )src; + return (( uint32_t )( p[0] ) << 0) | + (( uint32_t )( p[1] ) << 8) | + (( uint32_t )( p[2] ) << 16) | + (( uint32_t )( p[3] ) << 24) ; +#endif +} + +static BLAKE2_INLINE uint64_t load64( const void *src ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + uint64_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = ( const uint8_t * )src; + return (( uint64_t )( p[0] ) << 0) | + (( uint64_t )( p[1] ) << 8) | + (( uint64_t )( p[2] ) << 16) | + (( uint64_t )( p[3] ) << 24) | + (( uint64_t )( p[4] ) << 32) | + (( uint64_t )( p[5] ) << 40) | + (( uint64_t )( p[6] ) << 48) | + (( uint64_t )( p[7] ) << 56) ; +#endif +} + +static BLAKE2_INLINE uint16_t load16( const void *src ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + uint16_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = ( const uint8_t * )src; + return ( uint16_t )((( uint32_t )( p[0] ) << 0) | + (( uint32_t )( p[1] ) << 8)); +#endif +} + +static BLAKE2_INLINE void store16( void *dst, uint16_t w ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = ( uint8_t * )dst; + *p++ = ( uint8_t )w; w >>= 8; + *p++ = ( uint8_t )w; +#endif +} + +static BLAKE2_INLINE void store32( void *dst, uint32_t w ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = ( uint8_t * )dst; + p[0] = (uint8_t)(w >> 0); + p[1] = (uint8_t)(w >> 8); + p[2] = (uint8_t)(w >> 16); + p[3] = (uint8_t)(w >> 24); +#endif +} + +static BLAKE2_INLINE void store64( void *dst, uint64_t w ) +{ +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = ( uint8_t * )dst; + p[0] = (uint8_t)(w >> 0); + p[1] = (uint8_t)(w >> 8); + p[2] = (uint8_t)(w >> 16); + p[3] = (uint8_t)(w >> 24); + p[4] = (uint8_t)(w >> 32); + p[5] = (uint8_t)(w >> 40); + p[6] = (uint8_t)(w >> 48); + p[7] = (uint8_t)(w >> 56); +#endif +} + +static BLAKE2_INLINE uint64_t load48( const void *src ) +{ + const uint8_t *p = ( const uint8_t * )src; + return (( uint64_t )( p[0] ) << 0) | + (( uint64_t )( p[1] ) << 8) | + (( uint64_t )( p[2] ) << 16) | + (( uint64_t )( p[3] ) << 24) | + (( uint64_t )( p[4] ) << 32) | + (( uint64_t )( p[5] ) << 40) ; +} + +static BLAKE2_INLINE void store48( void *dst, uint64_t w ) +{ + uint8_t *p = ( uint8_t * )dst; + p[0] = (uint8_t)(w >> 0); + p[1] = (uint8_t)(w >> 8); + p[2] = (uint8_t)(w >> 16); + p[3] = (uint8_t)(w >> 24); + p[4] = (uint8_t)(w >> 32); + p[5] = (uint8_t)(w >> 40); +} + +static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c ) +{ + return ( w >> c ) | ( w << ( 32 - c ) ); +} + +static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c ) +{ + return ( w >> c ) | ( w << ( 64 - c ) ); +} + +/* prevents compiler optimizing out memset() */ +static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n) +{ + static void *(*const volatile memset_v)(void *, int, size_t) = &memset; + memset_v(v, 0, n); +} + +#endif diff --git a/libarchive/archive_blake2s_ref.c b/libarchive/archive_blake2s_ref.c new file mode 100644 index 000000000000..d92ffd0fc56a --- /dev/null +++ b/libarchive/archive_blake2s_ref.c @@ -0,0 +1,367 @@ +/* + BLAKE2 reference source code package - reference C implementations + + Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ + +#include <stdint.h> +#include <string.h> +#include <stdio.h> + +#include "archive_blake2.h" +#include "archive_blake2_impl.h" + +static const uint32_t blake2s_IV[8] = +{ + 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, + 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL +}; + +static const uint8_t blake2s_sigma[10][16] = +{ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , +}; + +static void blake2s_set_lastnode( blake2s_state *S ) +{ + S->f[1] = (uint32_t)-1; +} + +/* Some helper functions, not necessarily useful */ +static int blake2s_is_lastblock( const blake2s_state *S ) +{ + return S->f[0] != 0; +} + +static void blake2s_set_lastblock( blake2s_state *S ) +{ + if( S->last_node ) blake2s_set_lastnode( S ); + + S->f[0] = (uint32_t)-1; +} + +static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc ) +{ + S->t[0] += inc; + S->t[1] += ( S->t[0] < inc ); +} + +static void blake2s_init0( blake2s_state *S ) +{ + size_t i; + memset( S, 0, sizeof( blake2s_state ) ); + + for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i]; +} + +/* init2 xors IV with input parameter block */ +int blake2s_init_param( blake2s_state *S, const blake2s_param *P ) +{ + const unsigned char *p = ( const unsigned char * )( P ); + size_t i; + + blake2s_init0( S ); + + /* IV XOR ParamBlock */ + for( i = 0; i < 8; ++i ) + S->h[i] ^= load32( &p[i * 4] ); + + S->outlen = P->digest_length; + return 0; +} + + +/* Sequential blake2s initialization */ +int blake2s_init( blake2s_state *S, size_t outlen ) +{ + blake2s_param P[1]; + + /* Move interval verification here? */ + if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; + + P->digest_length = (uint8_t)outlen; + P->key_length = 0; + P->fanout = 1; + P->depth = 1; + store32( &P->leaf_length, 0 ); + store32( &P->node_offset, 0 ); + store16( &P->xof_length, 0 ); + P->node_depth = 0; + P->inner_length = 0; + /* memset(P->reserved, 0, sizeof(P->reserved) ); */ + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + return blake2s_init_param( S, P ); +} + +int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ) +{ + blake2s_param P[1]; + + if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1; + + if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; + + P->digest_length = (uint8_t)outlen; + P->key_length = (uint8_t)keylen; + P->fanout = 1; + P->depth = 1; + store32( &P->leaf_length, 0 ); + store32( &P->node_offset, 0 ); + store16( &P->xof_length, 0 ); + P->node_depth = 0; + P->inner_length = 0; + /* memset(P->reserved, 0, sizeof(P->reserved) ); */ + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + + if( blake2s_init_param( S, P ) < 0 ) return -1; + + { + uint8_t block[BLAKE2S_BLOCKBYTES]; + memset( block, 0, BLAKE2S_BLOCKBYTES ); + memcpy( block, key, keylen ); + blake2s_update( S, block, BLAKE2S_BLOCKBYTES ); + secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ + } + return 0; +} + +#define G(r,i,a,b,c,d) \ + do { \ + a = a + b + m[blake2s_sigma[r][2*i+0]]; \ + d = rotr32(d ^ a, 16); \ + c = c + d; \ + b = rotr32(b ^ c, 12); \ + a = a + b + m[blake2s_sigma[r][2*i+1]]; \ + d = rotr32(d ^ a, 8); \ + c = c + d; \ + b = rotr32(b ^ c, 7); \ + } while(0) + +#define ROUND(r) \ + do { \ + G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \ + G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \ + G(r,2,v[ 2],v[ 6],v[10],v[14]); \ + G(r,3,v[ 3],v[ 7],v[11],v[15]); \ + G(r,4,v[ 0],v[ 5],v[10],v[15]); \ + G(r,5,v[ 1],v[ 6],v[11],v[12]); \ + G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \ + G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \ + } while(0) + +static void blake2s_compress( blake2s_state *S, const uint8_t in[BLAKE2S_BLOCKBYTES] ) +{ + uint32_t m[16]; + uint32_t v[16]; + size_t i; + + for( i = 0; i < 16; ++i ) { + m[i] = load32( in + i * sizeof( m[i] ) ); + } + + for( i = 0; i < 8; ++i ) { + v[i] = S->h[i]; + } + + v[ 8] = blake2s_IV[0]; + v[ 9] = blake2s_IV[1]; + v[10] = blake2s_IV[2]; + v[11] = blake2s_IV[3]; + v[12] = S->t[0] ^ blake2s_IV[4]; + v[13] = S->t[1] ^ blake2s_IV[5]; + v[14] = S->f[0] ^ blake2s_IV[6]; + v[15] = S->f[1] ^ blake2s_IV[7]; + + ROUND( 0 ); + ROUND( 1 ); + ROUND( 2 ); + ROUND( 3 ); + ROUND( 4 ); + ROUND( 5 ); + ROUND( 6 ); + ROUND( 7 ); + ROUND( 8 ); + ROUND( 9 ); + + for( i = 0; i < 8; ++i ) { + S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; + } +} + +#undef G +#undef ROUND + +int blake2s_update( blake2s_state *S, const void *pin, size_t inlen ) +{ + const unsigned char * in = (const unsigned char *)pin; + if( inlen > 0 ) + { + size_t left = S->buflen; + size_t fill = BLAKE2S_BLOCKBYTES - left; + if( inlen > fill ) + { + S->buflen = 0; + memcpy( S->buf + left, in, fill ); /* Fill buffer */ + blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); + blake2s_compress( S, S->buf ); /* Compress */ + in += fill; inlen -= fill; + while(inlen > BLAKE2S_BLOCKBYTES) { + blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES); + blake2s_compress( S, in ); + in += BLAKE2S_BLOCKBYTES; + inlen -= BLAKE2S_BLOCKBYTES; + } + } + memcpy( S->buf + S->buflen, in, inlen ); + S->buflen += inlen; + } + return 0; +} + +int blake2s_final( blake2s_state *S, void *out, size_t outlen ) +{ + uint8_t buffer[BLAKE2S_OUTBYTES] = {0}; + size_t i; + + if( out == NULL || outlen < S->outlen ) + return -1; + + if( blake2s_is_lastblock( S ) ) + return -1; + + blake2s_increment_counter( S, ( uint32_t )S->buflen ); + blake2s_set_lastblock( S ); + memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */ + blake2s_compress( S, S->buf ); + + for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */ + store32( buffer + sizeof( S->h[i] ) * i, S->h[i] ); + + memcpy( out, buffer, outlen ); + secure_zero_memory(buffer, sizeof(buffer)); + return 0; +} + +int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) +{ + blake2s_state S[1]; + + /* Verify parameters */ + if ( NULL == in && inlen > 0 ) return -1; + + if ( NULL == out ) return -1; + + if ( NULL == key && keylen > 0) return -1; + + if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; + + if( keylen > BLAKE2S_KEYBYTES ) return -1; + + if( keylen > 0 ) + { + if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1; + } + else + { + if( blake2s_init( S, outlen ) < 0 ) return -1; + } + + blake2s_update( S, ( const uint8_t * )in, inlen ); + blake2s_final( S, out, outlen ); + return 0; +} + +#if defined(SUPERCOP) +int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen ) +{ + return blake2s( out, BLAKE2S_OUTBYTES, in, inlen, NULL, 0 ); +} +#endif + +#if defined(BLAKE2S_SELFTEST) +#include <string.h> +#include "blake2-kat.h" +int main( void ) +{ + uint8_t key[BLAKE2S_KEYBYTES]; + uint8_t buf[BLAKE2_KAT_LENGTH]; + size_t i, step; + + for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) + key[i] = ( uint8_t )i; + + for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) + buf[i] = ( uint8_t )i; + + /* Test simple API */ + for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) + { + uint8_t hash[BLAKE2S_OUTBYTES]; + blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); + + if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) ) + { + goto fail; + } + } + + /* Test streaming API */ + for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { + for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { + uint8_t hash[BLAKE2S_OUTBYTES]; + blake2s_state S; + uint8_t * p = buf; + size_t mlen = i; + int err = 0; + + if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { + goto fail; + } + + while (mlen >= step) { + if ( (err = blake2s_update(&S, p, step)) < 0 ) { + goto fail; + } + mlen -= step; + p += step; + } + if ( (err = blake2s_update(&S, p, mlen)) < 0) { + goto fail; + } + if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { + goto fail; + } + + if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) { + goto fail; + } + } + } + + puts( "ok" ); + return 0; +fail: + puts("error"); + return -1; +} +#endif diff --git a/libarchive/archive_blake2sp_ref.c b/libarchive/archive_blake2sp_ref.c new file mode 100644 index 000000000000..90a385775d78 --- /dev/null +++ b/libarchive/archive_blake2sp_ref.c @@ -0,0 +1,359 @@ +/* + BLAKE2 reference source code package - reference C implementations + + Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the + terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at + your option. The terms of these licenses can be found at: + + - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + - OpenSSL license : https://www.openssl.org/source/license.html + - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + + More information about the BLAKE2 hash function can be found at + https://blake2.net. +*/ + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#if defined(_OPENMP) +#include <omp.h> +#endif + +#include "archive_blake2.h" +#include "archive_blake2_impl.h" + +#define PARALLELISM_DEGREE 8 + +/* + blake2sp_init_param defaults to setting the expecting output length + from the digest_length parameter block field. + + In some cases, however, we do not want this, as the output length + of these instances is given by inner_length instead. +*/ +static int blake2sp_init_leaf_param( blake2s_state *S, const blake2s_param *P ) +{ + int err = blake2s_init_param(S, P); + S->outlen = P->inner_length; + return err; +} + +static int blake2sp_init_leaf( blake2s_state *S, size_t outlen, size_t keylen, uint32_t offset ) +{ + blake2s_param P[1]; + P->digest_length = (uint8_t)outlen; + P->key_length = (uint8_t)keylen; + P->fanout = PARALLELISM_DEGREE; + P->depth = 2; + store32( &P->leaf_length, 0 ); + store32( &P->node_offset, offset ); + store16( &P->xof_length, 0 ); + P->node_depth = 0; + P->inner_length = BLAKE2S_OUTBYTES; + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + return blake2sp_init_leaf_param( S, P ); +} + +static int blake2sp_init_root( blake2s_state *S, size_t outlen, size_t keylen ) +{ + blake2s_param P[1]; + P->digest_length = (uint8_t)outlen; + P->key_length = (uint8_t)keylen; + P->fanout = PARALLELISM_DEGREE; + P->depth = 2; + store32( &P->leaf_length, 0 ); + store32( &P->node_offset, 0 ); + store16( &P->xof_length, 0 ); + P->node_depth = 1; + P->inner_length = BLAKE2S_OUTBYTES; + memset( P->salt, 0, sizeof( P->salt ) ); + memset( P->personal, 0, sizeof( P->personal ) ); + return blake2s_init_param( S, P ); +} + + +int blake2sp_init( blake2sp_state *S, size_t outlen ) +{ + size_t i; + + if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; + + memset( S->buf, 0, sizeof( S->buf ) ); + S->buflen = 0; + S->outlen = outlen; + + if( blake2sp_init_root( S->R, outlen, 0 ) < 0 ) + return -1; + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + if( blake2sp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1; + + S->R->last_node = 1; + S->S[PARALLELISM_DEGREE - 1]->last_node = 1; + return 0; +} + +int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ) +{ + size_t i; + + if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; + + if( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1; + + memset( S->buf, 0, sizeof( S->buf ) ); + S->buflen = 0; + S->outlen = outlen; + + if( blake2sp_init_root( S->R, outlen, keylen ) < 0 ) + return -1; + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + if( blake2sp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1; + + S->R->last_node = 1; + S->S[PARALLELISM_DEGREE - 1]->last_node = 1; + { + uint8_t block[BLAKE2S_BLOCKBYTES]; + memset( block, 0, BLAKE2S_BLOCKBYTES ); + memcpy( block, key, keylen ); + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + blake2s_update( S->S[i], block, BLAKE2S_BLOCKBYTES ); + + secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ + } + return 0; +} + + +int blake2sp_update( blake2sp_state *S, const void *pin, size_t inlen ) +{ + const unsigned char * in = (const unsigned char *)pin; + size_t left = S->buflen; + size_t fill = sizeof( S->buf ) - left; + size_t i; + + if( left && inlen >= fill ) + { + memcpy( S->buf + left, in, fill ); + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); + + in += fill; + inlen -= fill; + left = 0; + } + +#if defined(_OPENMP) + #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE) +#else + for( i = 0; i < PARALLELISM_DEGREE; ++i ) +#endif + { +#if defined(_OPENMP) + size_t i = omp_get_thread_num(); +#endif + size_t inlen__ = inlen; + const unsigned char *in__ = ( const unsigned char * )in; + in__ += i * BLAKE2S_BLOCKBYTES; + + while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) + { + blake2s_update( S->S[i], in__, BLAKE2S_BLOCKBYTES ); + in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; + inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; + } + } + + in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ); + inlen %= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; + + if( inlen > 0 ) + memcpy( S->buf + left, in, inlen ); + + S->buflen = left + inlen; + return 0; +} + + +int blake2sp_final( blake2sp_state *S, void *out, size_t outlen ) +{ + uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; + size_t i; + + if(out == NULL || outlen < S->outlen) { + return -1; + } + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + { + if( S->buflen > i * BLAKE2S_BLOCKBYTES ) + { + size_t left = S->buflen - i * BLAKE2S_BLOCKBYTES; + + if( left > BLAKE2S_BLOCKBYTES ) left = BLAKE2S_BLOCKBYTES; + + blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, left ); + } + + blake2s_final( S->S[i], hash[i], BLAKE2S_OUTBYTES ); + } + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + blake2s_update( S->R, hash[i], BLAKE2S_OUTBYTES ); + + return blake2s_final( S->R, out, S->outlen ); +} + + +int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ) +{ + uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES]; + blake2s_state S[PARALLELISM_DEGREE][1]; + blake2s_state FS[1]; + size_t i; + + /* Verify parameters */ + if ( NULL == in && inlen > 0 ) return -1; + + if ( NULL == out ) return -1; + + if ( NULL == key && keylen > 0) return -1; + + if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1; + + if( keylen > BLAKE2S_KEYBYTES ) return -1; + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + if( blake2sp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1; + + S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */ + + if( keylen > 0 ) + { + uint8_t block[BLAKE2S_BLOCKBYTES]; + memset( block, 0, BLAKE2S_BLOCKBYTES ); + memcpy( block, key, keylen ); + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + blake2s_update( S[i], block, BLAKE2S_BLOCKBYTES ); + + secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */ + } + +#if defined(_OPENMP) + #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE) +#else + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) +#endif + { +#if defined(_OPENMP) + size_t i = omp_get_thread_num(); +#endif + size_t inlen__ = inlen; + const unsigned char *in__ = ( const unsigned char * )in; + in__ += i * BLAKE2S_BLOCKBYTES; + + while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) + { + blake2s_update( S[i], in__, BLAKE2S_BLOCKBYTES ); + in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; + inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; + } + + if( inlen__ > i * BLAKE2S_BLOCKBYTES ) + { + const size_t left = inlen__ - i * BLAKE2S_BLOCKBYTES; + const size_t len = left <= BLAKE2S_BLOCKBYTES ? left : BLAKE2S_BLOCKBYTES; + blake2s_update( S[i], in__, len ); + } + + blake2s_final( S[i], hash[i], BLAKE2S_OUTBYTES ); + } + + if( blake2sp_init_root( FS, outlen, keylen ) < 0 ) + return -1; + + FS->last_node = 1; + + for( i = 0; i < PARALLELISM_DEGREE; ++i ) + blake2s_update( FS, hash[i], BLAKE2S_OUTBYTES ); + + return blake2s_final( FS, out, outlen ); +} + + + +#if defined(BLAKE2SP_SELFTEST) +#include <string.h> +#include "blake2-kat.h" +int main( void ) +{ + uint8_t key[BLAKE2S_KEYBYTES]; + uint8_t buf[BLAKE2_KAT_LENGTH]; + size_t i, step; + + for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) + key[i] = ( uint8_t )i; + + for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) + buf[i] = ( uint8_t )i; + + /* Test simple API */ + for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) + { + uint8_t hash[BLAKE2S_OUTBYTES]; + blake2sp( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES ); + + if( 0 != memcmp( hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES ) ) + { + goto fail; + } + } + + /* Test streaming API */ + for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) { + for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) { + uint8_t hash[BLAKE2S_OUTBYTES]; + blake2sp_state S; + uint8_t * p = buf; + size_t mlen = i; + int err = 0; + + if( (err = blake2sp_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) { + goto fail; + } + + while (mlen >= step) { + if ( (err = blake2sp_update(&S, p, step)) < 0 ) { + goto fail; + } + mlen -= step; + p += step; + } + if ( (err = blake2sp_update(&S, p, mlen)) < 0) { + goto fail; + } + if ( (err = blake2sp_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) { + goto fail; + } + + if (0 != memcmp(hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES)) { + goto fail; + } + } + } + + puts( "ok" ); + return 0; +fail: + puts("error"); + return -1; +} +#endif diff --git a/libarchive/archive_read_support_format_all.c b/libarchive/archive_read_support_format_all.c index 2127ebd33538..dea558bbfcc2 100644 --- a/libarchive/archive_read_support_format_all.c +++ b/libarchive/archive_read_support_format_all.c @@ -72,6 +72,7 @@ archive_read_support_format_all(struct archive *a) archive_read_support_format_7zip(a); archive_read_support_format_cab(a); archive_read_support_format_rar(a); + archive_read_support_format_rar5(a); archive_read_support_format_iso9660(a); /* Seek is really bad, since it forces the read-ahead * logic to discard buffered data. */ diff --git a/libarchive/archive_read_support_format_by_code.c b/libarchive/archive_read_support_format_by_code.c index 084563f4310e..034353d78f63 100644 --- a/libarchive/archive_read_support_format_by_code.c +++ b/libarchive/archive_read_support_format_by_code.c @@ -60,6 +60,9 @@ archive_read_support_format_by_code(struct archive *a, int format_code) case ARCHIVE_FORMAT_RAR: return archive_read_support_format_rar(a); break; + case ARCHIVE_FORMAT_RAR_V5: + return archive_read_support_format_rar5(a); + break; case ARCHIVE_FORMAT_TAR: return archive_read_support_format_tar(a); break; diff --git a/libarchive/archive_read_support_format_rar5.c b/libarchive/archive_read_support_format_rar5.c new file mode 100644 index 000000000000..9f121a1bed84 --- /dev/null +++ b/libarchive/archive_read_support_format_rar5.c @@ -0,0 +1,3457 @@ +/*- +* Copyright (c) 2018 Grzegorz Antoniak (http://antoniak.org) +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "archive_platform.h" + +#ifdef HAVE_ERRNO_H +#include <errno.h> +#endif +#include <time.h> +#ifdef HAVE_ZLIB_H +#include <zlib.h> /* crc32 */ +#endif + +#include "archive.h" +#ifndef HAVE_ZLIB_H +#include "archive_crc32.h" +#endif + +#include "archive_entry.h" +#include "archive_entry_locale.h" +#include "archive_ppmd7_private.h" +#include "archive_entry_private.h" + +#ifdef HAVE_BLAKE2_H +#include <blake2.h> +#else +#include "archive_blake2.h" +#endif + +/*#define CHECK_CRC_ON_SOLID_SKIP*/ +/*#define DONT_FAIL_ON_CRC_ERROR*/ +/*#define DEBUG*/ + +#define rar5_min(a, b) (((a) > (b)) ? (b) : (a)) +#define rar5_max(a, b) (((a) > (b)) ? (a) : (b)) +#define rar5_countof(X) ((const ssize_t) (sizeof(X) / sizeof(*X))) + +#if defined DEBUG +#define DEBUG_CODE if(1) +#else +#define DEBUG_CODE if(0) +#endif + +/* Real RAR5 magic number is: + * + * 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x01, 0x00 + * "Rar!→•☺·\x00" + * + * It's stored in `rar5_signature` after XOR'ing it with 0xA1, because I don't + * want to put this magic sequence in each binary that uses libarchive, so + * applications that scan through the file for this marker won't trigger on + * this "false" one. + * + * The array itself is decrypted in `rar5_init` function. */ + +unsigned char rar5_signature[] = { 243, 192, 211, 128, 187, 166, 160, 161 }; +const ssize_t rar5_signature_size = sizeof(rar5_signature); +const size_t g_unpack_buf_chunk_size = 1024; +const size_t g_unpack_window_size = 0x20000; + +struct file_header { + ssize_t bytes_remaining; + ssize_t unpacked_size; + int64_t last_offset; /* Used in sanity checks. */ + int64_t last_size; /* Used in sanity checks. */ + + uint8_t solid : 1; /* Is this a solid stream? */ + uint8_t service : 1; /* Is this file a service data? */ + + /* Optional time fields. */ + uint64_t e_mtime; + uint64_t e_ctime; + uint64_t e_atime; + uint32_t e_unix_ns; + + /* Optional hash fields. */ + uint32_t stored_crc32; + uint32_t calculated_crc32; + uint8_t blake2sp[32]; + blake2sp_state b2state; + char has_blake2; +}; + +enum FILTER_TYPE { + FILTER_DELTA = 0, /* Generic pattern. */ + FILTER_E8 = 1, /* Intel x86 code. */ + FILTER_E8E9 = 2, /* Intel x86 code. */ + FILTER_ARM = 3, /* ARM code. */ + FILTER_AUDIO = 4, /* Audio filter, not used in RARv5. */ + FILTER_RGB = 5, /* Color palette, not used in RARv5. */ + FILTER_ITANIUM = 6, /* Intel's Itanium, not used in RARv5. */ + FILTER_PPM = 7, /* Predictive pattern matching, not used in RARv5. */ + FILTER_NONE = 8, +}; + +struct filter_info { + int type; + int channels; + int pos_r; + + int64_t block_start; + ssize_t block_length; + uint16_t width; +}; + +struct data_ready { + char used; + const uint8_t* buf; + size_t size; + int64_t offset; +}; + +struct cdeque { + uint16_t beg_pos; + uint16_t end_pos; + uint16_t cap_mask; + uint16_t size; + size_t* arr; +}; + +struct decode_table { + uint32_t size; + int32_t decode_len[16]; + uint32_t decode_pos[16]; + uint32_t quick_bits; + uint8_t quick_len[1 << 10]; + uint16_t quick_num[1 << 10]; + uint16_t decode_num[306]; +}; + +struct comp_state { + /* Flag used to specify if unpacker needs to reinitialize the uncompression + * context. */ + uint8_t initialized : 1; + + /* Flag used when applying filters. */ + uint8_t all_filters_applied : 1; + + /* Flag used to skip file context reinitialization, used when unpacker is + * skipping through different multivolume archives. */ + uint8_t switch_multivolume : 1; + + /* Flag used to specify if unpacker has processed the whole data block or + * just a part of it. */ + uint8_t block_parsing_finished : 1; + + int notused : 4; + + int flags; /* Uncompression flags. */ + int method; /* Uncompression algorithm method. */ + int version; /* Uncompression algorithm version. */ + ssize_t window_size; /* Size of window_buf. */ + uint8_t* window_buf; /* Circular buffer used during + decompression. */ + uint8_t* filtered_buf; /* Buffer used when applying filters. */ + const uint8_t* block_buf; /* Buffer used when merging blocks. */ + size_t window_mask; /* Convinience field; window_size - 1. */ + int64_t write_ptr; /* This amount of data has been unpacked in + the window buffer. */ + int64_t last_write_ptr; /* This amount of data has been stored in + the output file. */ + int64_t last_unstore_ptr; /* Counter of bytes extracted during + unstoring. This is separate from + last_write_ptr because of how SERVICE + base blocks are handled during skipping + in solid multiarchive archives. */ + int64_t solid_offset; /* Additional offset inside the window + buffer, used in unpacking solid + archives. */ + ssize_t cur_block_size; /* Size of current data block. */ + int last_len; /* Flag used in lzss decompression. */ + + /* Decode tables used during lzss uncompression. */ + +#define HUFF_BC 20 + struct decode_table bd; /* huffman bit lengths */ +#define HUFF_NC 306 + struct decode_table ld; /* literals */ +#define HUFF_DC 64 + struct decode_table dd; /* distances */ +#define HUFF_LDC 16 + struct decode_table ldd; /* lower bits of distances */ +#define HUFF_RC 44 + struct decode_table rd; /* repeating distances */ +#define HUFF_TABLE_SIZE (HUFF_NC + HUFF_DC + HUFF_RC + HUFF_LDC) + + /* Circular deque for storing filters. */ + struct cdeque filters; + int64_t last_block_start; /* Used for sanity checking. */ + ssize_t last_block_length; /* Used for sanity checking. */ + + /* Distance cache used during lzss uncompression. */ + int dist_cache[4]; + + /* Data buffer stack. */ + struct data_ready dready[2]; +}; + +/* Bit reader state. */ +struct bit_reader { + int8_t bit_addr; /* Current bit pointer inside current byte. */ + int in_addr; /* Current byte pointer. */ +}; + +/* RARv5 block header structure. */ +struct compressed_block_header { + union { + struct { + uint8_t bit_size : 3; + uint8_t byte_count : 3; + uint8_t is_last_block : 1; + uint8_t is_table_present : 1; + } block_flags; + uint8_t block_flags_u8; + }; + + uint8_t block_cksum; +}; + +/* RARv5 main header structure. */ +struct main_header { + /* Does the archive contain solid streams? */ + uint8_t solid : 1; + + /* If this a multi-file archive? */ + uint8_t volume : 1; + uint8_t endarc : 1; + uint8_t notused : 5; + + int vol_no; +}; + +struct generic_header { + uint8_t split_after : 1; + uint8_t split_before : 1; + uint8_t padding : 6; + int size; + int last_header_id; +}; + +struct multivolume { + int expected_vol_no; + uint8_t* push_buf; +}; + +/* Main context structure. */ +struct rar5 { + int header_initialized; + + /* Set to 1 if current file is positioned AFTER the magic value + * of the archive file. This is used in header reading functions. */ + int skipped_magic; + + /* Set to not zero if we're in skip mode (either by calling rar5_data_skip + * function or when skipping over solid streams). Set to 0 when in + * extraction mode. This is used during checksum calculation functions. */ + int skip_mode; + + /* An offset to QuickOpen list. This is not supported by this unpacker, + * becuase we're focusing on streaming interface. QuickOpen is designed + * to make things quicker for non-stream interfaces, so it's not our + * use case. */ + uint64_t qlist_offset; + + /* An offset to additional Recovery data. This is not supported by this + * unpacker. Recovery data are additional Reed-Solomon codes that could + * be used to calculate bytes that are missing in archive or are + * corrupted. */ + uint64_t rr_offset; + + /* Various context variables grouped to different structures. */ + struct generic_header generic; + struct main_header main; + struct comp_state cstate; + struct file_header file; + struct bit_reader bits; + struct multivolume vol; + + /* The header of currently processed RARv5 block. Used in main + * decompression logic loop. */ + struct compressed_block_header last_block_hdr; +}; + +/* Forward function declarations. */ + +static int verify_global_checksums(struct archive_read* a); +static int rar5_read_data_skip(struct archive_read *a); +static int push_data_ready(struct archive_read* a, struct rar5* rar, + const uint8_t* buf, size_t size, int64_t offset); + +/* CDE_xxx = Circular Double Ended (Queue) return values. */ +enum CDE_RETURN_VALUES { + CDE_OK, CDE_ALLOC, CDE_PARAM, CDE_OUT_OF_BOUNDS, +}; + +/* Clears the contents of this circular deque. */ +static void cdeque_clear(struct cdeque* d) { + d->size = 0; + d->beg_pos = 0; + d->end_pos = 0; +} + +/* Creates a new circular deque object. Capacity must be power of 2: 8, 16, 32, + * 64, 256, etc. When the user will add another item above current capacity, + * the circular deque will overwrite the oldest entry. */ +static int cdeque_init(struct cdeque* d, int max_capacity_power_of_2) { + if(d == NULL || max_capacity_power_of_2 == 0) + return CDE_PARAM; + + d->cap_mask = max_capacity_power_of_2 - 1; + d->arr = NULL; + + if((max_capacity_power_of_2 & d->cap_mask) > 0) + return CDE_PARAM; + + cdeque_clear(d); + d->arr = malloc(sizeof(void*) * max_capacity_power_of_2); + + return d->arr ? CDE_OK : CDE_ALLOC; +} + +/* Return the current size (not capacity) of circular deque `d`. */ +static size_t cdeque_size(struct cdeque* d) { + return d->size; +} + +/* Returns the first element of current circular deque. Note that this function + * doesn't perform any bounds checking. If you need bounds checking, use + * `cdeque_front()` function instead. */ +static void cdeque_front_fast(struct cdeque* d, void** value) { + *value = (void*) d->arr[d->beg_pos]; +} + +/* Returns the first element of current circular deque. This function + * performs bounds checking. */ +static int cdeque_front(struct cdeque* d, void** value) { + if(d->size > 0) { + cdeque_front_fast(d, value); + return CDE_OK; + } else + return CDE_OUT_OF_BOUNDS; +} + +/* Pushes a new element into the end of this circular deque object. If current + * size will exceed capacity, the oldest element will be overwritten. */ +static int cdeque_push_back(struct cdeque* d, void* item) { + if(d == NULL) + return CDE_PARAM; + + if(d->size == d->cap_mask + 1) + return CDE_OUT_OF_BOUNDS; + + d->arr[d->end_pos] = (size_t) item; + d->end_pos = (d->end_pos + 1) & d->cap_mask; + d->size++; + + return CDE_OK; +} + +/* Pops a front element of this circular deque object and returns its value. + * This function doesn't perform any bounds checking. */ +static void cdeque_pop_front_fast(struct cdeque* d, void** value) { + *value = (void*) d->arr[d->beg_pos]; + d->beg_pos = (d->beg_pos + 1) & d->cap_mask; + d->size--; +} + +/* Pops a front element of this cicrular deque object and returns its value. + * This function performs bounds checking. */ +static int cdeque_pop_front(struct cdeque* d, void** value) { + if(!d || !value) + return CDE_PARAM; + + if(d->size == 0) + return CDE_OUT_OF_BOUNDS; + + cdeque_pop_front_fast(d, value); + return CDE_OK; +} + +/* Convinience function to cast filter_info** to void **. */ +static void** cdeque_filter_p(struct filter_info** f) { + return (void**) (size_t) f; +} + +/* Convinience function to cast filter_info* to void *. */ +static void* cdeque_filter(struct filter_info* f) { + return (void**) (size_t) f; +} + +/* Destroys this circular deque object. Dellocates the memory of the collection + * buffer, but doesn't deallocate the memory of any pointer passed to this + * deque as a value. */ +static void cdeque_free(struct cdeque* d) { + if(!d) + return; + + if(!d->arr) + return; + + free(d->arr); + + d->arr = NULL; + d->beg_pos = -1; + d->end_pos = -1; + d->cap_mask = 0; +} + +static inline struct rar5* get_context(struct archive_read* a) { + return (struct rar5*) a->format->data; +} + +// TODO: make sure these functions return a little endian number + +/* Convinience functions used by filter implementations. */ + +static uint32_t read_filter_data(struct rar5* rar, uint32_t offset) { + uint32_t* dptr = (uint32_t*) &rar->cstate.window_buf[offset]; + // TODO: bswap if big endian + return *dptr; +} + +static void write_filter_data(struct rar5* rar, uint32_t offset, + uint32_t value) +{ + uint32_t* dptr = (uint32_t*) &rar->cstate.filtered_buf[offset]; + // TODO: bswap if big endian + *dptr = value; +} + +static void circular_memcpy(uint8_t* dst, uint8_t* window, const int mask, + int64_t start, int64_t end) +{ + if((start & mask) > (end & mask)) { + ssize_t len1 = mask + 1 - (start & mask); + ssize_t len2 = end & mask; + + memcpy(dst, &window[start & mask], len1); + memcpy(dst + len1, window, len2); + } else { + memcpy(dst, &window[start & mask], (size_t) (end - start)); + } +} + +/* Allocates a new filter descriptor and adds it to the filter array. */ +static struct filter_info* add_new_filter(struct rar5* rar) { + struct filter_info* f = + (struct filter_info*) calloc(1, sizeof(struct filter_info)); + + if(!f) { + return NULL; + } + + cdeque_push_back(&rar->cstate.filters, cdeque_filter(f)); + return f; +} + +static int run_delta_filter(struct rar5* rar, struct filter_info* flt) { + int i; + ssize_t dest_pos, src_pos = 0; + + for(i = 0; i < flt->channels; i++) { + uint8_t prev_byte = 0; + for(dest_pos = i; + dest_pos < flt->block_length; + dest_pos += flt->channels) + { + uint8_t byte; + + byte = rar->cstate.window_buf[(rar->cstate.solid_offset + + flt->block_start + src_pos) & rar->cstate.window_mask]; + + prev_byte -= byte; + rar->cstate.filtered_buf[dest_pos] = prev_byte; + src_pos++; + } + } + + return ARCHIVE_OK; +} + +static int run_e8e9_filter(struct rar5* rar, struct filter_info* flt, + int extended) +{ + const uint32_t file_size = 0x1000000; + ssize_t i; + + circular_memcpy(rar->cstate.filtered_buf, + rar->cstate.window_buf, + rar->cstate.window_mask, + rar->cstate.solid_offset + flt->block_start, + rar->cstate.solid_offset + flt->block_start + flt->block_length); + + for(i = 0; i < flt->block_length - 4;) { + uint8_t b = rar->cstate.window_buf[(rar->cstate.solid_offset + + flt->block_start + i++) & rar->cstate.window_mask]; + + /* 0xE8 = x86's call <relative_addr_uint32> (function call) + * 0xE9 = x86's jmp <relative_addr_uint32> (unconditional jump) */ + if(b == 0xE8 || (extended && b == 0xE9)) { + + uint32_t addr; + uint32_t offset = (i + flt->block_start) % file_size; + + addr = read_filter_data(rar, (rar->cstate.solid_offset + + flt->block_start + i) & rar->cstate.window_mask); + + if(addr & 0x80000000) { + if(((addr + offset) & 0x80000000) == 0) { + write_filter_data(rar, i, addr + file_size); + } + } else { + if((addr - file_size) & 0x80000000) { + uint32_t naddr = addr - offset; + write_filter_data(rar, i, naddr); + } + } + + i += 4; + } + } + + return ARCHIVE_OK; +} + +static int run_arm_filter(struct rar5* rar, struct filter_info* flt) { + ssize_t i = 0; + uint32_t offset; + const int mask = rar->cstate.window_mask; + + circular_memcpy(rar->cstate.filtered_buf, + rar->cstate.window_buf, + rar->cstate.window_mask, + rar->cstate.solid_offset + flt->block_start, + rar->cstate.solid_offset + flt->block_start + flt->block_length); + + for(i = 0; i < flt->block_length - 3; i += 4) { + uint8_t* b = &rar->cstate.window_buf[(rar->cstate.solid_offset + + flt->block_start + i) & mask]; + + if(b[3] == 0xEB) { + /* 0xEB = ARM's BL (branch + link) instruction. */ + offset = read_filter_data(rar, (rar->cstate.solid_offset + + flt->block_start + i) & mask) & 0x00ffffff; + + offset -= (uint32_t) ((i + flt->block_start) / 4); + offset = (offset & 0x00ffffff) | 0xeb000000; + write_filter_data(rar, i, offset); + } + } + + return ARCHIVE_OK; +} + +static int run_filter(struct archive_read* a, struct filter_info* flt) { + int ret; + struct rar5* rar = get_context(a); + + if(rar->cstate.filtered_buf) + free(rar->cstate.filtered_buf); + + rar->cstate.filtered_buf = malloc(flt->block_length); + if(!rar->cstate.filtered_buf) { + archive_set_error(&a->archive, ENOMEM, "Can't allocate memory for " + "filter data."); + return ARCHIVE_FATAL; + } + + switch(flt->type) { + case FILTER_DELTA: + ret = run_delta_filter(rar, flt); + break; + + case FILTER_E8: + /* fallthrough */ + case FILTER_E8E9: + ret = run_e8e9_filter(rar, flt, flt->type == FILTER_E8E9); + break; + + case FILTER_ARM: + ret = run_arm_filter(rar, flt); + break; + + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unsupported filter type: 0x%02x", flt->type); + return ARCHIVE_FATAL; + } + + if(ret != ARCHIVE_OK) { + /* Filter has failed. */ + return ret; + } + + if(ARCHIVE_OK != push_data_ready(a, rar, rar->cstate.filtered_buf, + flt->block_length, rar->cstate.last_write_ptr)) + { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Stack overflow when submitting unpacked data"); + + return ARCHIVE_FATAL; + } + + rar->cstate.last_write_ptr += flt->block_length; + return ARCHIVE_OK; +} + +/* The `push_data` function submits the selected data range to the user. + * Next call of `use_data` will use the pointer, size and offset arguments + * that are specified here. These arguments are pushed to the FIFO stack here, + * and popped from the stack by the `use_data` function. */ +static void push_data(struct archive_read* a, struct rar5* rar, + const uint8_t* buf, int64_t idx_begin, int64_t idx_end) +{ + const int wmask = rar->cstate.window_mask; + const ssize_t solid_write_ptr = (rar->cstate.solid_offset + + rar->cstate.last_write_ptr) & wmask; + + idx_begin += rar->cstate.solid_offset; + idx_end += rar->cstate.solid_offset; + + /* Check if our unpacked data is wrapped inside the window circular buffer. + * If it's not wrapped, it can be copied out by using a single memcpy, + * but when it's wrapped, we need to copy the first part with one + * memcpy, and the second part with another memcpy. */ + + if((idx_begin & wmask) > (idx_end & wmask)) { + /* The data is wrapped (begin offset sis bigger than end offset). */ + const ssize_t frag1_size = rar->cstate.window_size - (idx_begin & wmask); + const ssize_t frag2_size = idx_end & wmask; + + /* Copy the first part of the buffer first. */ + push_data_ready(a, rar, buf + solid_write_ptr, frag1_size, + rar->cstate.last_write_ptr); + + /* Copy the second part of the buffer. */ + push_data_ready(a, rar, buf, frag2_size, + rar->cstate.last_write_ptr + frag1_size); + + rar->cstate.last_write_ptr += frag1_size + frag2_size; + } else { + /* Data is not wrapped, so we can just use one call to copy the + * data. */ + push_data_ready(a, rar, + buf + solid_write_ptr, + (idx_end - idx_begin) & wmask, + rar->cstate.last_write_ptr); + + rar->cstate.last_write_ptr += idx_end - idx_begin; + } +} + +/* Convinience function that submits the data to the user. It uses the + * unpack window buffer as a source location. */ +static void push_window_data(struct archive_read* a, struct rar5* rar, + int64_t idx_begin, int64_t idx_end) +{ + push_data(a, rar, rar->cstate.window_buf, idx_begin, idx_end); +} + +static int apply_filters(struct archive_read* a) { + struct filter_info* flt; + struct rar5* rar = get_context(a); + int ret; + + rar->cstate.all_filters_applied = 0; + + /* Get the first filter that can be applied to our data. The data needs to + * be fully unpacked before the filter can be run. */ + if(CDE_OK == + cdeque_front(&rar->cstate.filters, cdeque_filter_p(&flt))) + { + /* Check if our unpacked data fully covers this filter's range. */ + if(rar->cstate.write_ptr > flt->block_start && + rar->cstate.write_ptr >= flt->block_start + flt->block_length) + { + /* Check if we have some data pending to be written right before + * the filter's start offset. */ + if(rar->cstate.last_write_ptr == flt->block_start) { + /* Run the filter specified by descriptor `flt`. */ + ret = run_filter(a, flt); + if(ret != ARCHIVE_OK) { + /* Filter failure, return error. */ + return ret; + } + + /* Filter descriptor won't be needed anymore after it's used, + * so remove it from the filter list and free its memory. */ + (void) cdeque_pop_front(&rar->cstate.filters, + cdeque_filter_p(&flt)); + + free(flt); + } else { + /* We can't run filters yet, dump the memory right before the + * filter. */ + push_window_data(a, rar, rar->cstate.last_write_ptr, + flt->block_start); + } + + /* Return 'filter applied or not needed' state to the caller. */ + return ARCHIVE_RETRY; + } + } + + rar->cstate.all_filters_applied = 1; + return ARCHIVE_OK; +} + +static void dist_cache_push(struct rar5* rar, int value) { + int* q = rar->cstate.dist_cache; + + q[3] = q[2]; + q[2] = q[1]; + q[1] = q[0]; + q[0] = value; +} + +static int dist_cache_touch(struct rar5* rar, int index) { + int* q = rar->cstate.dist_cache; + int i, dist = q[index]; + + for(i = index; i > 0; i--) + q[i] = q[i - 1]; + + q[0] = dist; + return dist; +} + +static void free_filters(struct rar5* rar) { + struct cdeque* d = &rar->cstate.filters; + + /* Free any remaining filters. All filters should be naturally consumed by + * the unpacking function, so remaining filters after unpacking normally + * mean that unpacking wasn't successfull. But still of course we shouldn't + * leak memory in such case. */ + + /* cdeque_size() is a fast operation, so we can use it as a loop + * expression. */ + while(cdeque_size(d) > 0) { + struct filter_info* f = NULL; + + /* Pop_front will also decrease the collection's size. */ + if(CDE_OK == cdeque_pop_front(d, cdeque_filter_p(&f)) && f != NULL) + free(f); + } + + cdeque_clear(d); + + /* Also clear out the variables needed for sanity checking. */ + rar->cstate.last_block_start = 0; + rar->cstate.last_block_length = 0; +} + +static void reset_file_context(struct rar5* rar) { + memset(&rar->file, 0, sizeof(rar->file)); + blake2sp_init(&rar->file.b2state, 32); + + if(rar->main.solid) { + rar->cstate.solid_offset += rar->cstate.write_ptr; + } else { + rar->cstate.solid_offset = 0; + } + + rar->cstate.write_ptr = 0; + rar->cstate.last_write_ptr = 0; + rar->cstate.last_unstore_ptr = 0; + + free_filters(rar); +} + +static inline int get_archive_read(struct archive* a, + struct archive_read** ar) +{ + *ar = (struct archive_read*) a; + archive_check_magic(a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, + "archive_read_support_format_rar5"); + + return ARCHIVE_OK; +} + +static int read_ahead(struct archive_read* a, size_t how_many, + const uint8_t** ptr) +{ + if(!ptr) + return 0; + + ssize_t avail = -1; + *ptr = __archive_read_ahead(a, how_many, &avail); + + if(*ptr == NULL) { + return 0; + } + + return 1; +} + +static int consume(struct archive_read* a, int64_t how_many) { + int ret; + + ret = + how_many == __archive_read_consume(a, how_many) + ? ARCHIVE_OK + : ARCHIVE_FATAL; + + return ret; +} + +/** + * Read a RAR5 variable sized numeric value. This value will be stored in + * `pvalue`. The `pvalue_len` argument points to a variable that will receive + * the byte count that was consumed in order to decode the `pvalue` value, plus + * one. + * + * pvalue_len is optional and can be NULL. + * + * NOTE: if `pvalue_len` is NOT NULL, the caller needs to manually consume + * the number of bytes that `pvalue_len` value contains. If the `pvalue_len` + * is NULL, this consuming operation is done automatically. + * + * Returns 1 if *pvalue was successfully read. + * Returns 0 if there was an error. In this case, *pvalue contains an + * invalid value. + */ + +static int read_var(struct archive_read* a, uint64_t* pvalue, + uint64_t* pvalue_len) +{ + uint64_t result = 0; + size_t shift, i; + const uint8_t* p; + uint8_t b; + + /* We will read maximum of 8 bytes. We don't have to handle the situation + * to read the RAR5 variable-sized value stored at the end of the file, + * because such situation will never happen. */ + if(!read_ahead(a, 8, &p)) + return 0; + + for(shift = 0, i = 0; i < 8; i++, shift += 7) { + b = p[i]; + + /* Strip the MSB from the input byte and add the resulting number + * to the `result`. */ + result += (b & 0x7F) << shift; + + /* MSB set to 1 means we need to continue decoding process. MSB set + * to 0 means we're done. + * + * This conditional checks for the second case. */ + if((b & 0x80) == 0) { + if(pvalue) { + *pvalue = result; + } + + /* If the caller has passed the `pvalue_len` pointer, store the + * number of consumed bytes in it and do NOT consume those bytes, + * since the caller has all the information it needs to perform + * the consuming process itself. */ + if(pvalue_len) { + *pvalue_len = 1 + i; + } else { + /* If the caller did not provide the `pvalue_len` pointer, + * it will not have the possibility to advance the file + * pointer, because it will not know how many bytes it needs + * to consume. This is why we handle such situation here + * autmatically. */ + if(ARCHIVE_OK != consume(a, 1 + i)) { + return 0; + } + } + + /* End of decoding process, return success. */ + return 1; + } + } + + /* The decoded value takes the maximum number of 8 bytes. It's a maximum + * number of bytes, so end decoding process here even if the first bit + * of last byte is 1. */ + if(pvalue) { + *pvalue = result; + } + + if(pvalue_len) { + *pvalue_len = 9; + } else { + if(ARCHIVE_OK != consume(a, 9)) { + return 0; + } + } + + return 1; +} + +static int read_var_sized(struct archive_read* a, size_t* pvalue, + size_t* pvalue_len) +{ + uint64_t v; + uint64_t v_size; + + const int ret = pvalue_len + ? read_var(a, &v, &v_size) + : read_var(a, &v, NULL); + + if(ret == 1 && pvalue) { + *pvalue = (size_t) v; + } + + if(pvalue_len) { + /* Possible data truncation should be safe. */ + *pvalue_len = (size_t) v_size; + } + + return ret; +} + +static int read_bits_32(struct rar5* rar, const uint8_t* p, uint32_t* value) { + uint32_t bits = p[rar->bits.in_addr] << 24; + bits |= p[rar->bits.in_addr + 1] << 16; + bits |= p[rar->bits.in_addr + 2] << 8; + bits |= p[rar->bits.in_addr + 3]; + bits <<= rar->bits.bit_addr; + bits |= p[rar->bits.in_addr + 4] >> (8 - rar->bits.bit_addr); + *value = bits; + return ARCHIVE_OK; +} + +static int read_bits_16(struct rar5* rar, const uint8_t* p, uint16_t* value) { + int bits = (int) p[rar->bits.in_addr] << 16; + bits |= (int) p[rar->bits.in_addr + 1] << 8; + bits |= (int) p[rar->bits.in_addr + 2]; + bits >>= (8 - rar->bits.bit_addr); + *value = bits & 0xffff; + return ARCHIVE_OK; +} + +static void skip_bits(struct rar5* rar, int bits) { + const int new_bits = rar->bits.bit_addr + bits; + rar->bits.in_addr += new_bits >> 3; + rar->bits.bit_addr = new_bits & 7; +} + +/* n = up to 16 */ +static int read_consume_bits(struct rar5* rar, const uint8_t* p, int n, + int* value) +{ + uint16_t v; + int ret, num; + + if(n == 0 || n > 16) { + /* This is a programmer error and should never happen in runtime. */ + return ARCHIVE_FATAL; + } + + ret = read_bits_16(rar, p, &v); + if(ret != ARCHIVE_OK) + return ret; + + num = (int) v; + num >>= 16 - n; + + skip_bits(rar, n); + + if(value) + *value = num; + + return ARCHIVE_OK; +} + +static int read_u32(struct archive_read* a, uint32_t* pvalue) { + const uint8_t* p; + if(!read_ahead(a, 4, &p)) + return 0; + + *pvalue = *(const uint32_t*)p; + + return ARCHIVE_OK == consume(a, 4) ? 1 : 0; +} + +static int read_u64(struct archive_read* a, uint64_t* pvalue) { + const uint8_t* p; + if(!read_ahead(a, 8, &p)) + return 0; + + *pvalue = *(const uint64_t*)p; + + return ARCHIVE_OK == consume(a, 8) ? 1 : 0; +} + +static int bid_standard(struct archive_read* a) { + const uint8_t* p; + + if(!read_ahead(a, rar5_signature_size, &p)) + return -1; + + if(!memcmp(rar5_signature, p, rar5_signature_size)) + return 30; + + return -1; +} + +static int rar5_bid(struct archive_read* a, int best_bid) { + int my_bid; + + if(best_bid > 30) + return -1; + + my_bid = bid_standard(a); + if(my_bid > -1) { + return my_bid; + } + + return -1; +} + +static int rar5_options(struct archive_read *a, const char *key, const char *val) { + (void) a; + (void) key; + (void) val; + + /* No options supported in this version. Return the ARCHIVE_WARN code to + * signal the options supervisor that the unpacker didn't handle setting + * this option. */ + + return ARCHIVE_WARN; +} + +static void init_header(struct archive_read* a) { + a->archive.archive_format = ARCHIVE_FORMAT_RAR_V5; + a->archive.archive_format_name = "RAR5"; +} + +enum HEADER_FLAGS { + HFL_EXTRA_DATA = 0x0001, HFL_DATA = 0x0002, HFL_SKIP_IF_UNKNOWN = 0x0004, + HFL_SPLIT_BEFORE = 0x0008, HFL_SPLIT_AFTER = 0x0010, HFL_CHILD = 0x0020, + HFL_INHERITED = 0x0040 +}; + +static int process_main_locator_extra_block(struct archive_read* a, + struct rar5* rar) +{ + uint64_t locator_flags; + + if(!read_var(a, &locator_flags, NULL)) { + return ARCHIVE_EOF; + } + + enum LOCATOR_FLAGS { + QLIST = 0x01, RECOVERY = 0x02, + }; + + if(locator_flags & QLIST) { + if(!read_var(a, &rar->qlist_offset, NULL)) { + return ARCHIVE_EOF; + } + + /* qlist is not used */ + } + + if(locator_flags & RECOVERY) { + if(!read_var(a, &rar->rr_offset, NULL)) { + return ARCHIVE_EOF; + } + + /* rr is not used */ + } + + return ARCHIVE_OK; +} + +static int parse_file_extra_hash(struct archive_read* a, struct rar5* rar, + ssize_t* extra_data_size) +{ + size_t hash_type; + size_t value_len; + + if(!read_var_sized(a, &hash_type, &value_len)) + return ARCHIVE_EOF; + + *extra_data_size -= value_len; + if(ARCHIVE_OK != consume(a, value_len)) { + return ARCHIVE_EOF; + } + + enum HASH_TYPE { + BLAKE2sp = 0x00 + }; + + /* The file uses BLAKE2sp checksum algorithm instead of plain old + * CRC32. */ + if(hash_type == BLAKE2sp) { + const uint8_t* p; + const int hash_size = sizeof(rar->file.blake2sp); + + if(!read_ahead(a, hash_size, &p)) + return ARCHIVE_EOF; + + rar->file.has_blake2 = 1; + memcpy(&rar->file.blake2sp, p, hash_size); + + if(ARCHIVE_OK != consume(a, hash_size)) { + return ARCHIVE_EOF; + } + + *extra_data_size -= hash_size; + } else { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unsupported hash type (0x%02x)", (int) hash_type); + return ARCHIVE_FATAL; + } + + return ARCHIVE_OK; +} + +static uint64_t time_win_to_unix(uint64_t win_time) { + const size_t ns_in_sec = 10000000; + const uint64_t sec_to_unix = 11644473600LL; + return win_time / ns_in_sec - sec_to_unix; +} + +static int parse_htime_item(struct archive_read* a, char unix_time, + uint64_t* where, ssize_t* extra_data_size) +{ + if(unix_time) { + uint32_t time_val; + if(!read_u32(a, &time_val)) + return ARCHIVE_EOF; + + *extra_data_size -= 4; + *where = (uint64_t) time_val; + } else { + uint64_t windows_time; + if(!read_u64(a, &windows_time)) + return ARCHIVE_EOF; + + *where = time_win_to_unix(windows_time); + *extra_data_size -= 8; + } + + return ARCHIVE_OK; +} + +static int parse_file_extra_htime(struct archive_read* a, + struct archive_entry* e, struct rar5* rar, + ssize_t* extra_data_size) +{ + char unix_time = 0; + size_t flags; + size_t value_len; + + enum HTIME_FLAGS { + IS_UNIX = 0x01, + HAS_MTIME = 0x02, + HAS_CTIME = 0x04, + HAS_ATIME = 0x08, + HAS_UNIX_NS = 0x10, + }; + + if(!read_var_sized(a, &flags, &value_len)) + return ARCHIVE_EOF; + + *extra_data_size -= value_len; + if(ARCHIVE_OK != consume(a, value_len)) { + return ARCHIVE_EOF; + } + + unix_time = flags & IS_UNIX; + + if(flags & HAS_MTIME) { + parse_htime_item(a, unix_time, &rar->file.e_mtime, extra_data_size); + archive_entry_set_mtime(e, rar->file.e_mtime, 0); + } + + if(flags & HAS_CTIME) { + parse_htime_item(a, unix_time, &rar->file.e_ctime, extra_data_size); + archive_entry_set_ctime(e, rar->file.e_ctime, 0); + } + + if(flags & HAS_ATIME) { + parse_htime_item(a, unix_time, &rar->file.e_atime, extra_data_size); + archive_entry_set_atime(e, rar->file.e_atime, 0); + } + + if(flags & HAS_UNIX_NS) { + if(!read_u32(a, &rar->file.e_unix_ns)) + return ARCHIVE_EOF; + + *extra_data_size -= 4; + } + + return ARCHIVE_OK; +} + +static int process_head_file_extra(struct archive_read* a, + struct archive_entry* e, struct rar5* rar, + ssize_t extra_data_size) +{ + size_t extra_field_size; + size_t extra_field_id; + int ret = ARCHIVE_FATAL; + size_t var_size; + + enum EXTRA { + CRYPT = 0x01, HASH = 0x02, HTIME = 0x03, VERSION_ = 0x04, + REDIR = 0x05, UOWNER = 0x06, SUBDATA = 0x07 + }; + + while(extra_data_size > 0) { + if(!read_var_sized(a, &extra_field_size, &var_size)) + return ARCHIVE_EOF; + + extra_data_size -= var_size; + if(ARCHIVE_OK != consume(a, var_size)) { + return ARCHIVE_EOF; + } + + if(!read_var_sized(a, &extra_field_id, &var_size)) + return ARCHIVE_EOF; + + extra_data_size -= var_size; + if(ARCHIVE_OK != consume(a, var_size)) { + return ARCHIVE_EOF; + } + + switch(extra_field_id) { + case HASH: + ret = parse_file_extra_hash(a, rar, &extra_data_size); + break; + case HTIME: + ret = parse_file_extra_htime(a, e, rar, &extra_data_size); + break; + case CRYPT: + /* fallthrough */ + case VERSION_: + /* fallthrough */ + case REDIR: + /* fallthrough */ + case UOWNER: + /* fallthrough */ + case SUBDATA: + /* fallthrough */ + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unknown extra field in file/service block: 0x%02x", + (int) extra_field_id); + return ARCHIVE_FATAL; + } + } + + if(ret != ARCHIVE_OK) { + /* Attribute not implemented. */ + return ret; + } + + return ARCHIVE_OK; +} + +static int process_head_file(struct archive_read* a, struct rar5* rar, + struct archive_entry* entry, size_t block_flags) +{ + ssize_t extra_data_size = 0; + size_t data_size, file_flags, file_attr, compression_info, host_os, + name_size; + uint64_t unpacked_size; + uint32_t mtime = 0, crc; + int c_method = 0, c_version = 0, is_dir; + char name_utf8_buf[2048 * 4]; + const uint8_t* p; + + memset(entry, 0, sizeof(struct archive_entry)); + + /* Do not reset file context if we're switching archives. */ + if(!rar->cstate.switch_multivolume) { + reset_file_context(rar); + } + + if(block_flags & HFL_EXTRA_DATA) { + size_t edata_size; + if(!read_var_sized(a, &edata_size, NULL)) + return ARCHIVE_EOF; + + /* Intentional type cast from unsigned to signed. */ + extra_data_size = (ssize_t) edata_size; + } + + if(block_flags & HFL_DATA) { + if(!read_var_sized(a, &data_size, NULL)) + return ARCHIVE_EOF; + + rar->file.bytes_remaining = data_size; + } else { + rar->file.bytes_remaining = 0; + + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "no data found in file/service block"); + return ARCHIVE_FATAL; + } + + enum FILE_FLAGS { + DIRECTORY = 0x0001, UTIME = 0x0002, CRC32 = 0x0004, + UNKNOWN_UNPACKED_SIZE = 0x0008, + }; + + enum COMP_INFO_FLAGS { + SOLID = 0x0040, + }; + + if(!read_var_sized(a, &file_flags, NULL)) + return ARCHIVE_EOF; + + if(!read_var(a, &unpacked_size, NULL)) + return ARCHIVE_EOF; + + if(file_flags & UNKNOWN_UNPACKED_SIZE) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Files with unknown unpacked size are not supported"); + return ARCHIVE_FATAL; + } + + is_dir = (int) (file_flags & DIRECTORY); + + if(!read_var_sized(a, &file_attr, NULL)) + return ARCHIVE_EOF; + + if(file_flags & UTIME) { + if(!read_u32(a, &mtime)) + return ARCHIVE_EOF; + } + + if(file_flags & CRC32) { + if(!read_u32(a, &crc)) + return ARCHIVE_EOF; + } + + if(!read_var_sized(a, &compression_info, NULL)) + return ARCHIVE_EOF; + + c_method = (int) (compression_info >> 7) & 0x7; + c_version = (int) (compression_info & 0x3f); + + rar->cstate.window_size = is_dir ? + 0 : + g_unpack_window_size << ((compression_info >> 10) & 15); + rar->cstate.method = c_method; + rar->cstate.version = c_version + 50; + + rar->file.solid = (compression_info & SOLID) > 0; + rar->file.service = 0; + + if(!read_var_sized(a, &host_os, NULL)) + return ARCHIVE_EOF; + + enum HOST_OS { + HOST_WINDOWS = 0, + HOST_UNIX = 1, + }; + + if(host_os == HOST_WINDOWS) { + /* Host OS is Windows */ + + unsigned short mode = 0660; + + if(is_dir) + mode |= AE_IFDIR; + else + mode |= AE_IFREG; + + archive_entry_set_mode(entry, mode); + } else if(host_os == HOST_UNIX) { + /* Host OS is Unix */ + archive_entry_set_mode(entry, (unsigned short) file_attr); + } else { + /* Unknown host OS */ + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unsupported Host OS: 0x%02x", (int) host_os); + + return ARCHIVE_FATAL; + } + + if(!read_var_sized(a, &name_size, NULL)) + return ARCHIVE_EOF; + + if(!read_ahead(a, name_size, &p)) + return ARCHIVE_EOF; + + if(name_size > 2047) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Filename is too long"); + + return ARCHIVE_FATAL; + } + + if(name_size == 0) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "No filename specified"); + + return ARCHIVE_FATAL; + } + + memcpy(name_utf8_buf, p, name_size); + name_utf8_buf[name_size] = 0; + if(ARCHIVE_OK != consume(a, name_size)) { + return ARCHIVE_EOF; + } + + if(extra_data_size > 0) { + int ret = process_head_file_extra(a, entry, rar, extra_data_size); + + /* Sanity check. */ + if(extra_data_size < 0) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "File extra data size is not zero"); + return ARCHIVE_FATAL; + } + + if(ret != ARCHIVE_OK) + return ret; + } + + if((file_flags & UNKNOWN_UNPACKED_SIZE) == 0) { + rar->file.unpacked_size = (ssize_t) unpacked_size; + archive_entry_set_size(entry, unpacked_size); + } + + if(file_flags & UTIME) { + archive_entry_set_mtime(entry, (time_t) mtime, 0); + } + + if(file_flags & CRC32) { + rar->file.stored_crc32 = crc; + } + + archive_entry_update_pathname_utf8(entry, name_utf8_buf); + + if(!rar->cstate.switch_multivolume) { + /* Do not reinitialize unpacking state if we're switching archives. */ + rar->cstate.block_parsing_finished = 1; + rar->cstate.all_filters_applied = 1; + rar->cstate.initialized = 0; + } + + if(rar->generic.split_before > 0) { + /* If now we're standing on a header that has a 'split before' mark, + * it means we're standing on a 'continuation' file header. Signal + * the caller that if it wants to move to another file, it must call + * rar5_read_header() function again. */ + + return ARCHIVE_RETRY; + } else { + return ARCHIVE_OK; + } +} + +static int process_head_service(struct archive_read* a, struct rar5* rar, + struct archive_entry* entry, size_t block_flags) +{ + /* Process this SERVICE block the same way as FILE blocks. */ + int ret = process_head_file(a, rar, entry, block_flags); + if(ret != ARCHIVE_OK) + return ret; + + rar->file.service = 1; + + /* But skip the data part automatically. It's no use for the user anyway. + * It contains only service data, not even needed to properly unpack the + * file. */ + ret = rar5_read_data_skip(a); + if(ret != ARCHIVE_OK) + return ret; + + /* After skipping, try parsing another block automatically. */ + return ARCHIVE_RETRY; +} + +static int process_head_main(struct archive_read* a, struct rar5* rar, + struct archive_entry* entry, size_t block_flags) +{ + (void) entry; + + int ret; + size_t extra_data_size, + extra_field_size, + extra_field_id, + archive_flags; + + if(block_flags & HFL_EXTRA_DATA) { + if(!read_var_sized(a, &extra_data_size, NULL)) + return ARCHIVE_EOF; + } else { + extra_data_size = 0; + } + + if(!read_var_sized(a, &archive_flags, NULL)) { + return ARCHIVE_EOF; + } + + enum MAIN_FLAGS { + VOLUME = 0x0001, /* multi-volume archive */ + VOLUME_NUMBER = 0x0002, /* volume number, first vol doesnt have it */ + SOLID = 0x0004, /* solid archive */ + PROTECT = 0x0008, /* contains Recovery info */ + LOCK = 0x0010, /* readonly flag, not used */ + }; + + rar->main.volume = (archive_flags & VOLUME) > 0; + rar->main.solid = (archive_flags & SOLID) > 0; + + if(archive_flags & VOLUME_NUMBER) { + size_t v; + if(!read_var_sized(a, &v, NULL)) { + return ARCHIVE_EOF; + } + + rar->main.vol_no = (int) v; + } else { + rar->main.vol_no = 0; + } + + if(rar->vol.expected_vol_no > 0 && + rar->main.vol_no != rar->vol.expected_vol_no) + { + /* Returning EOF instead of FATAL because of strange libarchive + * behavior. When opening multiple files via + * archive_read_open_filenames(), after reading up the whole last file, + * the __archive_read_ahead function wraps up to the first archive + * instead of returning EOF. */ + return ARCHIVE_EOF; + } + + if(extra_data_size == 0) { + /* Early return. */ + return ARCHIVE_OK; + } + + if(!read_var_sized(a, &extra_field_size, NULL)) { + return ARCHIVE_EOF; + } + + if(!read_var_sized(a, &extra_field_id, NULL)) { + return ARCHIVE_EOF; + } + + if(extra_field_size == 0) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Invalid extra field size"); + return ARCHIVE_FATAL; + } + + enum MAIN_EXTRA { + // Just one attribute here. + LOCATOR = 0x01, + }; + + switch(extra_field_id) { + case LOCATOR: + ret = process_main_locator_extra_block(a, rar); + if(ret != ARCHIVE_OK) { + /* Error while parsing main locator extra block. */ + return ret; + } + + break; + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unsupported extra type (0x%02x)", (int) extra_field_id); + return ARCHIVE_FATAL; + } + + return ARCHIVE_OK; +} + +static int scan_for_signature(struct archive_read* a); + +/* Base block processing function. A 'base block' is a RARv5 header block + * that tells the reader what kind of data is stored inside the block. + * + * From the birds-eye view a RAR file looks file this: + * + * <magic><base_block_1><base_block_2>...<base_block_n> + * + * There are a few types of base blocks. Those types are specified inside + * the 'switch' statement in this function. For example purposes, I'll write + * how a standard RARv5 file could look like here: + * + * <magic><MAIN><FILE><FILE><FILE><SERVICE><ENDARC> + * + * The structure above could describe an archive file with 3 files in it, + * one service "QuickOpen" block (that is ignored by this parser), and an + * end of file base block marker. + * + * If the file is stored in multiple archive files ("multiarchive"), it might + * look like this: + * + * .part01.rar: <magic><MAIN><FILE><ENDARC> + * .part02.rar: <magic><MAIN><FILE><ENDARC> + * .part03.rar: <magic><MAIN><FILE><ENDARC> + * + * This example could describe 3 RAR files that contain ONE archived file. + * Or it could describe 3 RAR files that contain 3 different files. Or 3 + * RAR files than contain 2 files. It all depends what metadata is stored in + * the headers of <FILE> blocks. + * + * Each <FILE> block contains info about its size, the name of the file it's + * storing inside, and whether this FILE block is a continuation block of + * previous archive ('split before'), and is this FILE block should be + * continued in another archive ('split after'). By parsing the 'split before' + * and 'split after' flags, we're able to tell if multiple <FILE> base blocks + * are describing one file, or multiple files (with the same filename, for + * example). + * + * One thing to note is that if we're parsing the first <FILE> block, and + * we see 'split after' flag, then we need to jump over to another <FILE> + * block to be able to decompress rest of the data. To do this, we need + * to skip the <ENDARC> block, then switch to another file, then skip the + * <magic> block, <MAIN> block, and then we're standing on the proper + * <FILE> block. + */ + +static int process_base_block(struct archive_read* a, + struct archive_entry* entry) +{ + struct rar5* rar = get_context(a); + uint32_t hdr_crc, computed_crc; + size_t raw_hdr_size, hdr_size_len, hdr_size; + size_t header_id, header_flags; + const uint8_t* p; + int ret; + + /* Skip any unprocessed data for this file. */ + if(rar->file.bytes_remaining) { + ret = rar5_read_data_skip(a); + if(ret != ARCHIVE_OK) { + return ret; + } + } + + /* Read the expected CRC32 checksum. */ + if(!read_u32(a, &hdr_crc)) { + return ARCHIVE_EOF; + } + + /* Read header size. */ + if(!read_var_sized(a, &raw_hdr_size, &hdr_size_len)) { + return ARCHIVE_EOF; + } + + /* Sanity check, maximum header size for RAR5 is 2MB. */ + if(raw_hdr_size > (2 * 1024 * 1024)) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Base block header is too large"); + + return ARCHIVE_FATAL; + } + + hdr_size = raw_hdr_size + hdr_size_len; + + /* Read the whole header data into memory, maximum memory use here is + * 2MB. */ + if(!read_ahead(a, hdr_size, &p)) { + return ARCHIVE_EOF; + } + + /* Verify the CRC32 of the header data. */ + computed_crc = (uint32_t) crc32(0, p, (int) hdr_size); + if(computed_crc != hdr_crc) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Header CRC error"); + + return ARCHIVE_FATAL; + } + + /* If the checksum is OK, we proceed with parsing. */ + if(ARCHIVE_OK != consume(a, hdr_size_len)) { + return ARCHIVE_EOF; + } + + if(!read_var_sized(a, &header_id, NULL)) + return ARCHIVE_EOF; + + if(!read_var_sized(a, &header_flags, NULL)) + return ARCHIVE_EOF; + + rar->generic.split_after = (header_flags & HFL_SPLIT_AFTER) > 0; + rar->generic.split_before = (header_flags & HFL_SPLIT_BEFORE) > 0; + rar->generic.size = hdr_size; + rar->generic.last_header_id = header_id; + rar->main.endarc = 0; + + /* Those are possible header ids in RARv5. */ + enum HEADER_TYPE { + HEAD_MARK = 0x00, HEAD_MAIN = 0x01, HEAD_FILE = 0x02, + HEAD_SERVICE = 0x03, HEAD_CRYPT = 0x04, HEAD_ENDARC = 0x05, + HEAD_UNKNOWN = 0xff, + }; + + switch(header_id) { + case HEAD_MAIN: + ret = process_head_main(a, rar, entry, header_flags); + + /* Main header doesn't have any files in it, so it's pointless + * to return to the caller. Retry to next header, which should be + * HEAD_FILE/HEAD_SERVICE. */ + if(ret == ARCHIVE_OK) + return ARCHIVE_RETRY; + + return ret; + case HEAD_SERVICE: + ret = process_head_service(a, rar, entry, header_flags); + return ret; + case HEAD_FILE: + ret = process_head_file(a, rar, entry, header_flags); + return ret; + case HEAD_CRYPT: + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Encryption is not supported"); + return ARCHIVE_FATAL; + case HEAD_ENDARC: + rar->main.endarc = 1; + + /* After encountering an end of file marker, we need to take + * into consideration if this archive is continued in another + * file (i.e. is it part01.rar: is there a part02.rar?) */ + if(rar->main.volume) { + /* In case there is part02.rar, position the read pointer + * in a proper place, so we can resume parsing. */ + + ret = scan_for_signature(a); + if(ret == ARCHIVE_FATAL) { + return ARCHIVE_EOF; + } else { + rar->vol.expected_vol_no = rar->main.vol_no + 1; + return ARCHIVE_OK; + } + } else { + return ARCHIVE_EOF; + } + case HEAD_MARK: + return ARCHIVE_EOF; + default: + if((header_flags & HFL_SKIP_IF_UNKNOWN) == 0) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Header type error"); + return ARCHIVE_FATAL; + } else { + /* If the block is marked as 'skip if unknown', do as the flag + * says: skip the block instead on failing on it. */ + return ARCHIVE_RETRY; + } + } + +#if !defined WIN32 + // Not reached. + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Internal unpacker error"); + return ARCHIVE_FATAL; +#endif +} + +static int skip_base_block(struct archive_read* a) { + int ret; + struct rar5* rar = get_context(a); + + struct archive_entry entry; + ret = process_base_block(a, &entry); + + if(rar->generic.last_header_id == 2 && rar->generic.split_before > 0) + return ARCHIVE_OK; + + if(ret == ARCHIVE_OK) + return ARCHIVE_RETRY; + else + return ret; +} + +static int rar5_read_header(struct archive_read *a, + struct archive_entry *entry) +{ + struct rar5* rar = get_context(a); + int ret; + + if(rar->header_initialized == 0) { + init_header(a); + rar->header_initialized = 1; + } + + if(rar->skipped_magic == 0) { + if(ARCHIVE_OK != consume(a, rar5_signature_size)) { + return ARCHIVE_EOF; + } + + rar->skipped_magic = 1; + } + + do { + ret = process_base_block(a, entry); + } while(ret == ARCHIVE_RETRY || + (rar->main.endarc > 0 && ret == ARCHIVE_OK)); + + return ret; +} + +static void init_unpack(struct rar5* rar) { + rar->file.calculated_crc32 = 0; + rar->cstate.window_mask = rar->cstate.window_size - 1; + + if(rar->cstate.window_buf) + free(rar->cstate.window_buf); + + if(rar->cstate.filtered_buf) + free(rar->cstate.filtered_buf); + + rar->cstate.window_buf = calloc(1, rar->cstate.window_size); + rar->cstate.filtered_buf = calloc(1, rar->cstate.window_size); + + rar->cstate.write_ptr = 0; + rar->cstate.last_write_ptr = 0; + + memset(&rar->cstate.bd, 0, sizeof(rar->cstate.bd)); + memset(&rar->cstate.ld, 0, sizeof(rar->cstate.ld)); + memset(&rar->cstate.dd, 0, sizeof(rar->cstate.dd)); + memset(&rar->cstate.ldd, 0, sizeof(rar->cstate.ldd)); + memset(&rar->cstate.rd, 0, sizeof(rar->cstate.rd)); +} + +static void update_crc(struct rar5* rar, const uint8_t* p, size_t to_read) { + int verify_crc; + + if(rar->skip_mode) { +#if defined CHECK_CRC_ON_SOLID_SKIP + verify_crc = 1; +#else + verify_crc = 0; +#endif + } else + verify_crc = 1; + + if(verify_crc) { + /* Don't update CRC32 if the file doesn't have the `stored_crc32` info + filled in. */ + if(rar->file.stored_crc32 > 0) { + rar->file.calculated_crc32 = + crc32(rar->file.calculated_crc32, p, to_read); + } + + /* Check if the file uses an optional BLAKE2sp checksum algorithm. */ + if(rar->file.has_blake2 > 0) { + /* Return value of the `update` function is always 0, so we can + * explicitly ignore it here. */ + (void) blake2sp_update(&rar->file.b2state, p, to_read); + } + } +} + +static int create_decode_tables(uint8_t* bit_length, + struct decode_table* table, + int size) +{ + int code, upper_limit = 0, i, lc[16]; + uint32_t decode_pos_clone[rar5_countof(table->decode_pos)]; + ssize_t cur_len, quick_data_size; + + memset(&lc, 0, sizeof(lc)); + memset(table->decode_num, 0, sizeof(table->decode_num)); + table->size = size; + table->quick_bits = size == HUFF_NC ? 10 : 7; + + for(i = 0; i < size; i++) { + lc[bit_length[i] & 15]++; + } + + lc[0] = 0; + table->decode_pos[0] = 0; + table->decode_len[0] = 0; + + for(i = 1; i < 16; i++) { + upper_limit += lc[i]; + + table->decode_len[i] = upper_limit << (16 - i); + table->decode_pos[i] = table->decode_pos[i - 1] + lc[i - 1]; + + upper_limit <<= 1; + } + + memcpy(decode_pos_clone, table->decode_pos, sizeof(decode_pos_clone)); + + for(i = 0; i < size; i++) { + uint8_t clen = bit_length[i] & 15; + if(clen > 0) { + int last_pos = decode_pos_clone[clen]; + table->decode_num[last_pos] = i; + decode_pos_clone[clen]++; + } + } + + quick_data_size = 1 << table->quick_bits; + cur_len = 1; + for(code = 0; code < quick_data_size; code++) { + int bit_field = code << (16 - table->quick_bits); + int dist, pos; + + while(cur_len < rar5_countof(table->decode_len) && + bit_field >= table->decode_len[cur_len]) { + cur_len++; + } + + table->quick_len[code] = (uint8_t) cur_len; + + dist = bit_field - table->decode_len[cur_len - 1]; + dist >>= (16 - cur_len); + + pos = table->decode_pos[cur_len] + dist; + if(cur_len < rar5_countof(table->decode_pos) && pos < size) { + table->quick_num[code] = table->decode_num[pos]; + } else { + table->quick_num[code] = 0; + } + } + + return ARCHIVE_OK; +} + +static int decode_number(struct archive_read* a, struct decode_table* table, + const uint8_t* p, uint16_t* num) +{ + int i, bits, dist; + uint16_t bitfield; + uint32_t pos; + struct rar5* rar = get_context(a); + + if(ARCHIVE_OK != read_bits_16(rar, p, &bitfield)) { + return ARCHIVE_EOF; + } + + bitfield &= 0xfffe; + + if(bitfield < table->decode_len[table->quick_bits]) { + int code = bitfield >> (16 - table->quick_bits); + skip_bits(rar, table->quick_len[code]); + *num = table->quick_num[code]; + return ARCHIVE_OK; + } + + bits = 15; + + for(i = table->quick_bits + 1; i < 15; i++) { + if(bitfield < table->decode_len[i]) { + bits = i; + break; + } + } + + skip_bits(rar, bits); + + dist = bitfield - table->decode_len[bits - 1]; + dist >>= (16 - bits); + pos = table->decode_pos[bits] + dist; + + if(pos >= table->size) + pos = 0; + + *num = table->decode_num[pos]; + return ARCHIVE_OK; +} + +/* Reads and parses Huffman tables from the beginning of the block. */ +static int parse_tables(struct archive_read* a, struct rar5* rar, + const uint8_t* p) +{ + int ret, value, i, w, idx = 0; + uint8_t bit_length[HUFF_BC], + table[HUFF_TABLE_SIZE], + nibble_mask = 0xF0, + nibble_shift = 4; + + enum { ESCAPE = 15 }; + + /* The data for table generation is compressed using a simple RLE-like + * algorithm when storing zeroes, so we need to unpack it first. */ + for(w = 0, i = 0; w < HUFF_BC;) { + value = (p[i] & nibble_mask) >> nibble_shift; + + if(nibble_mask == 0x0F) + ++i; + + nibble_mask ^= 0xFF; + nibble_shift ^= 4; + + /* Values smaller than 15 is data, so we write it directly. Value 15 + * is a flag telling us that we need to unpack more bytes. */ + if(value == ESCAPE) { + value = (p[i] & nibble_mask) >> nibble_shift; + if(nibble_mask == 0x0F) + ++i; + nibble_mask ^= 0xFF; + nibble_shift ^= 4; + + if(value == 0) { + /* We sometimes need to write the actual value of 15, so this + * case handles that. */ + bit_length[w++] = ESCAPE; + } else { + int k; + + /* Fill zeroes. */ + for(k = 0; k < value + 2; k++) { + bit_length[w++] = 0; + } + } + } else { + bit_length[w++] = value; + } + } + + rar->bits.in_addr = i; + rar->bits.bit_addr = nibble_shift ^ 4; + + ret = create_decode_tables(bit_length, &rar->cstate.bd, HUFF_BC); + if(ret != ARCHIVE_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Decoding huffman tables failed"); + return ARCHIVE_FATAL; + } + + for(i = 0; i < HUFF_TABLE_SIZE;) { + uint16_t num; + + ret = decode_number(a, &rar->cstate.bd, p, &num); + if(ret != ARCHIVE_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Decoding huffman tables failed"); + return ARCHIVE_FATAL; + } + + if(num < 16) { + /* 0..15: store directly */ + table[i] = (uint8_t) num; + i++; + continue; + } + + if(num < 18) { + /* 16..17: repeat previous code */ + uint16_t n; + if(ARCHIVE_OK != read_bits_16(rar, p, &n)) + return ARCHIVE_EOF; + + if(num == 16) { + n >>= 13; + n += 3; + skip_bits(rar, 3); + } else { + n >>= 9; + n += 11; + skip_bits(rar, 7); + } + + if(i > 0) { + while(n-- > 0 && i < HUFF_TABLE_SIZE) { + table[i] = table[i - 1]; + i++; + } + } else { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unexpected error when decoding huffman tables"); + return ARCHIVE_FATAL; + } + + continue; + } + + /* other codes: fill with zeroes `n` times */ + uint16_t n; + if(ARCHIVE_OK != read_bits_16(rar, p, &n)) + return ARCHIVE_EOF; + + if(num == 18) { + n >>= 13; + n += 3; + skip_bits(rar, 3); + } else { + n >>= 9; + n += 11; + skip_bits(rar, 7); + } + + while(n-- > 0 && i < HUFF_TABLE_SIZE) + table[i++] = 0; + } + + ret = create_decode_tables(&table[idx], &rar->cstate.ld, HUFF_NC); + if(ret != ARCHIVE_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Failed to create literal table"); + return ARCHIVE_FATAL; + } + + idx += HUFF_NC; + + ret = create_decode_tables(&table[idx], &rar->cstate.dd, HUFF_DC); + if(ret != ARCHIVE_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Failed to create distance table"); + return ARCHIVE_FATAL; + } + + idx += HUFF_DC; + + ret = create_decode_tables(&table[idx], &rar->cstate.ldd, HUFF_LDC); + if(ret != ARCHIVE_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Failed to create lower bits of distances table"); + return ARCHIVE_FATAL; + } + + idx += HUFF_LDC; + + ret = create_decode_tables(&table[idx], &rar->cstate.rd, HUFF_RC); + if(ret != ARCHIVE_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Failed to create repeating distances table"); + return ARCHIVE_FATAL; + } + + return ARCHIVE_OK; +} + +/* Parses the block header, verifies its CRC byte, and saves the header + * fields inside the `hdr` pointer. */ +static int parse_block_header(struct archive_read* a, const uint8_t* p, + ssize_t* block_size, struct compressed_block_header* hdr) +{ + memcpy(hdr, p, sizeof(struct compressed_block_header)); + + if(hdr->block_flags.byte_count > 2) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unsupported block header size (was %d, max is 2)", + hdr->block_flags.byte_count); + return ARCHIVE_FATAL; + } + + /* This should probably use bit reader interface in order to be more + * future-proof. */ + *block_size = 0; + switch(hdr->block_flags.byte_count) { + /* 1-byte block size */ + case 0: + *block_size = *(const uint8_t*) &p[2]; + break; + + /* 2-byte block size */ + case 1: + *block_size = *(const uint16_t*) &p[2]; + break; + + /* 3-byte block size */ + case 2: + *block_size = *(const uint32_t*) &p[2]; + *block_size &= 0x00FFFFFF; + break; + + /* Other block sizes are not supported. This case is not reached, + * because we have an 'if' guard before the switch that makes sure + * of it. */ + default: + return ARCHIVE_FATAL; + } + + /* Verify the block header checksum. 0x5A is a magic value and is always + * constant. */ + uint8_t calculated_cksum = 0x5A + ^ (uint8_t) hdr->block_flags_u8 + ^ (uint8_t) *block_size + ^ (uint8_t) (*block_size >> 8) + ^ (uint8_t) (*block_size >> 16); + + if(calculated_cksum != hdr->block_cksum) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Block checksum error: got 0x%02x, expected 0x%02x", + hdr->block_cksum, calculated_cksum); + + return ARCHIVE_FATAL; + } + + return ARCHIVE_OK; +} + +/* Convinience function used during filter processing. */ +static int parse_filter_data(struct rar5* rar, const uint8_t* p, + uint32_t* filter_data) +{ + int i, bytes; + uint32_t data = 0; + + if(ARCHIVE_OK != read_consume_bits(rar, p, 2, &bytes)) + return ARCHIVE_EOF; + + bytes++; + + for(i = 0; i < bytes; i++) { + uint16_t byte; + + if(ARCHIVE_OK != read_bits_16(rar, p, &byte)) { + return ARCHIVE_EOF; + } + + data += (byte >> 8) << (i * 8); + skip_bits(rar, 8); + } + + *filter_data = data; + return ARCHIVE_OK; +} + +/* Function is used during sanity checking. */ +static int is_valid_filter_block_start(struct rar5* rar, + uint32_t start) +{ + const int64_t block_start = (ssize_t) start + rar->cstate.write_ptr; + const int64_t last_bs = rar->cstate.last_block_start; + const ssize_t last_bl = rar->cstate.last_block_length; + + if(last_bs == 0 || last_bl == 0) { + /* We didn't have any filters yet, so accept this offset. */ + return 1; + } + + if(block_start >= last_bs + last_bl) { + /* Current offset is bigger than last block's end offset, so + * accept current offset. */ + return 1; + } + + /* Any other case is not a normal situation and we should fail. */ + return 0; +} + +/* The function will create a new filter, read its parameters from the input + * stream and add it to the filter collection. */ +static int parse_filter(struct archive_read* ar, const uint8_t* p) { + uint32_t block_start, block_length; + uint16_t filter_type; + struct rar5* rar = get_context(ar); + + /* Read the parameters from the input stream. */ + if(ARCHIVE_OK != parse_filter_data(rar, p, &block_start)) + return ARCHIVE_EOF; + + if(ARCHIVE_OK != parse_filter_data(rar, p, &block_length)) + return ARCHIVE_EOF; + + if(ARCHIVE_OK != read_bits_16(rar, p, &filter_type)) + return ARCHIVE_EOF; + + filter_type >>= 13; + skip_bits(rar, 3); + + /* Perform some sanity checks on this filter parameters. Note that we + * allow only DELTA, E8/E9 and ARM filters here, because rest of filters + * are not used in RARv5. */ + + if(block_length < 4 || + block_length > 0x400000 || + filter_type > FILTER_ARM || + !is_valid_filter_block_start(rar, block_start)) + { + archive_set_error(&ar->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Invalid " + "filter encountered"); + return ARCHIVE_FATAL; + } + + /* Allocate a new filter. */ + struct filter_info* filt = add_new_filter(rar); + if(filt == NULL) { + archive_set_error(&ar->archive, ENOMEM, "Can't allocate memory for a " + "filter descriptor."); + return ARCHIVE_FATAL; + } + + filt->type = filter_type; + filt->block_start = rar->cstate.write_ptr + block_start; + filt->block_length = block_length; + + rar->cstate.last_block_start = filt->block_start; + rar->cstate.last_block_length = filt->block_length; + + /* Read some more data in case this is a DELTA filter. Other filter types + * don't require any additional data over what was already read. */ + if(filter_type == FILTER_DELTA) { + int channels; + + if(ARCHIVE_OK != read_consume_bits(rar, p, 5, &channels)) + return ARCHIVE_EOF; + + filt->channels = channels + 1; + } + + return ARCHIVE_OK; +} + +static int decode_code_length(struct rar5* rar, const uint8_t* p, + uint16_t code) +{ + int lbits, length = 2; + if(code < 8) { + lbits = 0; + length += code; + } else { + lbits = code / 4 - 1; + length += (4 | (code & 3)) << lbits; + } + + if(lbits > 0) { + int add; + + if(ARCHIVE_OK != read_consume_bits(rar, p, lbits, &add)) + return -1; + + length += add; + } + + return length; +} + +static int copy_string(struct archive_read* a, int len, int dist) { + struct rar5* rar = get_context(a); + const int cmask = rar->cstate.window_mask; + const int64_t write_ptr = rar->cstate.write_ptr + rar->cstate.solid_offset; + int i; + + /* The unpacker spends most of the time in this function. It would be + * a good idea to introduce some optimizations here. + * + * Just remember that this loop treats buffers that overlap differently + * than buffers that do not overlap. This is why a simple memcpy(3) call + * will not be enough. */ + + for(i = 0; i < len; i++) { + const ssize_t write_idx = (write_ptr + i) & cmask; + const ssize_t read_idx = (write_ptr + i - dist) & cmask; + rar->cstate.window_buf[write_idx] = rar->cstate.window_buf[read_idx]; + } + + rar->cstate.write_ptr += len; + return ARCHIVE_OK; +} + +static int do_uncompress_block(struct archive_read* a, const uint8_t* p) { + struct rar5* rar = get_context(a); + uint16_t num; + int ret; + + const int cmask = rar->cstate.window_mask; + const struct compressed_block_header* hdr = &rar->last_block_hdr; + const uint8_t bit_size = 1 + hdr->block_flags.bit_size; + + while(1) { + if(rar->cstate.write_ptr - rar->cstate.last_write_ptr > + (rar->cstate.window_size >> 1)) { + + /* Don't allow growing data by more than half of the window size + * at a time. In such case, break the loop; next call to this + * function will continue processing from this moment. */ + + break; + } + + if(rar->bits.in_addr > rar->cstate.cur_block_size - 1 || + (rar->bits.in_addr == rar->cstate.cur_block_size - 1 && + rar->bits.bit_addr >= bit_size)) + { + /* If the program counter is here, it means the function has + * finished processing the block. */ + rar->cstate.block_parsing_finished = 1; + break; + } + + /* Decode the next literal. */ + if(ARCHIVE_OK != decode_number(a, &rar->cstate.ld, p, &num)) { + return ARCHIVE_EOF; + } + + /* Num holds a decompression literal, or 'command code'. + * + * - Values lower than 256 are just bytes. Those codes can be stored + * in the output buffer directly. + * + * - Code 256 defines a new filter, which is later used to transform + * the data block accordingly to the filter type. The data block + * needs to be fully uncompressed first. + * + * - Code bigger than 257 and smaller than 262 define a repetition + * pattern that should be copied from an already uncompressed chunk + * of data. + */ + + if(num < 256) { + /* Directly store the byte. */ + + int64_t write_idx = rar->cstate.solid_offset + + rar->cstate.write_ptr++; + + rar->cstate.window_buf[write_idx & cmask] = (uint8_t) num; + continue; + } else if(num >= 262) { + uint16_t dist_slot; + int len = decode_code_length(rar, p, num - 262), + dbits, + dist = 1; + + if(len == -1) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Failed to decode the code length"); + + return ARCHIVE_FATAL; + } + + if(ARCHIVE_OK != decode_number(a, &rar->cstate.dd, p, &dist_slot)) + { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Failed to decode the distance slot"); + + return ARCHIVE_FATAL; + } + + if(dist_slot < 4) { + dbits = 0; + dist += dist_slot; + } else { + dbits = dist_slot / 2 - 1; + dist += (2 | (dist_slot & 1)) << dbits; + } + + if(dbits > 0) { + if(dbits >= 4) { + uint32_t add = 0; + uint16_t low_dist; + + if(dbits > 4) { + if(ARCHIVE_OK != read_bits_32(rar, p, &add)) { + /* Return EOF if we can't read more data. */ + return ARCHIVE_EOF; + } + + skip_bits(rar, dbits - 4); + add = (add >> (36 - dbits)) << 4; + dist += add; + } + + if(ARCHIVE_OK != decode_number(a, &rar->cstate.ldd, p, + &low_dist)) + { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_PROGRAMMER, + "Failed to decode the distance slot"); + + return ARCHIVE_FATAL; + } + + dist += low_dist; + } else { + /* dbits is one of [0,1,2,3] */ + int add; + + if(ARCHIVE_OK != read_consume_bits(rar, p, dbits, &add)) { + /* Return EOF if we can't read more data. */ + return ARCHIVE_EOF; + } + + dist += add; + } + } + + if(dist > 0x100) { + len++; + + if(dist > 0x2000) { + len++; + + if(dist > 0x40000) { + len++; + } + } + } + + dist_cache_push(rar, dist); + rar->cstate.last_len = len; + + if(ARCHIVE_OK != copy_string(a, len, dist)) + return ARCHIVE_FATAL; + + continue; + } else if(num == 256) { + /* Create a filter. */ + ret = parse_filter(a, p); + if(ret != ARCHIVE_OK) + return ret; + + continue; + } else if(num == 257) { + if(rar->cstate.last_len != 0) { + if(ARCHIVE_OK != copy_string(a, rar->cstate.last_len, + rar->cstate.dist_cache[0])) + { + return ARCHIVE_FATAL; + } + } + + continue; + } else if(num < 262) { + const int index = num - 258; + const int dist = dist_cache_touch(rar, index); + + uint16_t len_slot; + int len; + + if(ARCHIVE_OK != decode_number(a, &rar->cstate.rd, p, &len_slot)) { + return ARCHIVE_FATAL; + } + + len = decode_code_length(rar, p, len_slot); + rar->cstate.last_len = len; + + if(ARCHIVE_OK != copy_string(a, len, dist)) + return ARCHIVE_FATAL; + + continue; + } + + /* The program counter shouldn't reach here. */ + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Unsupported block code: 0x%02x", num); + + return ARCHIVE_FATAL; + } + + return ARCHIVE_OK; +} + +/* Binary search for the RARv5 signature. */ +static int scan_for_signature(struct archive_read* a) { + const uint8_t* p; + const int chunk_size = 512; + ssize_t i; + + /* If we're here, it means we're on an 'unknown territory' data. + * There's no indication what kind of data we're reading here. It could be + * some text comment, any kind of binary data, digital sign, dragons, etc. + * + * We want to find a valid RARv5 magic header inside this unknown data. */ + + /* Is it possible in libarchive to just skip everything until the + * end of the file? If so, it would be a better approach than the + * current implementation of this function. */ + + while(1) { + if(!read_ahead(a, chunk_size, &p)) + return ARCHIVE_EOF; + + for(i = 0; i < chunk_size - rar5_signature_size; i++) { + if(memcmp(&p[i], rar5_signature, rar5_signature_size) == 0) { + /* Consume the number of bytes we've used to search for the + * signature, as well as the number of bytes used by the + * signature itself. After this we should be standing on a + * valid base block header. */ + (void) consume(a, i + rar5_signature_size); + return ARCHIVE_OK; + } + } + + consume(a, chunk_size); + } + + return ARCHIVE_FATAL; +} + +/* This function will switch the multivolume archive file to another file, + * i.e. from part03 to part 04. */ +static int advance_multivolume(struct archive_read* a) { + int lret; + struct rar5* rar = get_context(a); + + /* A small state machine that will skip unnecessary data, needed to + * switch from one multivolume to another. Such skipping is needed if + * we want to be an stream-oriented (instead of file-oriented) + * unpacker. + * + * The state machine starts with `rar->main.endarc` == 0. It also + * assumes that current stream pointer points to some base block header. + * + * The `endarc` field is being set when the base block parsing function + * encounters the 'end of archive' marker. + */ + + while(1) { + if(rar->main.endarc == 1) { + rar->main.endarc = 0; + while(ARCHIVE_RETRY == skip_base_block(a)); + break; + } else { + /* Skip current base block. In order to properly skip it, + * we really need to simply parse it and discard the results. */ + + lret = skip_base_block(a); + + /* The `skip_base_block` function tells us if we should continue + * with skipping, or we should stop skipping. We're trying to skip + * everything up to a base FILE block. */ + + if(lret != ARCHIVE_RETRY) { + /* If there was an error during skipping, or we have just + * skipped a FILE base block... */ + + if(rar->main.endarc == 0) { + return lret; + } else { + continue; + } + } + } + } + + return ARCHIVE_OK; +} + +/* Merges the partial block from the first multivolume archive file, and + * partial block from the second multivolume archive file. The result is + * a chunk of memory containing the whole block, and the stream pointer + * is advanced to the next block in the second multivolume archive file. */ +static int merge_block(struct archive_read* a, ssize_t block_size, + const uint8_t** p) +{ + struct rar5* rar = get_context(a); + ssize_t cur_block_size, partial_offset = 0; + const uint8_t* lp; + int ret; + + /* Set a flag that we're in the switching mode. */ + rar->cstate.switch_multivolume = 1; + + /* Reallocate the memory which will hold the whole block. */ + if(rar->vol.push_buf) + free((void*) rar->vol.push_buf); + + rar->vol.push_buf = malloc(block_size); + if(!rar->vol.push_buf) { + archive_set_error(&a->archive, ENOMEM, "Can't allocate memory for a " + "merge block buffer."); + return ARCHIVE_FATAL; + } + + /* A single block can span across multiple multivolume archive files, + * so we use a loop here. This loop will consume enough multivolume + * archive files until the whole block is read. */ + + while(1) { + /* Get the size of current block chunk in this multivolume archive + * file and read it. */ + cur_block_size = + rar5_min(rar->file.bytes_remaining, block_size - partial_offset); + + if(!read_ahead(a, cur_block_size, &lp)) + return ARCHIVE_EOF; + + /* Sanity check; there should never be a situation where this function + * reads more data than the block's size. */ + if(partial_offset + cur_block_size > block_size) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Consumed too much data when merging blocks."); + return ARCHIVE_FATAL; + } + + /* Merge previous block chunk with current block chunk, or create + * first block chunk if this is our first iteration. */ + memcpy(&rar->vol.push_buf[partial_offset], lp, cur_block_size); + + /* Advance the stream read pointer by this block chunk size. */ + if(ARCHIVE_OK != consume(a, cur_block_size)) + return ARCHIVE_EOF; + + /* Update the pointers. `partial_offset` contains information about + * the sum of merged block chunks. */ + partial_offset += cur_block_size; + rar->file.bytes_remaining -= cur_block_size; + + /* If `partial_offset` is the same as `block_size`, this means we've + * merged all block chunks and we have a valid full block. */ + if(partial_offset == block_size) { + break; + } + + /* If we don't have any bytes to read, this means we should switch + * to another multivolume archive file. */ + if(rar->file.bytes_remaining == 0) { + ret = advance_multivolume(a); + if(ret != ARCHIVE_OK) + return ret; + } + } + + *p = rar->vol.push_buf; + + /* If we're here, we can resume unpacking by processing the block pointed + * to by the `*p` memory pointer. */ + + return ARCHIVE_OK; +} + +static int process_block(struct archive_read* a) { + const uint8_t* p; + struct rar5* rar = get_context(a); + int ret; + + /* If we don't have any data to be processed, this most probably means + * we need to switch to the next volume. */ + if(rar->main.volume && rar->file.bytes_remaining == 0) { + ret = advance_multivolume(a); + if(ret != ARCHIVE_OK) + return ret; + } + + if(rar->cstate.block_parsing_finished) { + ssize_t block_size; + + rar->cstate.block_parsing_finished = 0; + + /* The header size won't be bigger than 6 bytes. */ + if(!read_ahead(a, 6, &p)) { + /* Failed to prefetch data block header. */ + return ARCHIVE_EOF; + } + + /* + * Read block_size by parsing block header. Validate the header by + * calculating CRC byte stored inside the header. Size of the header is + * not constant (block size can be stored either in 1 or 2 bytes), + * that's why block size is left out from the `compressed_block_header` + * structure and returned by `parse_block_header` as the second + * argument. */ + + ret = parse_block_header(a, p, &block_size, &rar->last_block_hdr); + if(ret != ARCHIVE_OK) + return ret; + + /* Skip block header. Next data is huffman tables, if present. */ + ssize_t to_skip = sizeof(struct compressed_block_header) + + rar->last_block_hdr.block_flags.byte_count + 1; + + if(ARCHIVE_OK != consume(a, to_skip)) + return ARCHIVE_EOF; + + rar->file.bytes_remaining -= to_skip; + + /* The block size gives information about the whole block size, but + * the block could be stored in split form when using multi-volume + * archives. In this case, the block size will be bigger than the + * actual data stored in this file. Remaining part of the data will + * be in another file. */ + + ssize_t cur_block_size = + rar5_min(rar->file.bytes_remaining, block_size); + + if(block_size > rar->file.bytes_remaining) { + /* If current blocks' size is bigger than our data size, this + * means we have a multivolume archive. In this case, skip + * all base headers until the end of the file, proceed to next + * "partXXX.rar" volume, find its signature, skip all headers up + * to the first FILE base header, and continue from there. + * + * Note that `merge_block` will update the `rar` context structure + * quite extensively. */ + + ret = merge_block(a, block_size, &p); + if(ret != ARCHIVE_OK) { + return ret; + } + + cur_block_size = block_size; + + /* Current stream pointer should be now directly *after* the + * block that spanned through multiple archive files. `p` pointer + * should have the data of the *whole* block (merged from + * partial blocks stored in multiple archives files). */ + } else { + rar->cstate.switch_multivolume = 0; + + /* Read the whole block size into memory. This can take up to + * 8 megabytes of memory in theoretical cases. Might be worth to + * optimize this and use a standard chunk of 4kb's. */ + + if(!read_ahead(a, 4 + cur_block_size, &p)) { + /* Failed to prefetch block data. */ + return ARCHIVE_EOF; + } + } + + rar->cstate.block_buf = p; + rar->cstate.cur_block_size = cur_block_size; + + rar->bits.in_addr = 0; + rar->bits.bit_addr = 0; + + if(rar->last_block_hdr.block_flags.is_table_present) { + /* Load Huffman tables. */ + ret = parse_tables(a, rar, p); + if(ret != ARCHIVE_OK) { + /* Error during decompression of Huffman tables. */ + return ret; + } + } + } else { + p = rar->cstate.block_buf; + } + + /* Uncompress the block, or a part of it, depending on how many bytes + * will be generated by uncompressing the block. + * + * In case too many bytes will be generated, calling this function again + * will resume the uncompression operation. */ + ret = do_uncompress_block(a, p); + if(ret != ARCHIVE_OK) { + return ret; + } + + if(rar->cstate.block_parsing_finished && + rar->cstate.switch_multivolume == 0 && + rar->cstate.cur_block_size > 0) + { + /* If we're processing a normal block, consume the whole block. We + * can do this because we've already read the whole block to memory. + */ + if(ARCHIVE_OK != consume(a, rar->cstate.cur_block_size)) + return ARCHIVE_FATAL; + + rar->file.bytes_remaining -= rar->cstate.cur_block_size; + } else if(rar->cstate.switch_multivolume) { + /* Don't consume the block if we're doing multivolume processing. + * The volume switching function will consume the proper count of + * bytes instead. */ + + rar->cstate.switch_multivolume = 0; + } + + return ARCHIVE_OK; +} + +/* Pops the `buf`, `size` and `offset` from the "data ready" stack. + * + * Returns ARCHIVE_OK when those arguments can be used, ARCHIVE_RETRY + * when there is no data on the stack. */ +static int use_data(struct rar5* rar, const void** buf, size_t* size, + int64_t* offset) +{ + int i; + + for(i = 0; i < rar5_countof(rar->cstate.dready); i++) { + struct data_ready *d = &rar->cstate.dready[i]; + + if(d->used) { + if(buf) *buf = d->buf; + if(size) *size = d->size; + if(offset) *offset = d->offset; + + d->used = 0; + return ARCHIVE_OK; + } + } + + return ARCHIVE_RETRY; +} + +/* Pushes the `buf`, `size` and `offset` arguments to the rar->cstate.dready + * FIFO stack. Those values will be popped from this stack by the `use_data` + * function. */ +static int push_data_ready(struct archive_read* a, struct rar5* rar, + const uint8_t* buf, size_t size, int64_t offset) +{ + int i; + + /* Don't push if we're in skip mode. This is needed because solid + * streams need full processing even if we're skipping data. After fully + * processing the stream, we need to discard the generated bytes, because + * we're interested only in the side effect: building up the internal + * window circular buffer. This window buffer will be used later during + * unpacking of requested data. */ + if(rar->skip_mode) + return ARCHIVE_OK; + + /* Sanity check. */ + if(offset != rar->file.last_offset + rar->file.last_size) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "Sanity " + "check error: output stream is not continuous"); + return ARCHIVE_FATAL; + } + + for(i = 0; i < rar5_countof(rar->cstate.dready); i++) { + struct data_ready* d = &rar->cstate.dready[i]; + if(!d->used) { + d->used = 1; + d->buf = buf; + d->size = size; + d->offset = offset; + + /* These fields are used only in sanity checking. */ + rar->file.last_offset = offset; + rar->file.last_size = size; + + /* Calculate the checksum of this new block before submitting + * data to libarchive's engine. */ + update_crc(rar, d->buf, d->size); + + return ARCHIVE_OK; + } + } + + /* Program counter will reach this code if the `rar->cstate.data_ready` + * stack will be filled up so that no new entries will be allowed. The + * code shouldn't allow such situation to occur. So we treat this case + * as an internal error. */ + + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "Error: " + "premature end of data_ready stack"); + return ARCHIVE_FATAL; +} + +/* This function uncompresses the data that is stored in the <FILE> base + * block. + * + * The FILE base block looks like this: + * + * <header><huffman tables><block_1><block_2>...<block_n> + * + * The <header> is a block header, that is parsed in parse_block_header(). + * It's a "compressed_block_header" structure, containing metadata needed + * to know when we should stop looking for more <block_n> blocks. + * + * <huffman tables> contain data needed to set up the huffman tables, needed + * for the actual decompression. + * + * Each <block_n> consists of series of literals: + * + * <literal><literal><literal>...<literal> + * + * Those literals generate the uncompression data. They operate on a circular + * buffer, sometimes writing raw data into it, sometimes referencing + * some previous data inside this buffer, and sometimes declaring a filter + * that will need to be executed on the data stored in the circular buffer. + * It all depends on the literal that is used. + * + * Sometimes blocks produce output data, sometimes they don't. For example, for + * some huge files that use lots of filters, sometimes a block is filled with + * only filter declaration literals. Such blocks won't produce any data in the + * circular buffer. + * + * Sometimes blocks will produce 4 bytes of data, and sometimes 1 megabyte, + * because a literal can reference previously decompressed data. For example, + * there can be a literal that says: 'append a byte 0xFE here', and after + * it another literal can say 'append 1 megabyte of data from circular buffer + * offset 0x12345'. This is how RAR format handles compressing repeated + * patterns. + * + * The RAR compressor creates those literals and the actual efficiency of + * compression depends on what those literals are. The literals can also + * be seen as a kind of a non-turing-complete virtual machine that simply + * tells the decompressor what it should do. + * */ + +static int do_uncompress_file(struct archive_read* a) { + struct rar5* rar = get_context(a); + int ret; + int64_t max_end_pos; + + if(!rar->cstate.initialized) { + /* Don't perform full context reinitialization if we're processing + * a solid archive. */ + if(!rar->main.solid || !rar->cstate.window_buf) { + init_unpack(rar); + } + + rar->cstate.initialized = 1; + } + + if(rar->cstate.all_filters_applied == 1) { + /* We use while(1) here, but standard case allows for just 1 iteration. + * The loop will iterate if process_block() didn't generate any data at + * all. This can happen if the block contains only filter definitions + * (this is common in big files). */ + + while(1) { + ret = process_block(a); + if(ret == ARCHIVE_EOF || ret == ARCHIVE_FATAL) + return ret; + + if(rar->cstate.last_write_ptr == rar->cstate.write_ptr) { + /* The block didn't generate any new data, so just process + * a new block. */ + continue; + } + + /* The block has generated some new data, so break the loop. */ + break; + } + } + + /* Try to run filters. If filters won't be applied, it means that + * insufficient data was generated. */ + ret = apply_filters(a); + if(ret == ARCHIVE_RETRY) { + return ARCHIVE_OK; + } else if(ret == ARCHIVE_FATAL) { + return ARCHIVE_FATAL; + } + + /* If apply_filters() will return ARCHIVE_OK, we can continue here. */ + + if(cdeque_size(&rar->cstate.filters) > 0) { + /* Check if we can write something before hitting first filter. */ + struct filter_info* flt; + + /* Get the block_start offset from the first filter. */ + if(CDE_OK != cdeque_front(&rar->cstate.filters, cdeque_filter_p(&flt))) + { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Can't read first filter"); + return ARCHIVE_FATAL; + } + + max_end_pos = rar5_min(flt->block_start, rar->cstate.write_ptr); + } else { + /* There are no filters defined, or all filters were applied. This + * means we can just store the data without any postprocessing. */ + max_end_pos = rar->cstate.write_ptr; + } + + if(max_end_pos == rar->cstate.last_write_ptr) { + /* We can't write anything yet. The block uncompression function did + * not generate enough data, and no filter can be applied. At the same + * time we don't have any data that can be stored without filter + * postprocessing. This means we need to wait for more data to be + * generated, so we can apply the filters. + * + * Signal the caller that we need more data to be able to do anything. + */ + return ARCHIVE_RETRY; + } else { + /* We can write the data before hitting the first filter. So let's + * do it. The push_window_data() function will effectively return + * the selected data block to the user application. */ + push_window_data(a, rar, rar->cstate.last_write_ptr, max_end_pos); + rar->cstate.last_write_ptr = max_end_pos; + } + + return ARCHIVE_OK; +} + +static int uncompress_file(struct archive_read* a) { + int ret; + + while(1) { + /* Sometimes the uncompression function will return a 'retry' signal. + * If this will happen, we have to retry the function. */ + ret = do_uncompress_file(a); + if(ret != ARCHIVE_RETRY) + return ret; + } +} + + +static int do_unstore_file(struct archive_read* a, + struct rar5* rar, + const void** buf, + size_t* size, + int64_t* offset) +{ + const uint8_t* p; + + if(rar->file.bytes_remaining == 0 && rar->main.volume > 0 && + rar->generic.split_after > 0) + { + int ret; + + rar->cstate.switch_multivolume = 1; + ret = advance_multivolume(a); + rar->cstate.switch_multivolume = 0; + + if(ret != ARCHIVE_OK) { + /* Failed to advance to next multivolume archive file. */ + return ret; + } + } + + size_t to_read = rar5_min(rar->file.bytes_remaining, 64 * 1024); + + if(!read_ahead(a, to_read, &p)) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "I/O error " + "when unstoring file"); + return ARCHIVE_FATAL; + } + + if(ARCHIVE_OK != consume(a, to_read)) { + return ARCHIVE_EOF; + } + + if(buf) *buf = p; + if(size) *size = to_read; + if(offset) *offset = rar->cstate.last_unstore_ptr; + + rar->file.bytes_remaining -= to_read; + rar->cstate.last_unstore_ptr += to_read; + + update_crc(rar, p, to_read); + return ARCHIVE_OK; +} + +static int do_unpack(struct archive_read* a, struct rar5* rar, + const void** buf, size_t* size, int64_t* offset) +{ + enum COMPRESSION_METHOD { + STORE = 0, FASTEST = 1, FAST = 2, NORMAL = 3, GOOD = 4, BEST = 5 + }; + + if(rar->file.service > 0) { + return do_unstore_file(a, rar, buf, size, offset); + } else { + switch(rar->cstate.method) { + case STORE: + return do_unstore_file(a, rar, buf, size, offset); + case FASTEST: + /* fallthrough */ + case FAST: + /* fallthrough */ + case NORMAL: + /* fallthrough */ + case GOOD: + /* fallthrough */ + case BEST: + return uncompress_file(a); + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Compression method not supported: 0x%08x", + rar->cstate.method); + + return ARCHIVE_FATAL; + } + } + +#if !defined WIN32 + /* Not reached. */ + return ARCHIVE_OK; +#endif +} + +static int verify_checksums(struct archive_read* a) { + int verify_crc; + struct rar5* rar = get_context(a); + + /* Check checksums only when actually unpacking the data. There's no need + * to calculate checksum when we're skipping data in solid archives + * (skipping in solid archives is the same thing as unpacking compressed + * data and discarding the result). */ + + if(!rar->skip_mode) { + /* Always check checkums if we're not in skip mode */ + verify_crc = 1; + } else { + /* We can override the logic above with a compile-time option + * NO_CRC_ON_SOLID_SKIP. This option is used during debugging, and it + * will check checksums of unpacked data even when we're skipping it. + */ + +#if defined CHECK_CRC_ON_SOLID_SKIP + /* Debug case */ + verify_crc = 1; +#else + /* Normal case */ + verify_crc = 0; +#endif + } + + if(verify_crc) { + /* During unpacking, on each unpacked block we're calling the + * update_crc() function. Since we are here, the unpacking process is + * already over and we can check if calculated checksum (CRC32 or + * BLAKE2sp) is the same as what is stored in the archive. + */ + if(rar->file.stored_crc32 > 0) { + /* Check CRC32 only when the file contains a CRC32 value for this + * file. */ + + if(rar->file.calculated_crc32 != rar->file.stored_crc32) { + /* Checksums do not match; the unpacked file is corrupted. */ + + DEBUG_CODE { + printf("Checksum error: CRC32 (was: %08x, expected: %08x)\n", + rar->file.calculated_crc32, rar->file.stored_crc32); + } + +#ifndef DONT_FAIL_ON_CRC_ERROR + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Checksum error: CRC32"); + return ARCHIVE_FATAL; +#endif + } else { + DEBUG_CODE { + printf("Checksum OK: CRC32 (%08x/%08x)\n", + rar->file.stored_crc32, + rar->file.calculated_crc32); + } + } + } + + if(rar->file.has_blake2 > 0) { + /* BLAKE2sp is an optional checksum algorithm that is added to + * RARv5 archives when using the `-htb` switch during creation of + * archive. + * + * We now finalize the hash calculation by calling the `final` + * function. This will generate the final hash value we can use to + * compare it with the BLAKE2sp checksum that is stored in the + * archive. + * + * The return value of this `final` function is not very helpful, + * as it guards only against improper use. This is why we're + * explicitly ignoring it. */ + + uint8_t b2_buf[32]; + (void) blake2sp_final(&rar->file.b2state, b2_buf, 32); + + if(memcmp(&rar->file.blake2sp, b2_buf, 32) != 0) { +#ifndef DONT_FAIL_ON_CRC_ERROR + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Checksum error: BLAKE2"); + + return ARCHIVE_FATAL; +#endif + } + } + } + + /* Finalization for this file has been successfully completed. */ + return ARCHIVE_OK; +} + +static int verify_global_checksums(struct archive_read* a) { + return verify_checksums(a); +} + +static int rar5_read_data(struct archive_read *a, const void **buff, + size_t *size, int64_t *offset) { + int ret; + struct rar5* rar = get_context(a); + + if(!rar->skip_mode && (rar->cstate.last_write_ptr > rar->file.unpacked_size)) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, + "Unpacker has written too many bytes"); + return ARCHIVE_FATAL; + } + + ret = use_data(rar, buff, size, offset); + if(ret == ARCHIVE_OK) + return ret; + + ret = do_unpack(a, rar, buff, size, offset); + if(ret != ARCHIVE_OK) { + return ret; + } + + if(rar->file.bytes_remaining == 0 && + rar->cstate.last_write_ptr == rar->file.unpacked_size) + { + /* If all bytes of current file were processed, run finalization. + * + * Finalization will check checksum against proper values. If + * some of the checksums will not match, we'll return an error + * value in the last `archive_read_data` call to signal an error + * to the user. */ + + return verify_global_checksums(a); + } + + return ARCHIVE_OK; +} + +static int rar5_read_data_skip(struct archive_read *a) { + struct rar5* rar = get_context(a); + + if(rar->main.solid) { + /* In solid archives, instead of skipping the data, we need to extract + * it, and dispose the result. The side effect of this operation will + * be setting up the initial window buffer state needed to be able to + * extract the selected file. */ + + int ret; + + /* Make sure to process all blocks in the compressed stream. */ + while(rar->file.bytes_remaining > 0) { + /* Setting the "skip mode" will allow us to skip checksum checks + * during data skipping. Checking the checksum of skipped data + * isn't really necessary and it's only slowing things down. + * + * This is incremented instead of setting to 1 because this data + * skipping function can be called recursively. */ + rar->skip_mode++; + + /* We're disposing 1 block of data, so we use triple NULLs in + * arguments. + */ + ret = rar5_read_data(a, NULL, NULL, NULL); + + /* Turn off "skip mode". */ + rar->skip_mode--; + + if(ret < 0) { + /* Propagate any potential error conditions to the caller. */ + return ret; + } + } + } else { + /* In standard archives, we can just jump over the compressed stream. + * Each file in non-solid archives starts from an empty window buffer. + */ + + if(ARCHIVE_OK != consume(a, rar->file.bytes_remaining)) { + return ARCHIVE_FATAL; + } + + rar->file.bytes_remaining = 0; + } + + return ARCHIVE_OK; +} + +static int64_t rar5_seek_data(struct archive_read *a, int64_t offset, + int whence) +{ + (void) a; + (void) offset; + (void) whence; + + /* We're a streaming unpacker, and we don't support seeking. */ + + return ARCHIVE_FATAL; +} + +static int rar5_cleanup(struct archive_read *a) { + struct rar5* rar = get_context(a); + + if(rar->cstate.window_buf) + free(rar->cstate.window_buf); + + if(rar->cstate.filtered_buf) + free(rar->cstate.filtered_buf); + + if(rar->vol.push_buf) + free(rar->vol.push_buf); + + free_filters(rar); + cdeque_free(&rar->cstate.filters); + + free(rar); + a->format->data = NULL; + + return ARCHIVE_OK; +} + +static int rar5_capabilities(struct archive_read * a) { + (void) a; + return 0; +} + +static int rar5_has_encrypted_entries(struct archive_read *_a) { + (void) _a; + + /* Unsupported for now. */ + return ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED; +} + +static int rar5_init(struct rar5* rar) { + ssize_t i; + + memset(rar, 0, sizeof(struct rar5)); + + /* Decrypt the magic signature pattern. Check the comment near the + * `rar5_signature` symbol to read the rationale behind this. */ + + if(rar5_signature[0] == 243) { + for(i = 0; i < rar5_signature_size; i++) { + rar5_signature[i] ^= 0xA1; + } + } + + if(CDE_OK != cdeque_init(&rar->cstate.filters, 8192)) + return ARCHIVE_FATAL; + + return ARCHIVE_OK; +} + +int archive_read_support_format_rar5(struct archive *_a) { + struct archive_read* ar; + int ret; + struct rar5* rar; + + if(ARCHIVE_OK != (ret = get_archive_read(_a, &ar))) + return ret; + + rar = malloc(sizeof(*rar)); + if(rar == NULL) { + archive_set_error(&ar->archive, ENOMEM, "Can't allocate rar5 data"); + return ARCHIVE_FATAL; + } + + if(ARCHIVE_OK != rar5_init(rar)) { + archive_set_error(&ar->archive, ENOMEM, "Can't allocate rar5 filter " + "buffer"); + return ARCHIVE_FATAL; + } + + ret = __archive_read_register_format(ar, + rar, + "rar5", + rar5_bid, + rar5_options, + rar5_read_header, + rar5_read_data, + rar5_read_data_skip, + rar5_seek_data, + rar5_cleanup, + rar5_capabilities, + rar5_has_encrypted_entries); + + if(ret != ARCHIVE_OK) { + (void) rar5_cleanup(ar); + } + + return ret; +} diff --git a/libarchive/archive_read_support_format_xar.c b/libarchive/archive_read_support_format_xar.c index 602fc7722144..c4dd915a2c0e 100644 --- a/libarchive/archive_read_support_format_xar.c +++ b/libarchive/archive_read_support_format_xar.c @@ -167,6 +167,9 @@ struct xar_file { #define HAS_FFLAGS 0x01000 #define HAS_XATTR 0x02000 #define HAS_ACL 0x04000 +#define HAS_CTIME 0x08000 +#define HAS_MTIME 0x10000 +#define HAS_ATIME 0x20000 uint64_t id; uint64_t length; @@ -695,9 +698,15 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry) */ file_free(file); } - archive_entry_set_atime(entry, file->atime, 0); - archive_entry_set_ctime(entry, file->ctime, 0); - archive_entry_set_mtime(entry, file->mtime, 0); + if (file->has & HAS_ATIME) { + archive_entry_set_atime(entry, file->atime, 0); + } + if (file->has & HAS_CTIME) { + archive_entry_set_ctime(entry, file->ctime, 0); + } + if (file->has & HAS_MTIME) { + archive_entry_set_mtime(entry, file->mtime, 0); + } archive_entry_set_gid(entry, file->gid); if (file->gname.length > 0 && archive_entry_copy_gname_l(entry, file->gname.s, @@ -967,7 +976,7 @@ move_reading_point(struct archive_read *a, uint64_t offset) return ((int)step); xar->offset += step; } else { - int64_t pos = __archive_read_seek(a, offset, SEEK_SET); + int64_t pos = __archive_read_seek(a, xar->h_base + offset, SEEK_SET); if (pos == ARCHIVE_FAILED) { archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC, @@ -1767,8 +1776,8 @@ file_new(struct archive_read *a, struct xar *xar, struct xmlattr_list *list) } file->parent = xar->file; file->mode = 0777 | AE_IFREG; - file->atime = time(NULL); - file->mtime = time(NULL); + file->atime = 0; + file->mtime = 0; xar->file = file; xar->xattr = NULL; for (attr = list->first; attr != NULL; attr = attr->next) { @@ -2751,15 +2760,15 @@ xml_data(void *userData, const char *s, int len) xar->file->uid = atol10(s, len); break; case FILE_CTIME: - xar->file->has |= HAS_TIME; + xar->file->has |= HAS_TIME | HAS_CTIME; xar->file->ctime = parse_time(s, len); break; case FILE_MTIME: - xar->file->has |= HAS_TIME; + xar->file->has |= HAS_TIME | HAS_MTIME; xar->file->mtime = parse_time(s, len); break; case FILE_ATIME: - xar->file->has |= HAS_TIME; + xar->file->has |= HAS_TIME | HAS_ATIME; xar->file->atime = parse_time(s, len); break; case FILE_DATA_LENGTH: diff --git a/libarchive/archive_write_set_format_gnutar.c b/libarchive/archive_write_set_format_gnutar.c index 2d858c9f752c..1966c53fff14 100644 --- a/libarchive/archive_write_set_format_gnutar.c +++ b/libarchive/archive_write_set_format_gnutar.c @@ -339,7 +339,7 @@ archive_write_gnutar_header(struct archive_write *a, * case getting WCS failed. On POSIX, this is a * normal operation. */ - if (p != NULL && p[strlen(p) - 1] != '/') { + if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') { struct archive_string as; archive_string_init(&as); diff --git a/libarchive/archive_write_set_format_pax.c b/libarchive/archive_write_set_format_pax.c index 3cebeae187dc..6f78c48bd651 100644 --- a/libarchive/archive_write_set_format_pax.c +++ b/libarchive/archive_write_set_format_pax.c @@ -660,7 +660,7 @@ archive_write_pax_header(struct archive_write *a, * case getting WCS failed. On POSIX, this is a * normal operation. */ - if (p != NULL && p[strlen(p) - 1] != '/') { + if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') { struct archive_string as; archive_string_init(&as); diff --git a/libarchive/archive_write_set_format_v7tar.c b/libarchive/archive_write_set_format_v7tar.c index 62b15229444c..53c0db0e2041 100644 --- a/libarchive/archive_write_set_format_v7tar.c +++ b/libarchive/archive_write_set_format_v7tar.c @@ -284,7 +284,7 @@ archive_write_v7tar_header(struct archive_write *a, struct archive_entry *entry) * case getting WCS failed. On POSIX, this is a * normal operation. */ - if (p != NULL && p[strlen(p) - 1] != '/') { + if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') { struct archive_string as; archive_string_init(&as); diff --git a/libarchive/test/CMakeLists.txt b/libarchive/test/CMakeLists.txt index 3bc8b775263e..3927748576c6 100644 --- a/libarchive/test/CMakeLists.txt +++ b/libarchive/test/CMakeLists.txt @@ -150,6 +150,7 @@ IF(ENABLE_TEST) test_read_format_rar_encryption_header.c test_read_format_rar_encryption_partially.c test_read_format_rar_invalid1.c + test_read_format_rar5.c test_read_format_raw.c test_read_format_tar.c test_read_format_tar_concatenated.c diff --git a/libarchive/test/test_read_format_rar5.c b/libarchive/test/test_read_format_rar5.c new file mode 100644 index 000000000000..2196123ddbc5 --- /dev/null +++ b/libarchive/test/test_read_format_rar5.c @@ -0,0 +1,728 @@ +/*- + * Copyright (c) 2018 Grzegorz Antoniak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "test.h" + +/* Some tests will want to calculate some CRC32's, and this header can + * help. */ +#define __LIBARCHIVE_BUILD +#include <archive_crc32.h> + +#define PROLOGUE(reffile) \ + struct archive_entry *ae; \ + struct archive *a; \ + \ + (void) a; /* Make the compiler happy if we won't use this variables */ \ + (void) ae; /* in the test cases. */ \ + \ + extract_reference_file(reffile); \ + assert((a = archive_read_new()) != NULL); \ + assertA(0 == archive_read_support_filter_all(a)); \ + assertA(0 == archive_read_support_format_all(a)); \ + assertA(0 == archive_read_open_filename(a, reffile, 10240)) + +#define PROLOGUE_MULTI(reffile) \ + struct archive_entry *ae; \ + struct archive *a; \ + \ + (void) a; \ + (void) ae; \ + \ + extract_reference_files(reffile); \ + assert((a = archive_read_new()) != NULL); \ + assertA(0 == archive_read_support_filter_all(a)); \ + assertA(0 == archive_read_support_format_all(a)); \ + assertA(0 == archive_read_open_filenames(a, reffile, 10240)) + + +#define EPILOGUE() \ + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); \ + assertEqualInt(ARCHIVE_OK, archive_read_free(a)) + +static +int verify_data(const uint8_t* data_ptr, int magic, int size) { + int i = 0; + + /* This is how the test data inside test files was generated; + * we are re-generating it here and we check if our re-generated + * test data is the same as in the test file. If this test is + * failing it's either because there's a bug in the test case, + * or the unpacked data is corrupted. */ + + for(i = 0; i < size / 4; ++i) { + const int k = i + 1; + const signed int* lptr = (const signed int*) &data_ptr[i * 4]; + signed int val = k * k - 3 * k + (1 + magic); + + if(val < 0) + val = 0; + + /* *lptr is a value inside unpacked test file, val is the + * value that should be in the unpacked test file. */ + + if(*lptr != val) + return 0; + } + + return 1; +} + +static +int extract_one(struct archive* a, struct archive_entry* ae, uint32_t crc) { + la_ssize_t fsize, read; + uint8_t* buf; + int ret = 1; + uint32_t computed_crc; + + fsize = archive_entry_size(ae); + buf = malloc(fsize); + if(buf == NULL) + return 1; + + read = archive_read_data(a, buf, fsize); + if(read != fsize) { + assertEqualInt(read, fsize); + goto fn_exit; + } + + computed_crc = crc32(0, buf, fsize); + assertEqualInt(computed_crc, crc); + ret = 0; + +fn_exit: + free(buf); + return ret; +} + +DEFINE_TEST(test_read_format_rar5_stored) +{ + const char helloworld_txt[] = "hello libarchive test suite!\n"; + la_ssize_t file_size = sizeof(helloworld_txt) - 1; + char buff[64]; + + PROLOGUE("test_read_format_rar5_stored.rar"); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("helloworld.txt", archive_entry_pathname(ae)); + assertA((int) archive_entry_mtime(ae) > 0); + assertA((int) archive_entry_ctime(ae) == 0); + assertA((int) archive_entry_atime(ae) == 0); + assertEqualInt(file_size, archive_entry_size(ae)); + assertEqualInt(33188, archive_entry_mode(ae)); + assertA(file_size == archive_read_data(a, buff, file_size)); + assertEqualMem(buff, helloworld_txt, file_size); + assertEqualInt(archive_entry_is_encrypted(ae), 0); + + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_compressed) +{ + const int DATA_SIZE = 1200; + uint8_t buff[DATA_SIZE]; + + PROLOGUE("test_read_format_rar5_compressed.rar"); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA((int) archive_entry_mtime(ae) > 0); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + verify_data(buff, 0, DATA_SIZE); + + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiple_files) +{ + const int DATA_SIZE = 4096; + uint8_t buff[DATA_SIZE]; + + PROLOGUE("test_read_format_rar5_multiple_files.rar"); + + /* There should be 4 files inside this test file. Check for their + * existence, and also check the contents of those test files. */ + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 1, DATA_SIZE)); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 2, DATA_SIZE)); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 3, DATA_SIZE)); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 4, DATA_SIZE)); + + /* There should be no more files in this archive. */ + + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +/* This test is really the same as the test above, but it deals with a solid + * archive instead of a regular archive. The test solid archive contains the + * same set of files as regular test archive, but it's size is 2x smaller, + * because solid archives reuse the window buffer from previous compressed + * files, so it's able to compress lots of small files more effectively. */ + +DEFINE_TEST(test_read_format_rar5_multiple_files_solid) +{ + const int DATA_SIZE = 4096; + uint8_t buff[DATA_SIZE]; + + PROLOGUE("test_read_format_rar5_multiple_files_solid.rar"); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 1, DATA_SIZE)); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 2, DATA_SIZE)); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 3, DATA_SIZE)); + + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertEqualInt(DATA_SIZE, archive_entry_size(ae)); + assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE)); + assertA(verify_data(buff, 4, DATA_SIZE)); + + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiarchive_skip_all) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive.part01.rar", + "test_read_format_rar5_multiarchive.part02.rar", + "test_read_format_rar5_multiarchive.part03.rar", + "test_read_format_rar5_multiarchive.part04.rar", + "test_read_format_rar5_multiarchive.part05.rar", + "test_read_format_rar5_multiarchive.part06.rar", + "test_read_format_rar5_multiarchive.part07.rar", + "test_read_format_rar5_multiarchive.part08.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("home/antek/temp/build/unrar5/libarchive/bin/bsdcat_test", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("home/antek/temp/build/unrar5/libarchive/bin/bsdtar_test", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiarchive_skip_all_but_first) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive.part01.rar", + "test_read_format_rar5_multiarchive.part02.rar", + "test_read_format_rar5_multiarchive.part03.rar", + "test_read_format_rar5_multiarchive.part04.rar", + "test_read_format_rar5_multiarchive.part05.rar", + "test_read_format_rar5_multiarchive.part06.rar", + "test_read_format_rar5_multiarchive.part07.rar", + "test_read_format_rar5_multiarchive.part08.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertA(0 == extract_one(a, ae, 0x35277473)); + assertA(0 == archive_read_next_header(a, &ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiarchive_skip_all_but_second) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive.part01.rar", + "test_read_format_rar5_multiarchive.part02.rar", + "test_read_format_rar5_multiarchive.part03.rar", + "test_read_format_rar5_multiarchive.part04.rar", + "test_read_format_rar5_multiarchive.part05.rar", + "test_read_format_rar5_multiarchive.part06.rar", + "test_read_format_rar5_multiarchive.part07.rar", + "test_read_format_rar5_multiarchive.part08.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertA(0 == extract_one(a, ae, 0xE59665F8)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_blake2) +{ + const la_ssize_t proper_size = 814; + uint8_t buf[proper_size]; + + PROLOGUE("test_read_format_rar5_blake2.rar"); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualInt(proper_size, archive_entry_size(ae)); + + /* Should blake2 calculation fail, we'll get a failure return + * value from archive_read_data(). */ + + assertA(proper_size == archive_read_data(a, buf, proper_size)); + + /* To be extra pedantic, let's also check crc32 of the poem. */ + assertEqualInt(crc32(0, buf, proper_size), 0x7E5EC49E); + + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_arm_filter) +{ + /* This test unpacks a file that uses an ARM filter. The DELTA + * and X86 filters are tested implicitly in the "multiarchive_skip" + * test. */ + + const la_ssize_t proper_size = 90808; + uint8_t buf[proper_size]; + + PROLOGUE("test_read_format_rar5_arm.rar"); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualInt(proper_size, archive_entry_size(ae)); + assertA(proper_size == archive_read_data(a, buf, proper_size)); + + /* Yes, RARv5 unpacker itself should calculate the CRC, but in case + * the DONT_FAIL_ON_CRC_ERROR define option is enabled during compilation, + * let's still fail the test if the unpacked data is wrong. */ + assertEqualInt(crc32(0, buf, proper_size), 0x886F91EB); + + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_stored_skip_all) +{ + const char* fname = "test_read_format_rar5_stored_manyfiles.rar"; + + PROLOGUE(fname); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("make_uue.tcl", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_stored_skip_in_part) +{ + const char* fname = "test_read_format_rar5_stored_manyfiles.rar"; + char buf[6]; + + /* Skip first, extract in part rest. */ + + PROLOGUE(fname); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("make_uue.tcl", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(6 == archive_read_data(a, buf, 6)); + assertEqualInt(0, memcmp(buf, "Cebula", 6)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(4 == archive_read_data(a, buf, 4)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_stored_skip_all_but_first) +{ + const char* fname = "test_read_format_rar5_stored_manyfiles.rar"; + char buf[405]; + + /* Extract first, skip rest. */ + + PROLOGUE(fname); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("make_uue.tcl", archive_entry_pathname(ae)); + assertA(405 == archive_read_data(a, buf, sizeof(buf))); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_stored_skip_all_in_part) +{ + const char* fname = "test_read_format_rar5_stored_manyfiles.rar"; + char buf[4]; + + /* Extract in part all */ + + PROLOGUE(fname); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("make_uue.tcl", archive_entry_pathname(ae)); + assertA(4 == archive_read_data(a, buf, 4)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(4 == archive_read_data(a, buf, 4)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(4 == archive_read_data(a, buf, 4)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive_solid.part01.rar", + "test_read_format_rar5_multiarchive_solid.part02.rar", + "test_read_format_rar5_multiarchive_solid.part03.rar", + "test_read_format_rar5_multiarchive_solid.part04.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_first) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive_solid.part01.rar", + "test_read_format_rar5_multiarchive_solid.part02.rar", + "test_read_format_rar5_multiarchive_solid.part03.rar", + "test_read_format_rar5_multiarchive_solid.part04.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x7E5EC49E)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +/* "skip_all_but_scnd" -> am I hitting the test name limit here after + * expansion of "scnd" to "second"? */ + +DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_scnd) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive_solid.part01.rar", + "test_read_format_rar5_multiarchive_solid.part02.rar", + "test_read_format_rar5_multiarchive_solid.part03.rar", + "test_read_format_rar5_multiarchive_solid.part04.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x7CCA70CD)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_third) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive_solid.part01.rar", + "test_read_format_rar5_multiarchive_solid.part02.rar", + "test_read_format_rar5_multiarchive_solid.part03.rar", + "test_read_format_rar5_multiarchive_solid.part04.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x7E13B2C6)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_last) +{ + const char* reffiles[] = { + "test_read_format_rar5_multiarchive_solid.part01.rar", + "test_read_format_rar5_multiarchive_solid.part02.rar", + "test_read_format_rar5_multiarchive_solid.part03.rar", + "test_read_format_rar5_multiarchive_solid.part04.rar", + NULL + }; + + PROLOGUE_MULTI(reffiles); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("cebula.txt", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x886F91EB)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_solid_skip_all) +{ + const char* reffile = "test_read_format_rar5_solid.rar"; + + /* Skip all */ + + PROLOGUE(reffile); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_solid_skip_all_but_first) +{ + const char* reffile = "test_read_format_rar5_solid.rar"; + + /* Extract first, skip rest */ + + PROLOGUE(reffile); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x7CCA70CD)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_solid_skip_all_but_second) +{ + const char* reffile = "test_read_format_rar5_solid.rar"; + + /* Skip first, extract second, skip rest */ + + PROLOGUE(reffile); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x7E13B2C6)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_solid_skip_all_but_last) +{ + const char* reffile = "test_read_format_rar5_solid.rar"; + + /* Skip all but last, extract last */ + + PROLOGUE(reffile); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x36A448FF)); + assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + +DEFINE_TEST(test_read_format_rar5_extract_win32) +{ + PROLOGUE("test_read_format_rar5_win32.rar"); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x7CCA70CD)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test1.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x7E13B2C6)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test2.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0xF166AFCB)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test3.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x9FB123D9)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test4.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x10C43ED4)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test5.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0xB9D155F2)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualString("test6.bin", archive_entry_pathname(ae)); + assertA(0 == extract_one(a, ae, 0x36A448FF)); + EPILOGUE(); +} diff --git a/libarchive/test/test_read_format_rar5_arm.rar.uu b/libarchive/test/test_read_format_rar5_arm.rar.uu new file mode 100644 index 000000000000..19a8904361c0 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_arm.rar.uu @@ -0,0 +1,916 @@ +begin 644 test_read_format_rar5_arm.rar +M4F%R(1H'`0"[Y3SZ#`$%"``'`0&6P(*``(S!/"8R`@,+SK\"!+C%!>V#`NN1 +M;XB`!0$296QF+4QI;G5X+4%2378W+6QS"@,3JRFO6QUI@`R+6-Q5@&9E5#(C +M9@!0A]YP23)D@&0D%C"*9$%8Q!<.!6645P45%I6X#%14]2"<"*BL0%2E*W($ +M.!`C8<"`G`DMI:E:*RM+:5HVP6"E$:RH-LJEKG`8D1`8J+8M%+O6\SOOS>]P +MP*W@]^^]]^^_O?O\_?@,MV[UO7!YPZUKS7FO-<&'XMF9UO>=[S.MYG777>M> +M;SN;DWL,_O[9(3\'_L`"`"K_L@`J@`(!_V0`90`(?]D`(4`!`/^R`$J`;;_M +M````MPQ/[73X?J'#APM<_SE:E63YR7GJ,$?>*[1@<L$P(;]9X9.C6O*2]798 +MH?]LK5KRA,\Q':LF5."5(:MI3PQ)AN7=*CA36,;GUEW<M/ZU_0Y.]X1+$F&X +MM)=C;F3JC-.MH^:'DEW*FV7E#E6GAIX8DF7)1AG$EK%;PJR]S)XB1EL>M]#_ +M7-+GLGV_:RC'WX>N[[[+\[E>\YW`M1[YLMZGK.N:2+5"\MTU`V>I+N:G,0(> +MF\_P^8]_7^3Z6%_#H^]TWLO<:W.?J7J`\=4^TCG"WGF8+Z#$Z5:J6T>$P@%Z +MRD]/8W#4%*DL\)WZOFQ/^/=,M!6OGDSSZLOID)N#U=)H^4\G".X?5=/G,Y;Y +M_\F2AN<,\APP@*7'W6D^K$V&%TSD5GYQGN;'_`+=6\NKBROP!S!H8>/]M_6` +MOCPGM>`=W716-+,M"`'Q<D3?]=&SECB>8;NO>&_ODU/*+T<O,Y53RR]Z5E(I +MYAN'S2GFU93*;ZO`7P#<7@6_?0*:=>H7P:_1K](OA%^I7ZIN>ZMC/J*</)SK +M%.)7ZU>I7ZYN/Z]3V'T%<XI3V*_9,.+7[1>J7QRYL/>14Y)?MU^Y7[MA[V7I +M99OWWRGOU_KKYAN+^PQGV5/@K_::MWVL8<U+@*U2\OOE<7&:?2T;K[/+8?[W +M9>]7]?[(A[#O^UZKIO`YO1WW`0?F]B'A/S\'W.FYSWZSI:WU:'#W;OZG!Z;< +M&=ZG23OEY_N)GRZ[NM-,O/!TE'29:Q<QO)]&\\[UG1?'[/]`9_<>7@K;&9;Z +M>VY6GS?L_MZL",WW_/_G]&ZQ.B\S\T[7]'X.GS/=97.;;H+M;>5T/F:+U:K4 +M^]=^VZKJN7<7OY->]A5/U-;^D!NEZ?U^!I^<YGYX7"GH_V>#/7;S?$$7V>J^ +MG=O5ON.RF'N/@NEAH/^,;([7"?%UGA_-]KR:NZ^7R6_[_Y^Q][4?7I_@T-'U +MOKY3P>HQ70W;[FN_#=M18>%J/*JL]Q;W^J[>7O]U[UUV_TH-ZYGO_E^G8V.P +MTT-]:^=^BN]^Z\MO<GIM1_#N87VNN_EWOTK;"OIR-[NRM>]Q5'COYWR8T7I1 +M*K8Z^%S%-:1>7_)]W^EWO.N_?YWZ^:O'0?ICZ3,_-NH-VZKW?9>9[ZF<]OSH +M7?^-[U)CKMZ,7X_SZO1O.+\')>W\7M83[_Z;KTMX_)_3O/I6$'[?*_-2\KHJ +M.D]6;%/>6$O\OV[>?O^SS5TRWK^4[_'U?3_4_7['87FSM/Y4'I]=Z;_]6=!6 +M[_O(]7]C&WU]?.^$SQN7]+8.NA[_YM/6=+L'_:X^:VV1KIS'='LA`\KU^:SM +MOI\S7T_Y<Q[O>>/_2_^][FT]Z<Q'R5YH2/N7[[NE_?Z6"Z+R?I73^'K;;FO= +M_CX=O@;,%T;L+.AG_*N.:B<Y@_Z>A->=O>1M.]J7AW=J\-S_/Y:Z:Y^Z=7/# +MKX(*KC7^++`O7"JZL95XX*OQ?=8Q5W,O4ZM559I0U7O%,'5*KS9+:*LK+QNY +M>==2&P[%]>%]QP)<5Y20&+G3+\/6JK6'[N,6Y5I\,(YFB&R\O.Y^4WSQE5RC +M#O9>7YLCMG+@KNIS\N1=%*9V7I:V4XJ3?RDVH)<J\!AJ9>=^*2ZGMY8F_-)5 +MI>7CD-9RX+NV':2R&OTEUDN5;IPIEYW%4OY<=&4Z*7^^2(;#2XK(L-'+G5(I +MJY5Y\E?;67%=2:4/CC8R^[E7?9+EI<JPLIL57X7'5-R8/^D$[EQ7XU,&7^_9 +M)-`ERJB..LN"^&4X.7E^HF)3_PY3%:>"6IE]O+D5[(+,RX:_NY.TG4BGQU]C +M+)+"J;!B]F2K!RR"_-R%9=V9>AEQW;J84N5;F2WR7I?9-12_WOG$L7(1=<9> +MW5?R$7W4RX(X/K37N&,NJWZ$*I<N\8SIWCA1#UA9>EIS+Y*7^_#E.#N45.)@ +M]HI9'9.4[%B_>)-1RXIXZ89>^4I?*NOY"\U^E-#+5=FY3F9<%&E.*EZ77DNW +MDJ\69S^636N4N^.(I+3RYM^KD*J_683R7E_))5P)<N_60U;+([Z<G+D5J#.V +M4O+WD_>Y5?["&R<N;=%)<E)OOE,1B_F4U\O2-;]M)<Z^L1]8N5?LD%1RY]\! +M^\/+SO#-*JEQU(P[R60W:,-PQ=N9?7R_V\8:V5?D<@CMP0W#EP7U%.W5<4R] +M*J^?)M9*LLAK9B_MFE5R\[1DBB*O\<EI9-_A0NED%X!R#PQ=@?>"8O$F=GY? +M[^^066EPQ9@?2XZD,OCY>=D#2LU7BR;:95^(IH57[LEP4J_UGRJ8N&<)I9+. +M#2XBKJB9UL)5[8_>/E\(C=:7.OWFE`5?K,.F5>'E-M)ODI3DY></CM^UQV-J +MSDSG`+8SJJGZN,Q^0RF0[;M\KEAZDG39/O.[R%3C>UR>0$GC.V[I@Q@C\;E, +ML(8^NK[_&8EN>$^<;E<KD,JU3__@IWD>W[OMUB+`'&0RQ^#%,3(B?;4#+=X/ +M_Y#+Y83QG[RR$^L;CLFO?UC`9H9#N\ME/K\;Y!'';23Z]7D&8@TZ$J"^<>T' +M&G?;8['`K-4_@KYC<@"//;XSON[\!<3\XZK8*O*0&3^$GXZ!;(Y')]]E<DL" +M_.4$G]<S_B5$]ELB)]9+N1)=WW6-RV.,F!^`9\!7)"]UVH/>\\#')/]W>.[J +MK6[RKRQ#RGT*?LEE&P)$F?_N01+8_'$I9-PGYJ^[0,?NK\#ONW$D"_?>`/O' +M]OE"/SW60`/ADV1^C+]ME.V7R`#Y[P2F5[?MN[`\1^\JJ95/L$P"@GWE>Y-. +MA4?0+VE/8/ZQH/^+=OE?`9+[6R@/\Y,D>5@?@#T$OH#F$T]@/6-[H);OR9]! +M?(K/@#\`_B%_<B/DP`BZ%8"M^L@1\XXI?Z)D#_#X[[*#UC<N1>A3[EFS.33^ +MP-"Z(.,GD.[6!^,ACD*X)OD3]A'[!?P04],H_^.`^._2:?_D7@G>>[[S&9-L +MC\$GT`\]!@DIX*7II"&?O(Y<G>\L9'&$'7<&2,5+501=XW'X]!"(_J$\!%UX +M';X_+&M,?WG?"0R(E<AW/>-A2$R*)U".LL)8)>VC#*`_V8P)OB6CR!<9/C#V +M,[[(B?CP%N[R8B\:#O(ELCWC)7;-7W+3Y91^.U0WRA#D"<BP_\;E.V0OR*GT +M)PIVA/HGXE>FBO(/Z%.0F[[SM6:S[W>0$ADN^[L&\I/^'"]BT>LKC@,R*`B! +M(?I!Z-NX[L$>LCX&4!6!?@V;P*O_WF1Q^-^NB#O'(D_)9>6[+P8X&I^^UE!L +M^(NFZ<H3\9,^,*57IF,R911-]&X^A;>!9?>.%W0BZ[EF6^@LGS*Y(6;IFR0( +MQ0K)G@(O!!R*C\"T)?=RB\A/Q5CUE$1:6BPF\L>LK+5L2_?==YW^0XR(!G`J +M/2W:B[^S=>@+]W6-/TR@[XUWZ0OZEB^M5W&3)7X*GT;HY8WDJP9Y25*@Y:5O +MAD'LE^07&])L7M``)]FX?2.RB6#UD:OOLME987)47?>=LR?[EH6,R/?,TXQV +M7QN,QN62[K;HOE^`NNZR619=%2][_=MWPD"#\`^1.QLI!W65:)XXZ'C,8W\B +MJ_R=-^SZ6PG38?&7_G8"W4X?JNEZ;&8#G<%QH-_Z$0NF$#`\[S[3J/S7\Z^A +M_],GQQ_?&_X(N3\''^_(N%6G],?Z9\ROX2T]+&3MDSF3RF?HZ(_]IFG6$2TA +M=%Z'%\;K;>=H.?]/BSGMQ/%U'.;;B)#@;5]^+KG\3#?>Y7>T'`G>&[XG$=W# +MSASM#[?);^[\*Z_`]^.9^5S\_SN?EF?C>_!=>%=]_R7MT4;EOY\O[',_OIO6 +MYW]N`W'0>C4>?T?ZNE\WJ/S=7YG6>5B?(Z_\'9?=[3QNUU61T_<:3N_#RF@[ +M_.YC->#X.:S&=[_093P^[TG<:?(ZKM?&[3[O9?@Z_R,3Y76>9U?YNH\WI?U= +M'Y]1Z/0;C`?MYWUJ;]_,^QR_\^6C47_6#EMY?/ZS"Q__J.W/_#_=YHQ[N88` +ML'W\5X[O^ONWCG/7$^KW_+B.YVX^29`^(%I"L9_@OK>IV/6^3]/;<U_'ZOY/ +MF=.^)[G)O+C>T<][WO3WM4GUOQX?983]8!XX%!.\/IO.BWJAMKYO/I>E@[,& +M]`K^"O'OW8&_^3]R(_!G^UI0;QRL?$>6"^O7YSJ?T.OF`O(/\>SS#CB@WP'? +M[U.G_3>9`'IC^L&RI]OB?*FOD!_V]1>PV`_Z#OHDQ$L'Q3@(^`GX`?L!^T"P +M%`/SG?6!)T&X!7ZVH;]NODF@/X"/W/^F"?V^Y0"Y`_P*@#]'Y4!ISX@%`_W1 +M^>">;K\`'Y6\',S*9TXU&0=K`WI@[C1A`Y%TS%Y[P'*G_]O_RS-=\8/A:=)\ +M^69EH?Q3BW_[W]R7/,&L[-R/=_7L%2^*->J7E1L%3'*-BJ=FHL509#\;)B=L +MH>0;][GCOEO=>0_.MG<2_2!YKI%UB?;B/+?]4C4V0L=Z/VXU'N-%&U-OM)%S +M#KU7GUX:^77JU\DO5+XI>$OAEX*].O`7I5WZ]"N^7>+K*R\J;CBJJW5=LO$7 +MM5[1?;KV2^S7L5]@O8+ZE>O7SZ\-?+KU:^27JE\4O"7PR\%>G7@+TJ[]>A7? +M+O%UE[CYU5;JNV7B+VJ]HOMU[)?9KV*^P7L%]2O7KY]>&OEUZM?)+U2^*7A+ +MX9>"O3KP%Z5=^O0KOEWBZR]Q\RJMU7;+Q%[5>T7VZ]DOLU[%?8+V"^I7KU\^ +MO#7RZ]6ODEZI?%+PE\,O!7IUX"]*I*U)U;72)U]*7Z\!1KII;W9W\3A;@>0O +M^"ZATU]^48/HQ'V_UA-_I[7U8RT#2R%H-A%#H_TC=X&ND.(4HQ>!%!]>A,F5 +MK"/_Q-27EE#ZZR3P6%X??F3*AV0#FK$NL?M:KS<CFNJ$7<71?%_KUTH?F/JJ +M^1^.F],3*13`'D*FT,@4_]>!9_$CUM0(;R!**DQ?G7\3`Y_/70DX^]/MPN=4 +M_6@(DCHM:O)(4?<][H;QYV-].\;G&Z&8`4`G!":(BM@/N11U4HV(DY&T/F[7 +MLS%[<^]$1;S.X8+&4[+N)0[,]LY3P&'Y9DAU7"C#5F>X:N`,[(+)D[/`6Q<] +MS)DX"C*NUO-0@=3VIWWC="(N$9C\C'>`T+5*J4.5(F_OD#5']'RPG43A<%W* +MB93OZZ-:*1]U<=VPV^#$7\=Z7_)`T83/6L``7B).L"`SPAVRO^AE!(GJ`JJ2 +MU5=(F7P&S,II8`IN]@E!0HOHC_E%<=%)*5_K0:4F;%"&)MMY)+U6HOLDC4,, +M4RUE$9I`>8)@@,S?1+V)H7VR$7>9IHDTKE1DE+H`\1AY"DGOZ[4>4)#?WSQP +M](E->K^FK_W6"ZS^7E<M903L[3[M].C(G$[PZ/>K7T0<$^RRVIR6OQ;,O8OE +M%*\H*6=L<7.X?:8J=/\9]Y:=Q:S'_'8TY)]8,$^>Q_]8'APUI/V/^"$/<E69 +MAHTHUL/[^>5G]9C^O&IRY6E?\?SM&'___^VFP8(9\@KX)=^O$"AVO8=2N5T; +M0+V*_MR%;6OS\7?N*\0Z&OKI'KJAC]O*?68:7E&L#QB[$+0M7`G8=Z/.6NK! +M<7W:Q;=_H8NW,\LO<@K*!M9'H&+$/5HMYS*=E4:$R\2/1C!9^[*Y91NR(T6` +M'C@+)_.V/6-0HV3</8$#^-`LI"RHY7SY)^[D%Y#<]P"#>.D-AHX8C]>E!L2D +M7827=^D28G"R\V%NA7=CW++PFU/NNEJ(?87<1[2MBUR`^VV)\PDVB;)'2^?; +M^UB',2M4S!FG#M6,.*Z$C5M+(Q5W8/LJ73<GF%.WY-E'MJ$9W\G+,CLJV*TP +M0U6V0E*]T8>'F=<R!PS?O)&+V50RF30=,&@F,=+)Z4SXAZ"\=HV5I_F!0WO, +M(/:21;<R*V,P1XA^F#Y[<25R?OAW@^P9.+?GS/037U<)IAVQEZ%:N]S>I'AB +MCS.D6]TX94@PNW9H3`L2Z/W]XXQGVFD=F?;EL9"Z!35BA@R1MB:3L([82="+ +MU\PP/0'6U]28^44,#-1KUS0H0%1QFXE\P5?(-@K\IJVZ.67JU)JA*7`Y]7*W +MYA4S42XP*B5.58:GDN-;2O4]5Q38J2%CR\&7?$!KS3;?3-!@"T@%&=.D6G2( +MFQ-BVIET#&FBI8&>\5&(9AAM,$T3`OAC>\=M&L)LEH%ZF\*E9$W;":\^/YE# +MP@?:"4OAF[.FU;-+9B[0'0S#'G!^9FP[R24[^4MW<S.6DGMG[J6QM6ODU/`T +MS0Y"<Q'ZLDGA1,4I2E_#YF;,(1MVI=M6H_<8>I;I@=L1'&JR]M\"+`$,*_1Y +M,FR%I2$>.V4)F;-#=HHFL4FRN(-`V4^HY9O^-_/TD.@DG/*`W%\4,[5D;=<\ +MRTIYK!1<MT8GMB9/V'^;BVKC52"IG#O=!(\EL^@"\;R/F9N5)GCF';Z5#QFU +M(O+%="^R!6[\,1RLQLW'!T/FBQ4^S:R3&--T'S\`.IIV$)$0]:@=%-LP9[OW +M4I%IG0-CFU$9UI(&U;-L9<R?VFR\5>9EN'L5/UU8;.]^QB7^8=C/\9:A4-W; +M81/ON4&LM)I.C9WEN.B\:K?**2D?9"3.K+21?A<+/7;G5B_$(J':7]+A;0(> +MW!`:%?AA>VI/N8,O]4+K6=()HGZQ,<.SYU4#`!0C_I8SJPS41T^];?&P0=M\ +M>BAJTNEKS3.'WRI8M\G%XM$@<@2H)$DO:_=%+:"V*3VFP'LI4#J4@NU3,,G, +M^(_<7C8$9L2)<+H-_*X4-JQTI+MC?PAU5I9&B;`.09W1:(7)RZ4#./_'OF5# +M4GZKA11OU\6I=KB?W$S^,,ON:0VR'WBS#X%)NE:[$S=VQG7J?,HE%?3>@R9/ +M!8G1<NU)S$ILVZ1LEY-_W2M?4(%%V<N!NC%IDE^=)+CS%\09?L^+I&^IK2=% +MASNKR,2A6DG?WDVE[`5%U'GNL1G++&"A[#BJSL8%7Y1=\RC:$GE$_.1FIB_T +MXO%W`I,H*^$,X-'+#XW'I.EM^-@>?;@9EVW4;+%B'B^57V!]WPQ>*W:C+L,_ +M4B??:\0`XVDI=^FHNXWAX^\.?+"T4</]B]B8=FPVQ!MBOBMR8MAMM@HJS'[0 +M^\DDX^:S\*C1,/$--0&'EUX1]UJ\!AMV$Z^S\:-^K+U#+D;:GR@_:P8(D%D9 +MNWE.[85B?WE[,>MGZ$DUDIAF7X9&PAG+<0_=?NDV&HV"U#DA;.30&S-X!&VY +M\H2$PS#O-?)3[MB*B!5\;TYV>VE`V3;#D#@B+:E)X5G>O,RSE-2?N'):H^\N +M$35L.L]1G/1K3/:*2PC%O%YW\"AV2=:$.LR!M##I2%V_9DA?7KCE*/50*BO@ +M!S(V0KF:%Z-*,2G\$JC::1FC,=M^W["Q#9-^,60>0=7(JH%Z,]4QQ.KI`SPO +M:N$/M_#E%C2>('".I2S9Y7V#AY`SDDL/%F#=1_9$+8:PR?91_RFA@4%,)LZ) +MMK(=PA37P,@C-I%>DB$?G9'":SNS@8#6+5VH!`_8-$%PCPI6/UH`^;"&=#:K +MV'UK"*A.\\7YWE_!)\>N$?\?JCS=0_"B@LS<9\9V\"GUQ6>I%*TJ"!7);YB" +M&2&&RAUN_V\6UI!,L0I-<&'SE^973T)(P]XJ+AC="L`;=TP++2H'CF!CHEV) +M+]@7+5.`(]]M1:40HVI$@96"&]T)!MK%R9DTB[>4MJ""%HK'1B/_'4?Q9^_I +M$VVFU8/YP-XK5+TMZO$Z9D"[J'#3EX%-?(H7X\&&$45C@7#_T,$(N'S^.=K4 +MVS"+."<CV!A5H\S3`,$(Z3?Y@QD7XEK!UQ:NGGH92VB8Z,(KIY0*"HE`#$&? +MR)LPMXCGM3YZCB5`J[G!X[(82>)B_<`&HW?+I'I.TA\S;,-)?B(VL`F+=$O! +M1CE?4"J$"N6R9&<T(^#"(J<N,)Z@-H>=#GX';OC7$*%&QH5@6D9^#G`Y0ZV/ +M]8_<^_]>1SI)NG,,HCJPL7ARG9ZI=;L42AD]^[K_%9^^E9GO%+$:*63WOS+- +M9?&+%M9R8AQ>*SAVKZAG)!YA9<H&;F3+;1HL*A..,!<M/%*S"DNQ*S^K+'IQ +M[)CU+-XR95JONE#W7WL!G>`S4C,FF-".MT[+-O2(V)V"+T]P+../'U^;:`8\ +M2;V9J\]&0C;$DTROGIJ3OA\50*7\)'.$-IA=;;F72>H`QF.-".J7\*-M0$\T +M5;'<ASFVA#4?ZF#,[5?'GR^+BVT?J0+43>$7LD.*,HW^;D80Y`"1-NV?+^;B +MO7#3)RS3J7MR909B](ZJPMXO2,IA3T",RRCV4?XR2L2PUXD_98D]JU.XBX>B +M%&AKRANQC_*0Y`5JI<<XRV.Y;EE'OC+K\)9^Y\4>66997'"+7G[U_,#S>@_O +MW>)@KU(0EL7`*BSLDFDQ)HPO1;%AADF_"O1DRL:9G%":<KE"NS3;F_Z63IP8 +M;;3MT,YYR7'K16JV;`&PZ::L(WE=DQVIIYEE!(3H"P(S+P&T5K5RBB;8/>^3 +M]=$;M:FA['NBNLO]E:;>$NKL`SCM,F7G56[4W.5@R9J72"VAJSFE9:J/-RQ( +MJH_>YSH0H>RS5AJ=\405OMH%H^DOM!:DMDN6(9SU\3<:#L6>!AV`*1<UYJ!6 +MWCCRR!I&VX0Z&J$%H6%Q@&"#?P<S4#4[[>FD;CBMKRS)HMDD,T0M`1$W9!4( +M\<%HG:/@!*JMH'D"$:Y%<!3^$5[EO`O3;$$7,]"A<)Z^S3-9)7:K5O4F3U+< +M?YYILP,TZA,78O=TR-IG*AMBSU@GVMHQ+TZEY`9K]A1=G7H&6TO^);7-N5<N +MA-AJ%6YMI1Z@H46\B[S;>!S],?)WQ./NJ8;HR<_N0M[^`LANT+:)?$1]&6=Q +M$9.G"D'B)6.68=:3MF2*Y\@94](F`*Q62(=X'N8DSSS%NZ_5W*RW:K*K&+*[ +M-DCC#3HA2_!B-G;Z%A))[ZBD.0'K;"J`W>D4:C-X>]NI;M4;:[//J-W?[56N +MA/VVW)XIGH'5-"JGE#4C0\<^0P.B]G,G(,/=,@L,'-F%*4#\9W+(>3HPK!E. +M8C\$V!.&+A]Y^"$GF^?_,(RF*HVSVHF[J'H8KG)LVM<60TB228GGJX>W'J1; +M>J'EQ#7$\,EU^_Y@QZKGXBF7L4W9ZP5GC"KKO`]<R_31LK`][V[H9,)=F\*] +MO7B.K_#K]G>-+XA<:O2IA^S7EJ,3$2$'31'$+[X\-`XIL,%X/.RO0<,>(+YL +MJ;946[O_KLB@O-1>94-0^C4FI$''&"H%=C?DLJ5DTK9N^*A;X^%K)]@T8Q*W +M=%_G:4K>*C@V*6C>(W-=MXHPF6>-6PFS,PQB2^TZL33<)NQXYKJVHK9'8*;7 +M5"3+"8IK#3C+"XL*:;E_XABSQ5:985\*1M@E.)4&+YSQ;EBH6>`/G.2>S9G! +M75J->V%`MXLAMB]4^F(N;#+TDUC3%VBD=D3C<F:^7UIF'.IF3]VE0'&%,/'3 +M_M8EV)(,F6JTUY+16C1HE\*B"UWD/)U1=GT1FC:$C0;*NC/A7MH2$4VEMAYH +MK:="&+4;Z334&8%QQ2G^5NF\$C-YA;X9SQK`H8#/:'#E44H&9]'R9^],&/M% +M@Q%Z+#LJYV9I0*JM'"[UOSEU-^7<+92-@2DZ1'EM*$&7QZ;?%;FF,7\(0-EA +M"EU2E\9\6'8]=Q!J8W]4SNI)PDT[$CS?78,C`3N=7HK%NCS:"B'>13-"U[/V +M_N@JRC'E\OQ]DI.I3Y=U\*,[:3[PB-'WHE>NQ)]A^5_QJFLPL;)<K_RV=N=^ +M1ERCQ"%0FPM]45KT%A>-K&2V)!:<7%\OEJV-L[HU#X;C3(XML^B'W9\JS@&* +M^'-)I=]TIIMJ;D-*`V`)'LZU@[9`[3'XZCSYC[Q*UP0-P:-P3VXZ)6S72W+" +M'JFJAKCC"+B&_N@,,`QEX&ZD=T?O.KGS?T'1RA^UGM!.TJ.//Q#!=A;K>D<D +MXX*`NA%8TM5"WZ^F_)96,GCS1L,(*Q::="AH]^*OUA"'W#L'`.^C"*'H(SSC +MI,DX.:'NLY;D&2J]E-HC3K&;8QCAEV5N)%EY0NFJ]!(W8#A[6U4B(0;M&SKG +MY3P/&O2:FGC^7U48OM=2'7U#!KD8RU/2ZN1J<T/MR\!5=1J7KZ8_)R6:GL]$ +M'T(=9=Q[=J7#[PHGW#8`CNNO[!8$+>%&@U/+@5?2Q\3HJ/"OU).K=@1`(?<" +M2$74Q=Z/>@-4@8)[P?ZB+R]ZO7T#N]QF@W?*=3TB6`9H`1FY`90W^P\M1$#R +M[=P"=CYNR<[N?URO5F161-%%1"RA>?;-THV9F;.]GPT381TTG>R4Y#YV7;Y^ +MW]X5E>C,,,<[_/FFA#)*<U8$6D1&>8_]")R]*<%WH2.R%@,D0[)!Y=9/05M> +MZI4R(EW`=7ZDN!<ZR8*K]:]:?,*OB]<G!CJG=:ZY:Y=@3139%4L_KO\R%`C5 +MHJ]7N3<%F_CZKKV8M!X.[=_`-1/]UO>B41Q#K@7&8%/1_XI)HRCZR7-,T,BY +MJ-B('J2!'EMF26GT-+WBJ2P.$BV_`&NC=PV6#6;Z*5AH(ST/S@RR5=J(*OO? +MZ)SZ<C'AW93C'B9(">)K@PLJIN[`WE@.AS78#TYAZ7X:RE&"<B3P40#V@^Y# +MB3I/'<302#<B`&N#CA0,/*ANT>V6P@WC/??(IW=^010RG(4%4KWZ#(P4&U"Z +M7L_=(IF'DI+4'W/+H\?%#GU9&A+@<F03027!+H23L#/)'HVZ\$.-RK610A0O +M/]A/_:,U*24<R8=`UH#J_`:L4Q+DHEDTJ1'V)CX:`J!3E&=F&@B:)>K\IH9% +MR%%J)]`V2DMSF[?<UR(%P2HXNVC[57+/6[,-F+6T"J8?C.E>L%%I`3P?>Y@, +MW2MS'V*]E)Q)/F2)UAB_<DNQ@J-BLO-!)O0&<;7ON03YK2*KX0V/[\K+5GR# +M-*%O&\69?B/ZP5Z+$;_++,V_5=6T7$_3U!Q.-=]J1?"O:=S3K3O#UPE^0V%] +MZK+NG@!XYO5]Y^UPCN\L9ZS,/9FFLSYL%Z&4WR4P$BS.PS#<&@\'&/@'=@>B +M"VC[6[VZ&S3^_!\P/'UD2ZR'L[/P(%T2(;,]8:\A?&%/>#/N@,?0$R=0/MQ' +M+_2BWN)C\MQ>><9'XP7L'J"1.$W,+\@'ZI`JH@._];'>0_.U*45FH;S`BA%/ +MNV''R_JSR)$IJ532JSIK^,7.DS<3T'UBDUX@\@I(>`EZ3?(T8:$52#^-VR+/ +ME%#8OF7D@B[,&QG7PH=)4$B+K[G(I<DK`'CDF05'L"JM[BF*<,W4%EUE%S74 +M)J#,D$!8R8OFM((C[0.[`"ZX85JD(/EA/N)*)<3`B(MJ::U?[F4XA>$K+!T, +MI[?E-+/V7*(::F$G&N4'H1DX88!AW_-Q$EW84D'^YZX1VZ=*@>YEG[DB$1<& +M0%/RE5K<6^%K)9T!128;&[D678_XAI03004)A@Z,/5:^1,5:]E$C_:AV!$8N +M/.A>74L&_OGHL&OVR^R#[FW/M:OW8$V'51N@#FQZ9E0OB]NH_VO-EME=E7MU +M="2;'V5;MU="U@3JOZL,;=C'%Q]:IQ5^CO7$+.1BB=D=6*R$OT017\I0]U<E +MQ9A_C7[0^ZY11.(-;&=65A'_"W-@V&'C=&$;G&'I%]TN,!(ZU4-4]!K!>$5& +MA9N1;S3-D$H9=JHO'4\0DF[_\SX[_8K^#'=0?L_^`34?^412L9`/NGEYZ"8> +M\_TAV]Y'[X"LX:]C+CKU93HQ,%FPL:W9GE%.>[W01(%7U,;BU<U&23H#906% +MNXLVF!9"9LL6::PG^Y,?-93PN/FS;<7T*K=JSL%7Q1A]4$)_,*,#6F_2+-IO +MD,?.%R&9(C[%PSLSR2\1@T`'L/&.*Z="DWQ<5GW'.7UZPEK*Z,/O+S:_!7!2 +MP<)2"@4SDP_`J_>]O?L/VEY"YN8M)Q^?<1"EA_FN\7WB]Y7]A$!B8_F,#UPP +MWU"R'QKT>F20X%ANJ&MA8^&"YV^#6T&&,0V:,.&F!)6]<)-A*'REP-)QR3)* +M";KCKP$%ZBV&.B2*-;(3-RW%LX*,`)K,/M@NR#FY$Z_'W<-A:=33X@8LP?$# +M(8>:\2<0Y$W0#(J<W$TIH:08M0`2T(;>=SV;B.W^;!B'BV??YI,Y5P,,:.!7 +MHYMIQB.?C)FS(86B0%;NQ`4<0OJNTCWXPYT;',LFQ$.!@#A#<;6'$+1*!9U5 +MEF@8+;\MQD`7-%V0(KR?S($3&PVNEF,L1-UB:*)L=KNI'ABC$.LNS3\?8\!5 +MBS)N1A>!^%-V.!#TTGH`>(C=F%,F<I`TCV@K5@>K.&4J4%6P!]OAJ#A-'GZ1 +M6%&AV?2452\9WD8YH"DQU3.N']>+3R&62O9/#/T,=7VCD>)\)>15ZG1H^5T9 +M^Z=JOG`K=@9IG,B7%@V58Y[!+DHX9LF:`?!Q5<C:M5OQ#JS%G0#38UY0B)\( +MITH+S]UH^X"D-]G%ER\8&T_%FD?MKV,Q:[Q7#6-*+R;$6%X";+1&8NX^L289 +MS,7WH.S@9PQJM8W_47+%)QT+MTU..>*=AZA-,B:QN&C3.-$6,Z1*O9D<\9U( +M1Z<)H[?>)(FY.`O&&9/FD(QO^JNH&>2IBTJ,A@!F86EWR3+DQ^)&$W91UK$1 +M?NBZY`6T.T0M$?&1S8EN&3R?&<,Z=#[WRRDD$^+V/3>=.-%B:!W0@7?NW)(M +M8M$Z<:>!KDF_@R/,V)=M^_6*D;(H'%C9AGM/`US-LBSP0,Z+8B^.]=3T,&`2 +MX`V())F[N7K-PCCS/2+C[?G6P]B:+<;\V.&N/YE.&P@31EZ6SJ@'68;H?ACZ +MA"2-AB_I.F\XL:V,GV<K4XW%A#1:,8X2C4<=H!IM5\F)2F:WJ'V#0=P<X"F# +MC1XMV,47K:K98@OSW7,I(K;(!?J7QOL'Q,,OA@#"T50WGL*T)PEXK50W3;<> +M[%RP!:21&;.*-I6(/VCD/(0MFJLA$YG&V+`%&3!*U#9"+I7_[@3]B#V)F;#> +MN:=#[VLP`9B>A%=67:Q+J'E8`YQ<7'A#A%AB6)6;9`3N%T\9X?M9]J$RAC:$ +M[Z\#")@Q>P`/RR"ZS%X6-0,F[_!HDDBISE!!2#'3B]+)>%]+?"%<:%&%EHKD +MG5Y-PQGO9P`#H8JDX"#[TX$P:J),+<>_?6?UK,:Q04LL)>@LB/0E!>E20&+B +MKVLH?+A4%,7D`MS38(64V>$4&H'AIMG6!EZL4(:%4"&+L/`P;3;^7J,A24RL +M,MIP@?-9#'EI]6,S@T"Q`NT9V;XM_#:1G;Y)@>Z$\LTSF2@N,1'UTBG@&L=; +M(^)JLSPA1P67]B)SGV`'7V4G"=!GSP3HKFF^H,.VCD05G(^WHAX.`/=*!]QC +MI=.:(,")DPB1Z6RG)'[.A4O84="7)J*82XG)2I7V$C4[Y1;AQF\[&H4]?'Y< +M*3)+X-]/-;1<]_B>!$*7<,&J2F0S4ZUW.LU%QN`9?W)'P7]W:VCSUS4#[.<0 +M3T^-Q*"]`'LOSR!<SYX%(&I7]Y%\M8R+`!67@XB&Y[3D@?VBBW%NUR-\!4(2 +MG(,[J\W$FA9+/(8]PHP6:UT@Y-'1-G0ON@!78!W\9&,"=Q0P<PA]]B9K]E]Y +M47N2]<07,/^FC41*L2V%+&T"R=22RSJ)3!!)'3EFG_;Q)E3(9X,XJ"ZI#@P\ +M.?=\@":\6TN^[^99UM'`EW2Q+,$H\UQ`ZJ,]?5L1P_^$.FK,8Z5)5%1/:_PH +MDHS@SF,&C:=,Q0LX9&HH<RU!1:G"(*CWCBPEV@0XTU`]`'%I]6(A2\?UPEW[ +M`<TJ:G`$1FZ\-=%^!R**Z-3RTTS4$RP14#`FP@JMU,H&$R%&:(#S']?%<<VY +MC91_Q?;-9!E2[N#2.G^.CFZ0(LA<8\-/@:>HPXT)'E5]B6A(!.PET:PW"3B^ +M;)]OK-&9MLD6_4OY.YH599(54RD60=PLT+ZXF+=)/&X4(`!C1H[L6%]6BMK% +M<GW33!5Q):(`!+]B<<@JA(?7J4/*D^_P%--7PM_:$102V>2RI-+,!X4Y'OC9 +MY?]+`!<#KE@,<%7W+C1*GXKXJ"#@JBEF!'2L$G71I/%4*UJGXS%#1X?0JX^Y +MCW!YI+9X%!3L)@$.N&?E/>)+"WFAB<'._NNB<%%L!_J^UDBY!;7YN*C"WM_[ +M#%O_O%[%*<4KQ>8]]7L%S`QZ;+&3$F"%O^HO0H&BC0G\-7A_TMU>Q_S6B>L: +MK%B?^T%&Z`N0GIDJEA;_="RZ:64+?YRW1HAKTQ[7^D,T7-!VK8^DK-.%:[5# +MB,YFP$#+%%O!?2SO^E1K6\M-HI-F&GF;C$+8\SLSGO/-SSC]G6C!#,QIV!^2 +M))A8RSX>GK/:@@E&+C\HR$;'J)0]>X@Z6U%!;I=4M/''\ZII1/JDRI.J0X81 +MM[LS<BQIA@$]=<IB`_9[T/RO,1W[T1IDI),E%A%3W-0,3)<K&=+ML%BP[ZUX +M+,,*,1SV#`UW([*AQ!99<)M37PR^SI%!T1![S9FZ87.`DYPQQW%CCXE7;_6O +MWN?B]KZL;#5@IL-^,A1A[M]':R1-2MV,?7X"ND)M&VI/OK8^$,.TT:@KZ&QM +M?4C+UJ89F:1<Y(K9QI&`9L%A@FX!GK9^KZ"F+=BP85T9G0[:J1PZ34G<369' +MDIAM$'1F)2S*WL2*%AJWX\1"G0.$G=]?R^M9+Q;V-]0WFH@:UR,-LN--L6D$ +M$AN=O\S`]AD.&*SKUQ4PV0HV0FZ@YH8M22U)1:N]Q%H1C&.R$@J!L@KD!MU- +MK,V3,O@[^W'UZC]#6#R-',-Q=TY:AUFIVJT<BXOX\XE(N'Z(*+&PO\S)*03Y +M[.+0!6X`]@KC[QACQ:HLC367+ZY*V6<L'X@QVS;[-Q'$\',89U;`R=QA`XY< +MYJ1I@SLZ#1O$GA7Z%61G88?.WV-")J8NCF)H=;_W035SDVZZ+J5%%XY^YIQ5 +MQ_$,FWGJ!.TY%)GS:I:[B'FH&:B5MD6-<U&=7^LB.:0F$\/;Q8./H&;%ETH$ +MX9:QEQOVITEB''$P@R(`S1Z!=[<"PPVE0ST1UL!)'%6SF->66E813.PZ63=# +MO0#FK-HW2A`[J]C(%SVJG!RH#F"(H`P-;=%T=?'PI"ZSO4M5'TT\7*H'GKC2 +M[[F^20X`V=?Z@<P(4S^NF#K'"D,S.)'COEUQ#KCLW`7A[>%C@CGAB[T,PQP( +M.U"!+$1%&&]:1KN`FP7`B&S8[$'M>+X#QTX<:3?3)9Z,6%'QJ@:7@/>JJ)-E +M"K3$DT>:WPT:`V6O"9?B97L+&P($].%7=G%0\G21AP.&#KA=7"QC:4BG'QL( +MW-%J6E$S_-9G"0EV2#;6R0:ESD9KVT#2YP3WEB#0QDV`@->8#1AE$&+FDW2: +M/`S6T6A?Z&(<W1<Y%T.G0@0#=:WP$@`@BM82+$H+1FYQSS&T9"H+$T&A&,,X +M&OU8U:(NW3:'LSFS$+;L+;G<7.GD#^>_Z<"U7!EF*H2J./[E/H,(JLZ)`<)< +MZ++9$7>3V:\.."?=.T[-%63PM`:>^O&Q^$-9>UN[.[K#250`=/T#@"&ZR.#Y +M`HW^A6]`&E#0#8L,[D9\M6IEX&&!V0M9R:BA,6GMXW)K*3HSL&2"Y>5F=G0< +M(QTQ4&2C3,\8'2R$IGGO,"?8F^A([T@N'+9_R`P\/$_1>.$EZBQ+<R]:%)M, +M9FF&?5V$"'R!,M0=GVK182Z-:\/USM9P&V4\AN+E7"1C->SXO6LK_G4>?8]G +MCFW1+>-T.,@U$)Y-P-)7KS`,Z=(6J]TS.]80!IE(=,[^M-DS3TI#$<#Y!ZWZ +MD(4E:%A0KD5XZ"RPW_FB^Z`3NK+NGLAN*QWV$,;2YL6>I?0/6@Z=#SH6^Q$7 +M-RBHG;YKF]KRDNQ![SDBXP(C^'2:9-7U9ITV3??`%L[_IF-P%"$(^ZV1]$&J +MU.QO:N@;Y<A3?%)R^6^>!RA@LK/VR1[7-EOV0[8<-:]89N**AL-/(S+_]X5) +M>XR$;G#)W9Z]#',*/6R5P??BKC^8/!3[80^\=9`PW1DYMA[5>9,>]7QB[EAG +M%[I))_LU]^;(N^ETTAXTI!%9)[-VRP>-!5+>`R%.Y<@[&S%R8H69:P8C!@5D +MXC9B(5;H*+58<V:P82.*3-1.($-,'>>@UFFG-M?VI3'7IG56K\]$G$/K(4)T +M*O`NR9V)05#4`DT]SJ;#8^/JK3LTWPD0-A^I28WW`,Z^!K(UC,*(JH:S2]8> +M*U:!K;%C57?_0Q9SHRV]7&'/C>PE^B<V((_PH[*ISIRW;HUB$K':X.ES1*:) +MXZTV-&KSC<[$=P-.G(K-,=7,\0%%5N.,F$]X]O[#A:/TI'C=,6:2GQ37?,D, +MD_D?;F<HH\ZBH98O/&_L9O];]F+"9@)HINO$G59V[^R$AY/%DIHT2\\J^2;^ +M[1A.@YO#L!7J@8\%G(>Q0=E0S%F'/C:5.9T29,'6UE#V[R\ND6?N?+_]>./W +MVZM9Z,4Q\_^0@.J;#2V^^NK#L5Z,)`;;GN5&JY*3?;$4GW]Y';,M'F'/^,:; +M]TK(G:,J<AXMG08*R;0^.7*;`(N\=%@%;&PD=RX%/NA69J=0-^WRD;!=GOG: +M#("MFPB*R"L-H%O;2$/.H#:NI\^2)@PFFNDCD6F="I:!Q7-:_P66?,[8"O'$ +M[)N1#<]D"0(S$*^+ML">ZZV-\"ZJQYH:[HR3J0M?O$3-D"5:B`RNC&]DV_QX +M:#%W*>8>C:P@GP2/CWK/1IV",XZDS<3-8`,`/JR)8%?+[PHV\/N/R#6`V6`S +MIX6F`J^"UCU?\@:;'4@)F8-I(+R\5('=FO90=+K%]$M(W!,,5#'WDK(>`JSC +M`2-2B'(Y^EE&6PPHTM0RL'\IGH9WEDDYT8_GL#;H+V>75Y)]["_IN.WEF'Z0 +MR;8I^`.&&0L<^5/8)[S=LP:"VV]_:!=1X-<Y>5>><S558.)L<E(Q[NE9R.T* +MG,P$WH;A_GUTQ^$R]L%(3C.ZW4`:"+Z,/>M#8:JB,\%CV%G^=B/PGG$#T=Z( +M_KXO$+_<L'GT"W9`RH7?C4SJ)""+[YK.);130%@AXHL^.?!-UUL=ON?Q!>D" +M3?]T"/TF:Y.&N*SPGJK\[14"/0'@DU%4F+LH%JWE.HMJW#.,$!I)MZIFF3-J +MT?VI.V9-9FJ[:(Y(-)FSQM;(^27I?.N43P&D@4;=5,GBP(6A%43E0ZC.7LH? +ML\"(VDP^X`BU=;:+;O_4BVM]V\6X/O,C*(=&<=^<+68:HTTAS+)@`64V'O6C +M1'%S&EDR^53A7#_I8PW=`B_@D.$9V93DF?)+)\6QIV::VA;T9%R7(0=&UGRP +M:EYT&ND=7P044L3PXT)[*'3[QM]4[A&0T5W`U4CH`/K<!*^;.Q,<2=VD?`#[ +M\VUD'5%AQ'#!%_:(P<F/APJW'JF>=6637Q<?<I'DX]-@W_.$@%L9#=KOK$K5 +M0M;!5])D]^=,G+\P!!N4;EG0RN@FULB^#5ANRW61JKGY8L-UQ>E#1:C@;^W? +M8,GDY!`FE.`YAZ!GJ2S74/&Z:UL-3(G=L;+NRC\H3)M"\!WKIB9%<MVG<0<^ +MX6E6L/[[3&T1LM--:,[9[5AJ^VB3MEGHFW#+YK?##;_A)ULC;A9-6,I-:&=2 +MY&.,[I)+9W_C-HYE8$:A#+$\,MXJ.Q=^?!6/BJU/.&<]SCV&<D$$B!L0(02: +M$KZ?F/"L!-!!IQ_(@U,A6\_(YPN/4;ZDF9:SV\FC@($;>7MF[ZTQND/%LM9G +M;17`?DA3M%9N@O'P0K&KSR:'Z(9MH&E$ZE*N1"%$S2O6>B>T2+/F9P&M(M3# +M"J\$2[%<I]^>IRV!:*7;60#1$6U#25$]G1G&T0T!V;B2HS5%A'8X;2:Q0&"0 +M23.4<4C^(L:$*_)R#L#7!44H]^?E#=_5C00\OAIJ>F:!LK)F`X_2W9Y3MI2V +MHM\7SL&RP$L'8-62ZC;<S*]?+M)M;TC`@`R<4;F,$KN&[JWT$;S4F.)[/IHD +MV@>8?-0LXN]8>1P%!%"O_1WS)M5!P^?^A(Q;#2BRM]LF#"T0+N7=R1^+GIV= +MAQ8(OB)D05]DQ1LDYC@,Y"HV_47P*=XO1[DR>-B78:+3\Q]ULLT,X84QNU!" +MJ62);%EPX#.QY8NW_61KZ:8V)I0BJ3F1MU)1?4-J;-1>+`\^/WJWO#0HS<7" +MFD.&>-E2KM1V35,-^L5=4:$0U`BX:=F3L+^S7QN[.RV`A681L9T+N#IMK5WM +MHI=46[GU(NZ647"P]N9TNR675-NLRM]:&78T->'J333H:4\,VV:MS]53`,65 +MQNVYL.?`PAU?J%3FBC%7H(=9OBL0K"*Y;)!L"6F(#.EF"RO0<CB"MTY1$6C) +MH@3[D!0(;*]U6:H"4LTI<JI?'E"C3/=8`%A6;XH4KJ1"/TZURT#X#,K)O2C8 +M,RBA)CD>VK/.2]4#/(-:%E`$N?D#:`C>EDID"8W`,8DNMHI'O\AI"'5=WA\H +MVF;:_@B?BIZ*[<4M"V)A[O\2<^,.?9],9`ZX9]VQ\RYB]$9<ZV&3.N:-C4', +MIS$T%4FQM&Q@=POS(ZS<AL/'B=";1)T+V>#('I2+2_CW;'R^U"C!*:=?!KVY +MBX*^%7PR?=8SG-EME=,719O9:N3#_[%_VX$[QMED=<-"3:FK06=FY55Z*]U; +M/#3-<759K@[+5*,6#>(5M,SIP(2"'FY@;4X;0`KK'[;VJ1T>;6][6+:]-9!W +M&Q("66Z"A5O-+P<ZLO79AW)^.C1Q/CXJM-Z/R&']?_0T:D'I[C]"<B"N0[_, +M2!S68^/\%8-@E_SC+LM^KH0&-8`#)&#:JVLJUE<,U:Q/R_&KR,%_A)S>@AD] +M'KI&3K%;..#@*@.@=[@OFV[/)[766T$2_@M,)J;P+(NFV`K69W`9[5\7IA4: +M^%8I$/P]V.3T;&HZ#CQ63BRJ0#;;72*+)6[:!KIB^(\Q&-)[+\U2X"G;M:$, +MTNDQVRT6=6](`%B9V7"P6(5K3D!E\`-D`SB^U*M&X#OD-"(XNC9E,Z$/BH[I +M8D^J^-H,Y]6QH-K4A#H,2H=!0<(GQK\K".W(39O093[V?T"M-VSLE#H(Y?9` +MP'*+(;G7OZ[4#79W]E\(_Y@_C"D]<,>87XE[7X%R^.+K*7TDN))*8M*L'H;T +M:2Z0V^`'*N?UK*-H[YKI@OU?=4B9J6E>C84B_&"UR*$+]L7\5]L#T/Z*5#)' +MU%&7+[5HL@;@],&F_B1B`SOO=+ODF2HBC84,&@X0M5G(SO`"7F1]C&GKB%)> +M`2D!?JP#J/X&/1[O8:6O?'&9Q8,Z8[<J?HCLXKVI</U:B;:TQ?74M<NM9$>P +M5[3K'GH>CG+.@DELA3!*C0:Y_E%33M[79R*E.UXA-!?T+)S`!3-'1QT-V1S` +MN``V@&Q]-GJPG4["(]@#/5\$[1MX2:73+NJ;T>;B%_^3[6AZ,[.AQ#&@\8N4 +M:D\;MIB5/!HT'0W9GETZFUB(6/&45'.D6==Z%UCNORV_Q<^T8K!#34,&3MGB +M#',8ZJ\]$-1GEDG.(-]R2<Q#UF^;K!ZL-USUXCQ;Q)@TG8WN!)?0IJ6VPP>H +MTS)(9XH1)="G=R2B[52LK%KOJSQ%*!8(=`ZE<`<V&PDNNK*QHF-GD?^Z5#B* +M[E[,"LU72:[Q`@/$Z8.CL??V:R32`KTW`B%+U$$2I\O9*#?F=&8)[`)9`3;U +M06$>]6B!F\1I-\=4"8;$RHR0OU$Z^U::0SW&B8A%S`'J8ZDDTUHVB%B(PV@( +M*V<B3+2/&HV^EK.TBG9P%4Z5"6)5)R%2E!YCNGE+=VP4&BC"'03C(C6_W:R# +MD58-O4E^?K>=;?A]P3U]9VXG/*6N)NW\O#_2OH5^EEM"S_T6)/]>,;<_XL+& +M-L5\7#8K_[Q#C[97L_]PQ+TLN1AM)6V`1LU2\FE&EMAM*O]C9FAKUC19X8^6 +MG:3LMLY4+/E(]BH%8K3A6++XI7@Y=7XO`WRN[Z--F/"_:KMA*Z82O!Y9CMJE +M=/_0V7+*[82NG_HCJ-\*OQ.OWTGN_[>]U/*[Y/^BB_^I;+B>W*_$P\KMJV>) +M>6JM&=AV+H;(J1%IL/Q3Z8DY`Y'8=5,=VK.XF55,L\"UB?K)X-AVJVL^ISY? +M]D+??5\*IG6?,AP8N;V-J,P>)(_U")/(:PP=R29\OP?W&-R(KU>/%5F7-&3* +M$6!'L/3,0NAN.Q&ZZ..J]'"W.)3.#*C"@,OB1H_HQ=[)[IE)=EDH&Q8=GP`5 +M<N'(:G@-#N$.E?!('1*LKM9$?_C].7B<;@)IW[`$>J,\9YH5&?ZO42)V(/*= +MU.$B.=KM(M*L(::CT-2$,#>A+SXT<;K&\,/]S!X>-AH]@SY*CH*23%`^@YV1 +MX1,VBJ"!]"\J*_>2.>6[%,](H'00Q$?H@_K4_WA)EBUY7YV-^9@IG3/$U'$' +M5[/%E->%"AB.SQI)@)K,O_1D>F>-=IY%VIG,9S-XF.-/L]W-)J$V,AAX*F#] +M"D]9G[Y-3Y'.C.9!]&+ZRV>%RW7$)4N'K/9,8Q!89K/(&=CX8.>:XPZ*@+A\ +MHG.?'[G\N^!N%>3PZWJEIOX2(<I&@1%+N2A&J1=AI<O5\JJ38?L'WN=&``Z1 +MVK@9T[D6UPOHHS&W=__@C=G+R7ED);^)[UH>>2WIR0CJDO)UWU(Q0.%TLX!; +M1,(R.VYCSGX:X7UL:9!&%YL<=*%%P?TM=MK9QF]L@D;IVG_"=0-["M>BX64M +M0_,4P*@$$[X3.>7QS]@&U(T'PB[C/JV7%;+BV8V<M[_J60UNXS[(5P37;MF& +MU06=7D]((-N8<LI>4B.!Y8[?7'@Z(:#@[D-I4O;FYX.5>2-6[!6]B0(S[1]6 +M1NWI$#8F/[27$RT8GF!6,G,CR?#W]1&RV'>'20%-CQLR8PZ\KM(^-&8+2/4A +MPH_:*4`=F?>C(M1JS]J:>N(CUY!C90ZIEG?]4EHM";6X!E%K/C]@M6F>EMB= +M#/W+;$3,L,ML+VR4X.4ERIB(4X4D,O;FL;U'F,,N]K>3UWT/5FG.BQ#=L +M%3I\T)\=(%+IXY?C4!DX[=1M82#1<NRDL$0R%&'P,Y(0K#W>41/.F/?<T!ZX +MY(>,W)K%>O#%=%UDE#MYI60H4:N,>;0XTKP:7UET4&J8Z3,XDO"W:5\U']<K +M0OC/^"9.M87Q)=8-59T%->,(O076[^'$<7=-P1GZAE4F;%XA#!C0K#PZ9"'W +MP#2,ETF0EK%8:S%)336KA!&I<W>AQ]+K1QD9]8S(H`'L0)!"-UY5!!I;9634 +MEN_';*&BEMD;4F=HJC5'\`ZUF?1B^3SWU&]WM:"\QN>U_/Z[;6@O.P2;0]%P +MT^"E"I)A<D-<:H1]Y4CSG1Q/EM!$!OV'&FK#<`XM/JF'71AKN/7L0Y[,Y&NI +ML)7RE]Y^]'EIO7)CS;2X%@IL5>)6IA']C(YXQ?/"G<^9Z@;7$;X3+";'G)=# +MJ_:@!7VZ.,$DST1QP]%"1XA-V]#N;1U#.GQ>4DVNUG$R+L-^0GE&%$W)^OM0 +MK>QP2B^O5RG6M@#EPCJ5\/N^Q!X5<4E\476^YI@+I#?L'%Z.RC\Z?9TV0`\- +M-89M8:Y#05,J'37(+853!7OI(.]@25"TZ;9;SR`AB7O=YXU'"J8-%J"?JQ/Q +MJH%AM7=\%(7,B85[FMMAJ;4(XVM[V(O#5`^[,GQ6PSV(3VU&J1I&D#@EF;CJ +M<D/8<RS8)E[QG9'KFSL#=GEP_S;GOM\TFSJ-POP&+DQS`\(.#P&C>I3<#0#L +M!`^RZUFF&^H0]-L>G,TN?V\F6;IB_'68LLX8?#"E72?A.1?4%0UC.W"F&>SX +M-ROLP/1D:8_=\%ELM`3<U'28E\+80[7<3F9:PLQ#5V3=-8U'\&\!U%-MR^Y& +MK8)VED=2.J2N8LTNFDNT&WU],$-JZ]&+:Z+SXN'"?&XO$T.Y+R-<X9;P_=QR +M&&[#-6.R8#;;#,..87XK7^EZ$G@ZC4D0SA%@WN?VR%&TT8);Y8:=*HZV690P +MV`4V%=(PHMV8B>V)3D,3&+.L'Y:=?\OTU9AKW.,B![$]@JC22=8(6$@,*,$I +MLL(JS^&?P/>`-!MMQJBCL<1TPK:RL8!PI]?9N8'5$B;FS^'<VL[I>9XRW!4O +MH"[WH;\`=P/P*N24B6Q$_UYIL88=ASUA/(9(_)&)Z&&58XFI9$4_B<=-`UYD +MJ1'MJ,&RI[!)7#_UT7T,#7`=TO;=LP.H$YB#A8^#&NL#\D3:&/=W_C6TRYFC +M8F'!(V?8XPT%?<::6\=3-JO\2G<L\Z@V5&W8NU,%MIO$G&=1'QE&L["$':'( +MAD84"R1/E%R?FW6CAL^[\6BM5O1BY>)KCL*?G#-W>FCF6>IC?0XBNX)L&#<Z +M2..64X5,7K"+<F7/*3AM`(`):+[X9\_`TV1C8/&;+:_%LZO*VQ!'[4C!.;<? +MR-F[`P]F,L_*`Q__B.0&Q$=7[31^\K[@%[1*6/$QS'[7THW_Q[%H2F$KQ9KW +MF/VG<QO_)<KM^+A,?<52FJ5XOV5?M8L57L2W%'(4MZ4MY_P<43D7A,'32%:: +MU1?HN*+UT>8_P.\':LV45CE_RB]+WG(1O\7%RKU>7\7!_Z0L_QIFO5_C[%7, +M<OZ&24O%+`9+`5YXSA0M&EDVO9W2)_,,?LYHW635S^:-EI_C,ML?CA#R76EF +M,7FJ=Q6&RZE2I,\WW=H>?NSF6H^"KIOJ]"N[7M[NKHWBNG;K[)>P7T2^77QZ +M\)?!KTJ]`NLOP)Y71:JZ;->Q7UB^?7RROIQ\]KN.[X0;A`9:!U3V'OZ<7(VL +M;M&P?(SH!F0*37?W6I?_1$!ES=-_PUG/219Z-UV=<;\4XO4N!R':_0I8DF.1 +M(K\.\Z?<@8?YIV^4CM;<$,BZJR0]XM2>)`POO)8,6?,GY2C96)E_,8'>R7PJ +MF!^51!_,OO?SKY?]"\3S5ZG:+O/U+VBG662C4^>O2^@OHK->VVR]#Z*\)3P% +MYW;J->IVB^[7N%[9=^%(53#L5\>SRMQZC(**/*$"N?J33?XD;V'8[@5;6R/U +M$[.+F8B1/4?>:-H6+T,'%4\-K,.G=.A2A\>I`1>,0[@8<5A]`T=RXG%6'[YE +MOBK;!O-F'3Y<R%P#G\<DSUI#YD0L]0"\9")VH9Q.!V+T]^]PV36$'79QQ!K- +M(A+\Q#G<E+S*89VS1SWK-G]F==B6CJKBL4"%M`>Z<<9:/6@^T9+M4],-SA`) +M]UA9)R/7S.@HE"XS@&R=#D@PY)RZW91]^SWXN:F6IPA9^1\+/Z.DS`VV^N:9 +MP+1T4-H?G3<F3IU$U6R[_+/ZX\_!'B%B<[W9C\DM%YU'3X6<'>RC\`"P!*=& +MT/S-^.^"=L_BJEZ`DQW8_GD#IW$I#:*\DPS;/?;#B=N-;X]8S1,BH"<[P=0L +M\#DC3U#^)=4PXS$>8L+!Q[AW\9/R,8O%9>L()CG/"W'N`3I\\-YG<$FFBG4N +M0JN#MN,H-)$'AN<=.4V=A/M=,'R\,1N\!EXLS<X_A[^M3RW*K#[_FI0K3!WC +M%=(EN['/&M,W9>L+DGQKCP[ROUS.E^"9W?(]SYXJM`-J4T[P>W`S`;/$^HN6 +M"8.W:L!,B4[-PVI?LN97K>*I.SN%LP&JL[&2E-!./DM5UZ*@FG[4W@!(-=_= +M[B<K$FDL'856-XV&8,?O%_P[<ZWSR=:L#A@Z.(RIFW)X\W0OJ?!OJ#94=\ZY +M?,\AR$S^E($([@,W%SS3SM;UGG;`JNFFG+H[L9O5N-THA^Z,5S@6>EG&=;(( +M0"*?]&EK4/ARI!UNY!H<M^W[N%^=$NF6NM&69LV*!-ID&_$T@D".T9)S<@MM +M88+/)]NUO05ZLVM5\BK5M+(\7IKE_N>CN]A.N><,VI<_9_)-KV0LM0&[D;L8 +M;!9:6=1BSFDE2QJ=N0(9Y=L[[D1Z?NQFZO-;[JG;$9\PTH7UN72F+P0VO)/< +M-GI8$-#5M"*LOC"/T3"ZBIV]?]!M)'/0*D','*QG4'91#V-2V0B`%"BTX+VI +M`7.1'#\OEF=4DQ=M<_9AT(Z'%)HZ+H7C:!)=NKQ?7.*JK`6J%EU7#.QP!?K. +MQ/F2X4*,.5*>4X3MH9,%M.=13;;<G-";/,JG;;?-U:.R3<\T^4!``0X_@'O6 +MWJ1?]2I`^Q69PLST"21Y;=<I<H%0OM/(W%`]]*P'61&OS70G)TKL*.^9/U:K +MT^;.R2;$/V\D\$\>R6VNU0L>H-OP;W3RS.KICS#*NTR,).UDLXNY7QRZ'IPI +MR<E.$3AAJUT*71H](HG\J?MQ.O@$LE\I9,$-8PR9>`3!S.20%&UD.+(>.7ZX +M_%G03+]:9N57?JS**7R0R!\`A'!IG1H.UY@TN6DKQ5NUW*[DD:989I=XN;6. +M&&I,OEEYLQ;\\B22&KTX@4)5"1"[+J?XHNLT$RZD<,\\EY?VE(*:^1^)K'3! +MTMSCA0EZR>S=L5+.P82U(PU]8^YNK[E+\K5>>8!%N#VGPZYBO&EH/(P]R1O1 +M6#WF>HT_!Z9XZ)7[GHPZ5(=!62TUA"C&LQ6M.26A,]SR+W8H:2UE[9JQ9^@( +M:_01(\B.G+\41[SZ:UZ9?M4$_$>LCRC1V;YQ`#H,<&3JN/_79I;P6C?(SVQK +M;@H2:='CRK/=]CJ!A8[?@?WSX^$LL/&Y1;%CMU2Q;JO!/5"`T9"`,-.=^YFC +M=E0SPX>(Z;=SLG3!`A=*3GKH_P!B!_"(*%TZX^RQ,@$<>=[J?@H16W$K/X*S +M@..(^],FUP`R(TF29FT.%&?<;_!3NZ2&UH+IMAYU]E8R=+\DNP9!(M;*'BN@ +M.2>Q::I1T>BO,UP!S/Z\81[[]Z:G*`'+Y>25+6K9U+($#,.S[`H.1!;=71GE +M57!R:/,M2LZS@YU9F')7=783SRKULQ-5>19L:MD'V;9!=A%RS:?%:L,,FF+% +M&%H[N&=/M"HSI_^_?0'Q2;$%-M4_?,+["+LDS&G%]S5W-AQICP9DX_[$Q>Q3 +M/SFS^%L@<$SH$F3K_U]]RYHRN+TI27-L>.%!D=H"K:=?"=`@X0Q8,1D"!!!V +MJ\'"J1][U*QQ$DHZQ=\N.[#.!.1';(="HSLU?O,-B9,HP,,.0SJY/V#V'$CZ +MTQ[I\!YU!SL2`I2I7W#.QL3[*W![Q*+BG8)P+&3)HD7)TV2\_*-`(?2JUGD. +M;`374,!!V;1T]Q#AI/?+(@6*3.SC^"AL-D>K^U6`JX3?+6..!`_0%*)VQT,0 +MVMG(!/@N)@ZV/ZRE*`WF$Y9,L/:-%-8D5<&*(>-?=O)3?)MA\VU3-+,V#3JR +M6!685A^)--A3&+37@UK.-(Q'?7)N'1\($ZX_C$]*R2>81P)UA%0T'>,I@H^N +M>UT.-V<F>,PC=&>9C[33;'R\\(>D=.HBQ=\K5MLWDX>-`T=O,S=&?T>>F9ZS +MF^AA1MSP;IKG)<S^D%\?&_!U:_!_7W=.&_PJ8CA.`89.*J`+B!<$,`K6,0W_ +M:]_KD:(+0S\X79C=<%_F-=P?2S'#X3[Y??X0=AW['*]Q[7!]MO[H%'9.NXTO +M!Y1(ON-DK0N-["W<"FLNX^*5H*S>;GLQT'"<&>]',-3"6]E=)>@+H:"Y$&'N +M*`?O#-==XW[]3<[GHLB/[I=))(?28)IJ<^JRK[L"IRBKWLUPNVS&S`#,? +MNX/-9CTN%@)<MO:CR-]F.)PA,Y/A39R65=AI2<:#80P>39I<PHU6IYK-Q/O" +MR(X0AO#=U+ZJ`Z;3MBDM:4<\1N;$(T.F86<B.1:R:&KM--.W`U!47,-)R34) +MG(YO2W@1XQJL/TS6F.0R5'2/]E2<FTTX$,R^;5P@W?HWA#^M^+R!_-L8&LU# +M`TTAX'DQ_$F.W]A%LFF&X#0W`,QLN'/N*).*9M>#H-J.C^:6S[`,@C-KV).V +M?"EUQ[Q8=*2<3Q;\P+6`[DT7VTR)Q&=&>IP&$,P'V-#?++3WA16T(MFGQ39L +M?<#.WARVSH_UA!8F*62R!$"T8>&8!C#;1V&R7=D@3%G"RB*O;FDS'D`@TYDS +ML/P`&%(>ZTN<69X$]Z*V!!G3RN"P@X9/-&&\1X6P!Q%G(83"L,`,LV!I6"F> +M6/)2)E'2'9CO10'0>210"$0?*C-.KTPW#V!82<.0<DAL*M8Z9$-./F4B[*', +M_C'#]3B=LO$//$*RR4A.%$1><,RM9++Y!SC($?J3(0%6CNPF2$DL#4R!V\8V +M9_>.W+"X8L*<<*9$I5Y/R:;X7U+.2$-LB3OC\!F20CP_P+@_`AG7X#D"CHPS +M(8BA%Y^0@MM%)QZ'49DH)MZ@`99M`[YI;,Y-M,<"/KT9]G6_;Y="5VUF9%C* +M9X^`&:?YJ,.>2^@)#\^.YLA^-:.,NGF_U!7<I</V^I!/VG9/,0=*.<I;:POX +M!5@)5L0.)&HF137,9;'G<&_,C:17PLE$U9;F.@Y,5(+`(L6!DX\5PE5,"#WT +M1`@UVI++:=(I@`LU^/N?*PH,#F$3;*!D-8Q#?<@Q!121O$COAA&P[`$/$P.( +M<";2"'#TDDJQY@4+HE8I&4!_W<1\1J(V%6*(*E_RURRX[,,LV-;KD?>DN;.H +M7@5JF*#P(V)X<:86[16FORH9EIP2\9_0O)'Y)G\JBOS$SPIIA2+Q2G(]GL^% +M7Z!0D]D?L"'=.YUW!F>YY@3/L9WA+?8KN"E"Y`'-8<9CAP#SSK:BWB=RVB)Q +MYT5/\/W/8P<,%Y51\RZ^L7.>=<JI;MRLR[ZD['X&15UUPEVE(S32K&U4S#2D +MC?'X6>>2.U&3/0S1:ALO%&@UU5):ULVI.>!KJF7B#S?V<E+QGD-!O2HT#/YZ +M)C[9/&\[X[_:F9_.M*3,@&<=%K(`399VMBY4HFKA@7A>!RS/:1D33JB6BQ+& +MC;HQ8;*%%/=NLRBG[ZOMIT(2\FQY'=INM>$_)M(5&["`"BM4M?ZS?.S)K;6L +MB*@[2$I`W8FT3;2GM4G<'8LE"3/Z,+NRT\B:)4@8-0Z"WN<AY.;@CU$<V]#" +M3!(FW`+V*3G\C%&>1*:F0U^CV>-UDLG7J=`U5TF,1EY!4HQL.B7/(>?#A+K8 +MH;_:!MZ%3M;^LTR"];L6DM8YQI-LW$:_!8<0.&S,&Y".*!1QL@A:5'CK]J`. +M?KLMLK8N;1[V*G12&[ZEAVSLA+I?`75VD00P[$GIT>."Y!0+2A`C%B>NH\<( +M3D6:--\<T->^UR.LQCW%!"K9'BC\ZUK%68:=;MLW%FQP^Q,-7@Y-CXJ9;CS% +ME&CI`R'&<Q$.([(&=&"Y\?*&J44=6N_&#-\7=MXH'V;O%\M<Q>&YD:"!\;94 +M08M5LU:60SRKSV`+G<,TU,\?\G(FF3C$GK>SN"/M^_\1+L3C3EUES!IDQW)) +ME@@XA@`XV'X$'6QOA9WL#A+KN39G&WYY530GCX:X(T<K;0)T784P_%^3'5JZ +MK]J]Y!C=\*-JYP%2@X]#\',PA=C>/9G1S.X*?I%B6G\;5*#>+GPJ6\4G7T,U +MKHXDL\-5BA]A>J;1G7E:M,=')*4R'6S@]CBS;@%GB(JAM4OR-C4'AV^-O)?5 +M.!'3LL]AUHZ@A,#AK)BEA1H/7\H\$JE#G/[K#5TCFVG_5##$RCJR/1!48,H9 +MW[D,\PM=%F7N`"B:<YKNPKCVV3X^#_(\"A)&!@8&#ZM,R[S"O**^)HU20>ZV +M0.SR.-3,N1ZC9ZYI(\OWF..22PFMN48;]%C2^G`=G&7IAN\U^Q..@0DNC)*" +MC[>+O%YU>=70C(0#\HDK=9P,Q$9XSUR8LJXE,0U=&*#/J9O=>O6>',*GW6W@ +MXVMO;7/<>)P:`5#U'<7`R)MUP71^^H&13Q\QD>%OFLEPK^]P[@IPV6\)&[$] +M"J"P%\2U/B(R\>?685JIEF!#<;9AVFY\+C%EHL+,0W(9EPS:;=6K/9,%1`)? +M75K(YA4TJD?>1[A@YKN.VX3>5$SO8?-.DA+[JZ.A/<K^#,=M=>:'G"Y*6RA3 +MRL0+7T7)\+[-]N?UWR19?1<BCP[&0IM+M`[9+@Q(_E-9)M:UG"-0)2.'O[+[ +M<_Y2A+NP=;,&Q%SIZP;GC3<:F@)Q5GS5GTRE9M:$H<@&D8>F1C</NM/5K3#8 +M)FL--P1^QFH$3HGC6*V8];@OJB9X1L>Y&LA>GLG;:8S&F4A@4@.I";++I2SV +M8YKA>EW#*-#F3LBF$H(JX)LX7%270IG/*2E9=+@WA17Q;3<9254KCKU;)T;8 +M[EID<'ST=MD!SH;]P8.AL>$;H4/V!6$XT7AD@!&G,1P-/U#(,R\E8)]K\K,< +MEU29,=CMR<YA.!U.A:IC/.AP6P+M(,1/O1$F4)E\-.`0!/G<!&1F?ZWZ8N_7 +M9'6M3KI#^#/QCHRZ(W6%HWR^J0;TU"":,:CE:%'A^R53A12$'>,]3%]WU=%& +M*D'5E,GKHEK&O/0QIQI[([AZ@6^@QGR<5(/2K"]X,@<E@@,.(+JQL*1)[%G[ +M`,%`58G/Y*P!(P["LM)T=@5ZC?Z:&8!?50/TX1_C"/;*9:6>N3LDY(?**;56 +M/K'DHQ1$U.>%PEIREX0T`X>W7,?RX)M+ONYV?"ZC[%CPNI[,>3/V.:X1=4-U +M`%)X\T%%2C(Z8T,/A4H5Q@X4D<6.<C%)9F_`+L,#<]7.HS+@-7<&3$AH;KZ? +MU\,6W^66G$</0CT9`K#0`-R29=*,AR:-$#K3^GB=1=^W5Z[@H,'ZMTV2\@J" +MI0+<C!'@G2?E*A2(ZM:=A=P>D%&]*^T-Z>LNYB#-6B.R/>01$,^^430`RT?W +M6)@YF,Z?::+0)H1A)^T9C7YTMR8_OE.RY<=.SZV^'6GG#_<[TU8U^";<SWHF +MBDOTI[%\U,'[TV2\].D<K3R-+,_C^S#/3?5P(ZHM$+\NQ:DOC#60.:^+6A4T +MF6@L"W7WVI2GVD>D6^&(Z@?7/^8O6E)*V#P.Y)VLB6[L?>LGZ2)*F%,]:25) +M>YG.8.DB.H7WF-7&%:DTAC_"RX*7G)%G""U=\:T[@J*8%_05CWO8:%#Z#R4: +M"+E;"2/:=$$%LD^H"!M+V3,X)N3,KB7'PJ*@[_D-2PH=<?\`D^&,U2,;V&L5 +M%/8)_BH"',ZLU6F4(96=,5P3X=<!I-UX?Z:*-P"!$/%QR'I[,G*>:U]!_D@9 +MTCD01B[.Q(&DS43-!UP4Z6S;F>2FK`]E2BB&@B&F6JK9RPI2'3)3BW9$)K4< +MNAUMH'9^QC.O8=:8'^*YO>M&JE%OHM?,3H>CC[=BH72C2V=)$P1I`!62D(<Z +M:F@1B!JAH3B:*S:]'=$7R&?\$>G:_(1#;B89XOW-P$EP8#8''24Q0T!VX'<U +M%#,_U\@C?[A_C01MQMX=4T^;M>8A=RR>G4O3C]K4M@)PNBO-Q4]V%A/38\<# +M]WR;)L8=)-U_<1,4"J-,-75FWVBB/;FD'/:V)>'9L&]IO8;UDSPP+U*T6+9Y +M,`:F/V[!/BXEX<0+.@#),.I)8&951#(S10!0=[Z%T6)6V[!`XF0D=#`8@:06 +M@&V8,<+&=;:;$`ALZ9C74`H($FN@Z'',Q`@8,!R)@-P9"01&YS'S,?.8IC<Y +MDR8^3B8-N...9CF-N0R8YSEJT)LCQXX9G'CCY,;#RMU5_?:WNK5I"<3><YSS +MSGY<_@EX455;Z-;UK?1K>MZWU77\I55[NJ^W6_=U7WOOV]_5>JVKN_%?BOQ? +MQ0[^#BLLB[D,^R!\F0()UK9IB-0U,K31`G>;[K/3O9^2F?K-58>FE"].,F9N +M"8MYQX,W'X5"#.1=['E-\R$KIVSEEEX_2`,V(PVPH7P3.QFZ!E,GS5*1P,!\ +MI;CU14)RT\PBNYPR9*AL!];QXPQ6V)R5N3+!NJF92G26%HRZJ0I1I)OJ".Z/ +MG*!.>*#9@3Y]3/$+<]K(B7W'(9QYP9E)VG7?E49UAMSVTB*5.+7H7J.B.'JR +MLS%XAM*8L;3ZE%M.!0&&78R80TAYF/OJ8A8ACH(ZR_3")E^)H#($?#-<('H@ +MQ_QYSQH\$0-VS:QDS+1+_3*C*'AG<Y]4PBZ.YDD.,:<!#FP'5,1!'3DO./4Q +MSF%J"=/!P5UWGAJ-^])3&MQ?%7F-NN09GGEAPVULX17YSJ9G(I]^3G.#(S9\ +MX(U(Y<5T=&><8L=WNG].]S;2:4`9Y9DB7<).E+Q9BX5+U,@8*A!XCBQ7M:HX +MOZ(;,@%B^`-<!00]4B7E^Q@(P,R%S&E>Q2P3E@I;R"S(IT?_PD*-@J(+0^]J +M)2B5C7:WJ#2=7E4L-E&4L(1&/MBO)XI:X%N&(O"F$Y7^!>7DUVFY%[D2I!C; +MN`9G(<3>2)]H=#A>28M;@"+I/,P701G'X'S\5Q22SYM.FX*6N^N^?&]!-_8M +M=Z+]YQ+M)XOTWWA'#D@4@1.=L`4P%XCJ,;B;6SFG!4)PX)#7OZA1N^GG7-M& +MMDC1Z[!"FIQAI3@T>:;TG&'8DFG&0J3BCWKYT%IC?^H8(;"7=OGA$1`$],7M +MY?W_ZJ=<KI?#UM^&J#/XEX:*.@34">>I$#I[WM#!+4%U%H1H=S<=/;@%GFO! +M'G6EK_[LN-I.KSU+[UDWZSFGS^!EQIOJ<U_/$>XAMG$7O>&]I[`VUV86K`Q< +M%%(OKK5POMYB!J/ABW9LL2DRPJ,C-72"_\D#,HS:\,!"C6O-]A'*06E[\6F- +MY>FY:!=J+XKR#AWE+L5\3BYU,0-Y]J1;&XK=,M832^HBNH];QPR6Y/6&>=6, +M#8UB07Z4U*WUI*4PKPQ1+^VG_0P$I?#6QSCFO7O9I7C>*[E]A2G*!$*-@O.L +M_'E4^[FF'6`N"&PC<#:7?(BK#$!SEBR2H,&(K@&M&,Q$EY(A*_KXDVKY$@L) +MSX82OJPU?=\6;5\D)5A*YAJS#;2(&594`/@+4MX3U/NI&)B\J]Q`Q;7`5E.\ +M4S5@K@UD/VM#S6^\5S[KQ"D)@X&U5^*E7O2%HG5_%T=[*#/@OMYBH.N1![@M +M?$GW;I7I,XCV"V6JU]$*^Q9PU*P+?&!K(6MDP'!F[E,!@,AT@!-+`'ON1926 +MW=.G&1.ZUWZ(@Y\G=/?^4+A']Q.8B:N-_$"8L%`@&F,.*&0CWA(\IUUQ<HY+ +M"D"C36""6&[COXG:R.FDH$U3784R9,8<V;NJL;W(*@#A`?;-T\*E0H2#WY7- +M.H>DB?`Q0EFV@ZA[IRE<QILH0EZ(@,6UGTH][D).:&0<6\&$]7@PIJ4`A3QV +MKID$FU4HRO[JZ<TCJYT.N5>SMSOX\U3\".S&6X9[O-7V#UG!&IL5/,33]J6" +ME4RU"8TG",@-WN6%B#K\]),T]'6<$@&-J1Y<;"+-DBGJC+YCC%ICX+B).%$A +MF[`<)TXV&8G<-@"Q7R:1]<K4C$0-$@:D^9E4H8/@7T-G5]M_<6L@%;8OL"IW +M2K6JI;&V+#7/IF"SOA;SVGR+O=/>>D?>8%OQTDG];*?19A@X^CY$S,19T*NO +MV.:OAGIOM+N470JYO4B`WOK2:TT_K(&`R>7G+(H$HUO*,%*L4MU#22286U6N +M8H3[S%P(;,F++`D5$`G]=[.1UKNHW]P-^_.MC!NSLZ6=(BA+;:Q0,"\.09NZ +MX,<#,Y,B":I:ZZ==)^K>X9X1*#1!*,&28R9MY&!Q$6P1;9G#)ADKUY:S9D3W +MRTNZ>,\X,=:%QF4%I=;QOXNBFR")<H6'A7L->\9#?U1K<TTN%1T7=C*8`""" +MA[W[^-:G5,"J2^2O'V3465C[D)\R>M@*39KP>=J:-<P?\EXPE:N)<7CV.:EC +M_V7MCKRZK^V^PX3UO".\(&GU-8EL+6.5YQZ;M*:'1G^H';SLG3)P+B=D$XC^ +MY'<'BG(2YM>\,Y57/7*D5LW2#@,-%A'H8^B!1Q[R#%UZ*A>O"Z`;"@'P#@W@ +M282R[2E/#%],R2LVU6"4H;WMXA-I1RKF=^S>[5E3+\ZR<#Z$U@4_UK!QI'%H +MW_>9/'FD]1_M4NJ!CIJ[V[K4'N+-@ZC',BDWT!A?$LX^*8?%J:M`ZO&`J"2_ +M.;]$NG/>`?/5"^S8C0K\1=U^9%]MD88X5]3N^IC+`NI*-\]B^OS1HOHY5R_R +M4%[=]B::)KDP;6*&>RBJB70U8]_0,DL2!(5QQ?JH("GS\U]K("7B,8S.L635 +MZ`DF5\`"=]+3!#OM,-YP6Y>J.F!W]4(J2BSDBC#^)71X;\7+P6Y>;EB$99ER +M*G)^:3S`LV&+A=#.T.=Y'AJJ5_(C&]&M&-*C8PN%MOP9"*5HIX,-)#W/A^T; +MIHL-N>!(G1>U)BUPUZ-CR3I:PZ^!(>J"/7K0(H>E#DP\/H<8RA!9-YUP_T*E +M18:#,V'!$%7#'H'PB"B>PF9D[UB@'$ZAR%K,8'>Q)-&]/)4%6+4O<CCW@>>4 +M,3@6.%WG']HS&+;S$#6QCHSC<BL+#\&.S5E-!ZK'$[8+56(/9O#HZ[".357( +M;/U@[Q[T;5#;OK=$*LW?83*&O>>>"J.N&EBF2/\;:Q]ZRXA-D*-V"Y5>:0)D +MN(2?W>2)J+5GA6`RFT=]!(IQ>Z3=]EA(2]MMI+_EB3>`YL':F$@`-MIG,'5Y +MEM>Q7NY7NC;\I5`]BO8\@X%T_*XFY=I!9,ICT.%;1E@1^$EGW'$EC3A5U,>% +M'`[@VY*!)IF>8P?U??]YT-$BG*C8@<PEX8Y+<#&?@&0Y:]0*FG*O-2O<?K][ +MWIE/5MP%70J?FMP6Z(^<^W,-YEO%-S++^IB$I5]:]N"67#0ZIS:97FLIOYFB +M3!:WT$[1E.')1KW)B"\&%"BG((*:WAM82@"0R*F[J.!\\NV4XLT\S_YJ9MX2 +ME(:Y&E+2O+<B.G'/7D-^.WY+=PV3!;-3]_W!IFPZT%NWUU]H$@I<\=LU7?(" +M+2N$Z<^;DHQ<5T;2ZCG'=?)$F\5%&D&0-D5C%Q"7PG9F%/-I3!=4HH3U7+_' +MN3&K<(M*K"/J/#2"+2<A%RAK%9DH1D;NC(9SP3B<Q/QK?GU/-;Q[%>HE[/#> +M(FC3W7R!5;?&4#9(3Q":^U826>;O3M*P[%510YB\^RX:Y\O3=#!A)HV-8T=D +MFODO;AQKHFP;HA;6XHY7#17U?M4,C&)$P=X,6!''$8!EDHTWZ"L:V.]I=C.1 +M$VO'8ZA33#L)^/^T7!4JOL[3\&."?_SWO\0SI@C3N0S^WF3_WF?&]15-`VTW +M/MQ&X3?K:EC>Y]*FU*L4CW>@IE;];NG>$9Y/\D`.=M=J&""-;O^20GE]U+>= +M^[R?\LP\7'88Y-"8"G_07?,&2T0GQQV6:,F42D7@2`SZP;A9QG[7Y[W.)QD1 +M)HR3V/:QMU&D=]$_9[/SGVF*&&_[ZZ_G]D)5;RZG^1>]3Z9K\AHLP^8^OJ(Z +M\ON&?4R(%1=@=?!N38`]/L0&C>*=7=]9$N+8L^\@1/3WL#!6."JS`HPY,X6N +M3(KP:3DYA[S-VT^YEI)U;4R>."&I2#1\?VL/EIZ._0[SNKR;EQ7.*NNBW&75 +M)B*188(:]49UL=*I%'79U?1Z*Z+(OL>T*JCVGF_.DO%6$I@<W7#*=,7*@.M> +M\S3',O,8JL@@WF(>PMQAF$%<),ME"P@,N@UZLH0D6[D\HNZR^%/^B'V:TY$* +M,$<>EV6W.'_D$(#+VA-R]`&\1P<V2#0K-ZX%!DFQ&P+3=TE#:.:E!M#'.RZU +M#/E]3R+VN+&M;D\(Z'AQ@:"S8D%L2"8]J7$#H1R`XZ=%I&,9$SP")2K.^($( +MNO+PK3=J>_OM[1LID6;C_BW4MG>2CC[K<H!V#^^E;^)D57.C-Q)89/IU"E)Z +MB4N5391.-_`M<QOS-R+%9.('F]'6[<2QM*W!:9.4EV*+:7Z)$(S$N#?(%.[: +M1?^WLHQE.YFS?`M6][Y37"N^LR(PB'6!39`0]R&^Q%WVIXO"`3-B2=<*J)V) +M;1\?:_9/&5<W<!1=2T!JKR&(V/[K=I.;,/N7V,,BF0\:XW(@ZW^ZAW'+`T+6 +MC']SDJ)NEF9$W<3FZ@B9TW'$IPM*W3#'3.,L$I5#^E]]DVFG2QZ:$CDI1&]' +M5(%'BW%@D>[\"P"N8-SL9?K!:ZW:(I2-*(@!'R\M2WO2\%WME4&4[)%R,O1U +MD<:Y67H^9%LPU&?H=!D,2B5(D*^YJ[PUH_C9?M2%=(UQ)?3O5C!:XGG<A*V< +M=+OKU='OH8@`/PR;UBLHX0+S.6[N>4HQFO!\[93CR5)L&(Z0'7BMS<NZO5^< +M&3F"J_$.!"N64+'SP8["@<]XN#7\AQ>!'6>7679KY$?G-%.#,B06A1JS.F3$ +ML:+`=1=`7GP)!#W]]4CJ"9"KC@-V)ZM%\*6)#33FFI0QZZG3G62&;[QKM)&; +M".-(W2B_RZH7\Q#C+7>1X48"2GDB*)LX+&-6RW%'*I<ZBM3;7FR-3)[V#?QI +MI:);GND4#:0M\W%`9"M;8(>^]>ZT6U,:O9Y1=\^W8"K5.O,UF"=W/]D@HVR@ +M83X"Z!J58DVQ115B(I6A6<(Q-GV:-L@(],V(UI0DLU1O,1?%-<+S+8M?L]G- +MI1+IKSW^AT>,AB!>M/VB:''8J6"DF(W`XVLEIY/X!YSF_/O0(X-2C*J.]=32 +MFV1KOL&%WA4`^;R+W&6ZYJF?/T7-!,K=<A?O)FJ+'@PT)JOK'`0:R[1O&!I< +MZ1RCA-W>^P]D.I-M@+S##,?<.WTM<`3NGATW-9M.4/;P7<OM\41$^T*FA3HZ +MGXI;W*>DXXE.3&_$Q1C@*1,?=*QD7B9/R['UBDJ/OELL:^;IGV9\ANA9F?MP +MQ7%7MMF['`3@PSM+]=.6@/K<00B.K.A[/KG%@A4YFG]SW\CY\#Z8S.&_''"! +MC[FA7A[G`7O_Q-%`WHK.$"=3J4\>U"@#="WB-<0F+DM9TKT8L&UO._^ZZ8PP +M/?^:%$2P^P++R24(Q`T4A)WIN=AL-!PTP;N1#:3%:PV*))Q>"QGR6FNV?7,X +M,>;O[E+<%J<S9W^'WGM05[N)/D"=5%2<5GN>)^F%H&Z&Z'2-8&G`;,%Q@R_! +MA`MZ(:`H&%442&)#2L]2%-/B!KZ+O@`8@4,3#9FC<?3$TXWDY3#A\X=]Z(UW +MG.\I>*]&=,^^%`E6VS7^F77K*R*=#`3*$CC>01YA],748IDJ&M76AY#7I2PV +MNCY>3PZ5GB6JO&95>3RD'`"P!N/@AE[U<1_(AYWA^T:\<P_.0YD0`7F/B,[C +MXX9[;VF8]!`$151]'&KHX'9*:T48N)MQ&"@UCYIYZ$O13M`!'%4+0Z&1@0NH +M\Y^B37T#&F9%`E.2DI0$N/X%PG``K^W9$P224;7=)(T>X"[LXPX%[/ZS*+-L +M>&:ADDS-A/(]*?>7L_ZB;V*N%*ZX-4Z&&^7&7P!Z,;\IURPD)"@<3G0K@H*: +MD:O=@E#[""Z*:'$@IEES0F@5?0S)QBE\BW%D,,Y"O=OTW8JYN(X0%0#*'B#C +MLGWU]/@:&Z@@9LPT7J;S%8]DW$(8#%2'XUY2I9G@/TTVC6%.YO(0)=R#@VP4 +MQ.,'WPT1*+N>:8Y(0X[*^XM[&&AH)O&IY,\?YL\@&BNP=-%K#D/@`:HZ]\A/ +M:-YN[U-&$3<JCT]!A1H&H>?X`]B#">?,5U$70I_JF`F7::U2G+THT,6*)HY@ +MK:3H8"8[YX&7E8?1`O3%\ZOL0QAT\&1%%!#1"*\\@T_QCX,_\<ZBKQCO20W_ +MPI&H$F@J`("]#VE`*;&PT"FX]'`VJ0-<-6RV"989U#[\/.0>=,7W[G:%Z(Z# +M)0A1]D3&=MHZ-_5TLRMC'7VE/!YQ6:Q;K$WLH5S=Z0,?IY$DRAR@/S_/H8X; +MYB]E%//93ZL<B1SQDS-1$QL7-"8',>%3093.+,&5@QL`+6"'X>=?A'IF+67) +MYG8K79$+FC<4%>D$!^)H-SX?P2HG[R,R&^&I?-X3&'[+['/$<`JETNDP:1R= +M.IAO/B!CV.=$TFA;]'7-X"3?VJ3,5)K&38_<J"NIS!FTK*:OTOCO:)=J]0,M +M[$WT<%F]C@<[PYH*&O/R!BS8=&#C(M3>_`R^@Y@S8G[T#B%?*308C]0+LPXF +MZE\C=A6X5C0W2%UQ;W/_6!2.1K881%6H(#'077'O>^F&XQ9_U!=C%%EB':Z, +M4`<&:%,_;,*#+5AL;S'W(09''_A<PHNP/+#GF'CWS>R$OE&O0Q(Z]:59.].+ +M4&0/<9O+F4MJ+,M'X0E%I-UZIR)"0$4BHT2IU0K@QQ\^2W1+X:A%B4AT$1]2 +MQ[8*5-_M_G\A;X;V[ADM_-0<6C,Z;>1P"1I&\&X[4'@#>:/='M*CIOU&I&E5 +M?TP--'2VB./Q/`.M+!WO44:!;(6?0-V[>E;&<R^"?.&*CO>L6R?L4ZJM44__ +MYO35E_]`)S_I*]F,<L<PS?/0L0]_3[Q1<R7BMN]N^/OF7F/55RMTI[\X]6^R +M4?#8,>W#J^V*CV+1N@PF&^XI1SNR`I-JYMR>XY9\L?!L'4]4*!M>\(O0V$7O +MG;-U/6^M&,=U:,"3#D(L*<&H6?*D[:4^9H%]R=Y%[WV/^RE)LVR\\_Y3#[%[ +MM2__P7NG494I=+H)LR^=BFQ#4G`="598LABGV&+^$TJ?/+/I1/J.#U$P\0>8 +MT=Y9Q?RWH]O!@9!UM&Q:=F9R/VL#PC"`?']B6QH\NU$+\T()6AW')T9(&>:9 +M=0?,&)E-D2WC2//SGGW>&3AQW&X911F[.R36W?HG+7>Y/!=3?VE0X#C<<*Y< +MO+8H["7BE9FEK11PK'"/04OVA0K,M+3N3)X$9JKS=.F+H08Q'">\&(!7#.HY +M=,]\'DPQ="8Y.V&]CO&-Y_0"DBY^RNPP!8F2VQ?0Q7)0\337G8O!$<NL\//P +M3I$IBJ(HD&*945"UN,C[R2A3(='(,62&\R#@Y)B88D*A"<M[C&P;=SH%VV<N +M(4S@BR$Q65&-X_?%M#=2BP.&8))V3MG%.&)5'.#E^(B$J$/Y"K"1<_(05)XL +M%8TWY'A=!;^?^E\&E3(I0QB79XSE*MH(@@L`B&>^">)PH\RV1]^.*FD517ZY +M\9E3^2#?Y8C!*8A5Y9&AO8O*(RG>V4HX>F!>"(?XCBD@H0%B3-#%P7(#?X2/ +M.]/F%BQ_YA`&JXT>-!`QUG0Z/X`1!YV<+D#K,MV\/E1^'F_2CU;B"'=1_3Z@ +M!G*ZRGCP[C?AGRWH@EM=]'Y6<#'Z.6JAY[JICP3W](#Y<*/M(\+<TC87#9T' +MV?H@/O;\L&*V^U;DL=LW40Z59Q0%00\F8'5SB?LHN%'`;(41=G0KC7S,F\_@ +M??XO1TAW.P9D],:+P&C-^24_GN]!<<]2<+DI7)DU;V*O>N&X_[*Q$Y>E\NTL +M02H(3K+6KDA%UG!-CJFZ;ZX'HPG%@;MRW1!K>+'%Z4";R89F7A<FB'[4K":8 +MK<LXD#`+&:)(;7'O?M_VIAVN?2[BT,@FI7H(2`3-!8K$X]2&7I$-)FUB*-Q= +M?L]G#"D7\W09`9]4M5-TVBX;Q;V]>AIO&KD\OK1HU`A>%CKJ/R\JZ7765,>K +M",RW@0(\!K4#0<NH+W4_H#YK/J=/&-P4&F'?*+/XP!:G^@COWJMK=?;+C[AB +M(](TH8"BN-);EUT":J[WK)%33/NHO'>G]+H)"O=AE\&<A"//,"E0<MR:,060 +MA<ODR&=P_K[1ZX/."F[(L!A56M_(N!&RY'X5:8`CMWPXOFQ[H3N9VCJH\'#V +MT?<Q(T>+$J,0.MRBP7O!=0#0'C^)VG-YY693>;0(<ENX\I`!5'<J'>I<TSER +M`THI;6`M4["N-E'G+@:'$UA,;RPF1YNX#7^DJQG=B4!SL(.9>E6]?)$S3`2. +M:.=:3GG]68MTPPW.-/67PPJ]"MYQC%R>8JVHWB@G#%T]MD?#YSS-'.I!%QE% +MODLYC2@$#,F,IX%U7F$#&P<FZDY*!9A>4MBIP:U(])T4Q!4.!AG3*L[<;$>9 +M-P]5M"56"XQ&2K4]#HK&$<%[CD().K=4U<M5M^7GX_<_5C1]#]_-GW/B5OO. +MCT5?'.*M4RA2RZ"Z5#D4@H\B.JZ3;$RM\8(6^4,XR:88=YYKU(YB$H&4=H@> +MX(353W=@P0TB!G"^*[=:\&PB&?Z/,?<MX_'<A##9\4FXP'F346V7!#2D?@`I +MI5I:"IC_#N@Z;K&@[V*.H<6JCS;KQ;;E.@/9RQ/IVF-4>TPPF<Z"M^C`Y"Q7 +M&.(#1T@L@//;>"K&GH5',58JD%RTO,O`*A;J;S0#OZ1.8-3.4O*78-&1%X_* +M`MY1%8Q%#92E;;^)X!U;Q+,$JO&]NGFN?4NPQ:C/^!5Q'0OYLD)3Y3S7.MY@ +M3^>]1A<S<$BVJC$A6X;@;W>5&CD;J0[,V#P\/+`5'%QAJN1GZBJBQ_&[8>?E +M6K^G!NHZG+D#@=`C-N?L2!Q"KZ8+X[6"^GKS6Y6//#!M-V_%8P1]*XKGR-.6 +M*Q!F%IK&+.<?#0_;O/XWD8HWQHP-4\%IQP#`ZEX??JLH'3A/H!X?=QCA>H%$ +M+OQ[Q1500WN\Y;`<20GHQX(K82`T9%J#`%"-!)2"VE%@/")_/&"37DZ(3V#; +MBFP/>O;YH70_DRIU'K><?\G+CF-!FP<\)&&=E3T%H^?@"_IQ;<1:][_64_O: +M*XI5XW05L51.'XG0Z/R*BT9-G@/03CJAAG08O*>F/Z'X&^;\_ROM^$^]=^^^ +M`+R=AKW#A!UZ/N'SCGK\I=B)D0_[B":YZO>?XZ;:"L=BPG[[AX_2<+W/QCP- +M9G?@%G#,7=/UU<`2]6YJW@^:WYN(5N>:W,BW?OX\&)41W(#I/&W8>?@J[H<Z +MU#&,<%>IP].EZN:33#4]%8&(G+7?R,T#E`_4\>M'B`K=`>[?1XKR[4`G+BW- +MWQ=UN8[R1O)1=`#[1D]GW0S\"Y[1$>A4E(L3@2'2,.HD8<H`Q9G$F0AA)+C[ +MJ5/!-I_29J&HT@/X1'WKC=H%THE`VR5#NFJ0U1((1J/[CM3CP!EAGT0Z^ECR +M]\_D&5FKO!6LQI9\N_=T"GD?"YL9AA(5'`4+.&16V%#J9\*O4PE!$6>;%0AN +M-`"Z4)65&M")LO4RT@HRIK!4UPEZ:6>9C>K2Y1>,])MLN;4F.RC;&K:/_T^) +M=/.G^)9D'\FSX,C_.\U^,BA:Z3+SB8;,O<WRA!=KE!`2\K`ELD>`P[SX/A69 +M%Z6"<43]O,%/SXCT%_Q^%D$*-W=%:=%K3R0@UX4&!'N<L(+PVNLCG4#0=+AB +M!Q*!1*1`&\4HZS19^%%8Z(]F)=P?Q@4MZ.F?/O,O.78@T1Q9*1S"SD?"FW(? +MJ7I'SVEX\5A`P+*#->I-*I0MHA8XL#H*66F+<J1UEWS*]L^[<0J1%6*I=''3 +M2K5W#*0QZ"1-+T4$S$EYA6E\+:07*86\-J:51!G<O2+$8](RQL@FOH8*N=&L +MN_?_V;A,0JX3-R9+P(,W(5:>,27[LS;W')0:%#3TA,C'LGT>H"^5?8>@FGZ/ +M1EBJ[X<7*)^X@B3#YP1=T)'')Y9DQ?+LF/^%:?PQYU"D!1@_J<K2""^IS1@/ +M39E\7X5ZMD95Q,%R:8^YYW5@D(QQ\ORD2LJRW\H66DQD`S\<:EX*@82B/+IW +M>.Q.WK>AT=9%Z\.D$5+!#2H<%P*LV*T[;I5`K]S_P1HD$I_/-"+61#N@\-!8 +M:;C<2=TT1>H$-!KD];X5VGCUJ8Y/G?"IN<\+OGYH_#!<4-46>61KPNR!!^13 +MRH`')\5@F>BZPFMN_4+I-MSY$/8+FZRX<=5TXK2@&(_.)`^DH75'Y-I.$B_! +M)7JR@U5K\:8Y.&LFY4#\(%P6R:A!_S^$Y%6\*&)0IXY]Z;T`&QKAP*W)-F4# +M9RQ+CU0FYRQ^3AEYN&;27GJ-RR2@/@*7KXTRLX;J>.$LU34@#>1"O6C"BXR2 +MIIZ'2KVAM.Q'*-(Q-V*^CZ9+MA'D87=&?%^)YIS!A?2`(UO(822=.ZG7Q+_S +MOZC?[R<&BW?/"0@TCHS7NG-Q"8K*S%8FYHUIRD/<WDT+>S'!;5YWTU'N'J?[ +MY12*=VWYC;[ZBC/J>(WMRW\>_\[20ICB<YH7SR%:R2'8-Q*=O$QVY\ZE(+%( +MOI@X=<GU\2ZG(W+!1#IQ?.1U`X3`SB+Q!G'KTCYF3!.:R]PBXC!"DW>K-G>K +M>:!1I/1#K"P+F8(JY(T1<8=(\S:GF8=7$H+!`[^L8QG/Q)88E/F44^.KF&8B +M#KG(]A$N%0Y!</UWXF^@5#&!?(48/(B/619#4PV7\KZ.XX"*"KJ1<"`T:G$M +MPU6(IB-PVXT;P>="5SXZGGW_8:F^?.$*G4F3I`Q%7$J<2W$02V"P7]<-7-NI +MP'.^83]PQB$P3&0Z=U<<2JSZF?;Q*I:J;!-+9$*8)@0ISZ#*`#8`8;E[,L\, +M)+6CUN_T*/U`SYQY\_A_.HBGWY[B^;GW',26F;V[=PWZ:,Y;S>@0U,^-&0ND +MXT=&:6G*O2N*QOPKU(FF5IH#G.N?H+NWLO>A4<QA@LA?(5*&N'&\3VD>#NF! +M(?Q_JR)Q]_"`4@1CVK49@(]>C9B*/TL0=$R6?"D0S-Q+J8Z7&<68J&_[/-F# +MW&`!A+V/IJHG(>Y[<I6K]L]N?P$A1@)<S@7%"VTI&PH#C;NZ]#H^W7?HP;9N +MC.0DDWHR[K^+821%X%,J06QL!`P+TWS+,B5&EB'-P:!,>H`=OLUQ)D,F9,%] +MM?(LH`]XJTJL+RCIJ5\G"8*S+7#[IFRMA2R%1+Q&-X1U`;2OC^8]7R6K3"O# +M=Y;QHV[BCEI4.-XEQ5\28?Q_@7SS5((;8`Y1++/AWBW#@66L#_-X=_E/]+<! +M%6Y)9`C,>3*[_X<.]\,AM@WRGGJ`J9*D#!1"#PU!JVX7VXMM;C2/`U[D\ +M2F&1OEK%@+D8EWX'@'_&^UD(<"`G%OEV.18?L]!-@4U4TKA[4XIHX\^,V20R +M,BNLOL0V):G>8JPG15LS0'*1F/9.*-3(,TJ<:BW[=V2?0;'!Y8FK]_TE&/-Q +METJ:S$AKTZAR?./Y:YI@/:?P8`1B8<Y;FZ]=%%0ZS*;S6Z_\WO!(L\N-PKN! +MVLQ(LXW1]EZ2:)>OHS$9-J2P_4\%S1P3B;.!)(UK>LWQ+CT#;<:SKJT70:TZ +MF3QKU>DX8N*O9XAU')2_WR74IEUEKO;WV9+UA=$YI%3G-V*;/PP#/PMHU^HC +M'%OOPN6:4OXH`Y\AGYVZU>_LC0C/[D:Q<;7_]8I2+<7KUY&;VA+GG;Q^^A[M +MG7!>\^8]W=ZLWO?1R[/$P+CF;MWAR7#CL7?*YVIE-(YS\BAO2=.=I]2]''A# +M7WM+Z[FOJGS@KP2KT7#;@_F$<C+2&/L"-N[P8BI-/]O>;X-?A)8T&(4"2@P9 +MR<:\".,Z%'?^_VH(<G1G2\GOK)@Q4ONL"9U0>[NXHU.7'-CAGJ:6SK*=9M>? +M5&TW1/9CA5%R_V(4)HP`MNZ<:A4/%G;S`OD)5DFJ<B+>KC;MVRNWKJYF%?M_ +M$KF95^W^I7*.N9!F.+.PH\),VCFI*<^K_SP5S_(&/?^_@6>:^211QE+\1UA; +MQ6_$4\/!8#YCPE3S^>I<Z3W%J9X4L3+BV@Q=T-,Y]N!<?WWJ4,"DJ+I2"*(3 +MV46SAC_=_V<.N7^4E,Q=N]YD6+]R"7GN+YLLQ(-C3R6(OG:"0PU8^L#7/A/7 +MHMO[J-(`G'(2NW$J1Q$UGX(`:Z1C-Z'&)>Z^_WZC8ERRVT\JGI^1]Y_I^'_) +M-4]1<PVOR_>?+RS4G.]-%'O#I?!_HS8<?<\::7B8(B:-X^I5I"/FK^=1!SVC +M=PGO>MD[$/F*+`]4#=*W*.RZX]G"E`;G^J37]A<8?&6'@P%:B>L>+"/GSEB? +MZ7NY,-`^;>[@?2FI&UIW9W*KIE;ITW.ICW,S;"8F>='X&FW8//JJ7UU]<ZSP +M3P#BV-.=$2^*E]L)W-&Q60YOV%>.?<>C=\U6@Z7;DIU;T:J8FDQ,PO\0$U9? +M=&P[O2-=<<F)["'@J'ZMZI^W]%V=LXF80689<\3/J>*%M9X_@,ZH7O/;\%G= +MWK,/>_H\"68]=P,`XY^_=X<F[=9_!6=WMSG&.KGY%#>DZ<[>0I,4F)=^AXGK +M-[U?"2F!BZ:+1?!)[_@HQ9OJ3(L"G[^\&>"I=G8G^$CJ`MBSEQQH\[<_S)2[ +M$B(J-"&O!!YF]"H9['M(>0,<]O7+_JI&I<F^,G1MLH;W_Q`TG`S`$/Y>RMKO +M?X\:F`$6+A:M`;;E\[NUH7$VZV.86.DM3I\-T<4"PTWP4LL<Q]^6[DFF(6E& +MUF8[C3(@^)K.).M-<;Q^`T^N(^7`Y:CO<WQKO^:G^SY#`PE?5\I7Z9A7U>*K +M],RKZOU%3D*WAE>8;OMNDT6`:B`],#=J0%G8_$G-S'XW]6/CB!W;VGS?J%KM +M\-AH]O]S@1_#\+()-D0N\CU,N3)4$0FN]I1!5D`X0%O>)UW61W$3N;J/II,R +MJC$M+LRWX#?`ENP<E1*TJ,'FL4XD46`=?MY.V;B8T*M00&+K-/.ZYYQPL^!S +MA/@Z>+/.B`)FE=)DZ,U`(:RO$?06N)_QX#7B]?DFC[XX"WP&A6%QICE<=`XD +MS'_()2S2OJX93YD6_TJX=3.]>HR:F<R"N!R1&`#O"=:3LP3F.MQ/#&R^.C6; +M.!%/W:5/T^U-2J+1R^ZO].:CE'WBO>\IQ[+E2O9*?"5/ZK[\&-->L^K)J.C_ +M?QOAUG'SU?%GS%["X*RDA?+\K5+,G(^'<*F?4QK<ZHB=RE7JO@YDL37>O<HO +M1'/%&;"L1O'""J8]J146()36S<4N&5"`+?/<]>AK.^4TMD%@`B926QLJ?7O= +M'5#O9B(*Y'PZ7J+4@LDI`9%(8P]LZBV1.8HLYJM#7NX\S?O>-O(X3<]I4Z9B +M^9,7VEW!@%<F6L:(-?KW(#VSCM)<!3C<FOYP*"])N<0P8=A`X<6%]'.#+L<' +M4[YB`VW@,T]2ED;]!JODYFT7P?D:/H('28C9CWQ:*8HQ=2Y\"/T[[@2&;=0, +M.4&%)F5[B@-)N3L??G8;<J=OF>E\P\NROO*YUS%]43UW_M`F?5!YHZ\R+_8= +M1&0.J".J](0%*GX!O034O"P8#S4'7+OAEYX:[<C[U<P/?>=?LG#)SAU![2SW +MOG,A$_/',<>]`O8+D6;3&\#>?8;7@GE$W.+W%H+B=_IAKXA4&$IC/>;VD?+J +MX*<F+@6XX[)X"*ABRX=+B'WN4V>;&6+3<K8]YAHU<+@X+A5]NHYU$E]P(_L' +M1N<^OS"T$Z:B/P8/XQHBF"DS+*HG_SDQ9[WGX1H11Z?A%L1>OI,-%\[VIQF0 +MJ1M]>U!">C2B.I_11!U!B^N<V<'XE:).XH6<N+X":=3=^"X[N,'/NI7X+M6W +M'+2?`10M0I\E2LJ)H'@PY7VZ:,M<+*#==2K2Z_\#+M]I$J#2@+G]"]>)[HP/ +MXY?S0D&E32)4OKG$K4T\KP13SB'KQVX?]RCRSWM7%Y823`Z-[>O@45!,KAI6 +MV2I0+R\^SWQ3-TV+WZD:-+II,.VHQYYPWF*>6(HWH&/U_J-KYAYGJS2:N$)B +M7JBEZRCQ;V,H\'E/*:*4Z_T)G90I!56?@SGC^:8YXEZ_ASQW.V5!4<2H3F$> +ME5I`B6_ZQD.AL:CD]63*`7$TF!'=.3HG1G2&5Y$!^$,B#2(A<F9S'GF<O='9 +MFB<?('21:7HTD*-@M638RFE4,UB[-)-7Q+WGS/H)O2V+RR+._3D)2^WKX_:T +MQ6A7]F,NB+3@I%XP+<./P=$Y$SE?=X?*CJ#%[2/U<6RD6T6VB(38/^?UA.]` +M)N>H"QZU]N..\9I^]YN#AN>G>9^G4N5T=>F5>F4NUT=8:K#4NUT=9U5G5+M= +M'6<59Q2[71UPRKAE+M='6$JPE+M='6;59M2[71UFE6:4NUT=9E5F5+M='685 +M9A2[71U@JL%2[71U@*L!2[71U?JK]2[71U?*KY2[71P@+Y[(_7^5"NPR5ZMJ +MID18#&M-CLCSV*#L'!,BLY.03/H5#(FYPGT$&*YT[?4@8?&R'QTP+CA00.-R +M*5+8:AM?9@4,B@'-UQ,/`NO#P_G>ES\/YYZW`F1X_:AO^YK+,5?*S^@3<_3, +MQMV#FM!&9C14=%_C$QU][]@,P9:_]=]`?X>\?]2H?^A<7F-ZG@KSV(718EW( +M#7/7D'L&\=V#S.U8J(MY(00[H_BD,_(`/K0^[[\&(_L#IEIFW$$B<F1/=..^ +MHQ7W1QY3VVJ70%Q]4_JQD\X@<X..U!=.7U8;X&F?FFNL!#WQ*>>N$?S6F&DM +M<U`/>:;Y,2Y%M(.JX9PT$61N\F>\S8C3],F!;KKRXNKDBZN9$QB^3'F8FYNR +M9W@ACNU)*K@`4DTC1-FB49O2I=;B#AQ1*U%MH$[%SP%K6H&TB?RPVN$#TOOT +MXFZ%\P).8>&HH\03<@B8D7SQJZJ?[L.?>+C-S^:)`N/S08U-'$,W-PIY+?D3 +M$:/=]6&.1TR`8W$,3/2Q)'`&U<B+,23#P+4`N)WBQ@-]6QG@*9A0E:KC1S%Q +M?>8?_F`.]ACI#_J<:"M`$'5+H,0,>()<NU2?4O3"G=QMUQ!M90(TCI'T,='= +MIB8DD/O/^/Z5R5]7%VHC*_B"/N'W..1T?Z#B&`W.6/GF3(G\8&+SJ![HIM1O +M2"D,P[9FR_?Q3O+S#O]#;R3N>$86C$)\S<SS!R*8X'X"H'>&X-"67+1CF7$9 +MSND'QS@0L03"4_:(Z<-3:M`:<K#W%W420%'3CKHYC$8CHS&7GNGGL;B"]"0S +M+7B>\H$Z?MU"34P_FWELATH%LIK2&F<6_,8<X<3F";UD^LH28W\@AFN-)1@S +MGFB+&MUB+[OC=U':BU,B)RQ)!DV#:I,@+7L?2LN,!9M@IN=HQI-+!`E&+H'0 +M[Q^6VX"M)[9RV%.!#R#8N1U!JRPUYLY*`3"LBQT$I!U-2[W^E7E`D#/"7^?5 +M@+V/@;%Y.[+D?Y&4LULLC[OH;+S/=T.M^_[L3%]3[LV6?0_3F?=_%],,<3TO +MF>[#:!%>-BO9!O9O=\Z-K\/&@;A>Y,6"CT-"F`8XH3:\5_"CV^_ZR/,TNZCS +M$;N3W_%'Y\;EG:[9?<I2^#1//?T3I;S,$/-&7M'01Q@''#?*[\]>6\1"DJYE +MT=/B>-X9Y4SKKSZR=[K4(D:S/7($:6@@T;J-V,I!6CB!3PQJTU58CJL]<8>+ +MU@ZP]ENL/C]\*Y*H><(9N!>P@)WL[CH^R,XBC.3T=;F73#9FV.7PXPD-C'X@ +MQSC3$7AQW[6B&X),FC'`L-%NE%L/C"?[\8-K!MZ>.S5*B!4\RL:O[EW$[L>_ +M(2<!S-9=S3DC>(HBQB<;DSL*5]&'Q(?-^;*LW"M;M,H3J3@`(46XOQYID[!B +M7UT04+I=;83&;D(A-_C-*8B4PRCF+=DZ^T^-1O?VIN&EQPY@7#B.?97F0D%; +MI+7A(C;B61CV+C-V%7'Q_D"*MNV18O]`!*C(A4G%7K9]TG9_<I&'BJ36@LJQ +M/"4Z*1_,V_=ZB;FU_D+6'VGCSLN$G7HNQ6,9T>[H%V28(C(`S#..K5Y=6K\C +MG6V9I8]V]%NR66+,%*.%8??$YX.1,R0A1V.Z'78=8,"(R%^99;J[ZFJ8+$8T +MB"7*N1S*DS,M7-P5=.:T<BT5U:Z-6N\<8*O+MK!2T\&-.;&\*P)_>N,%%1DV +M]&1IT,X48W9)DG1D&PJH\+?`N>&I:BU<C$6;IEN&Z8SB>!=T=LX=EEQUDOOL +M)LZIQ?CVU\2HJN2T==PT!0QYDQ*D',MDHX2LX94B*,TK.&4]@J15$%Z`'[:C +MZ;).]Z*.(SC.`SK%LV44E3MAS^_,!`)5T[FW()6]6YK3MX93\UU?M5(*1+#7 +MHNAD)#WUT!IM_Q7?%FW\?CS<W'X8N7HPU4.Z^O),S;=9"GP!H,SXQ_*PE!TD +M6>$\L'J9C3(2\,><(3-U5XT<?=$(6,:6$]LWNT9?:@\/ZXEU&#%)NO`Z,K@M +MJ<YH346D"-*S@/8L-1GU<XE75LIU3=DH9JW,J;6U4W"T#'.IQ4,$XO2&HT*L +M4^A;//%M/'G+[\E1./3<MY8+AMOO2$A1P"ZJ[F4HK]=)L_D<UJF_1+/-$TTW +M)M^-!J$8[::<?@;GE7LU:#7-.2G4TZJ._A(Y_R=_3ME,S2M[YA[#"S,L=K,R +M9+'R9&?4N2E<VYQH)'BJZI=`K7AJF"'P2)KG9Q<DVI<[;US.[<9EL;(*U$91 +M[C5$]N]U=]?X3?84;=!Y`X/573G%4SNT]]O<X.;S(>BZ^CP5!*/L.,-,#,XT +M*ZXY(NDD;11FA^1"0[H$$-X,-%CD-%+2E<$9WC+9A5F%:WA".;<TY:9Q0R6) +M51\,]1B@4ZJZ!4<?#FX*M<*9F3B?9FE<:#==9,YGAQ\A0?;.48<TOAZ7J9A) +MC>&_IX#KW-Y7JZ$HUTN>`2QU_VW-SCEZFR$5-1NI4[F!KN9!75.K$U+4$ZY7 +M(U`'!:[#%1SN(EXWRD[M+51YK8VMWW2^`PC3$A1";![W2]NO/D)2;Z3[BDRE +M@6^D#'=<&U\%23*&EGKLW6(#)*0*CE)3CJ9I?K"`IW)6`1M5KIO;A('0C\KY +MO%`_*V':F(OWCA!C,ID-E4:N57^WJXLN>=OO+`^4Z*0.,BI^9@'Z'Z=[B1>& +M?R_0)D`?IKAXJ%^%TS?W@P^FO]$$3?IH(]LJ^Q3XLV[)TMP8L\SUQUQSWM_S +MJ*13F&]4WSV[7HJ.=B`_O&.,_^IT\OH%S/#WI)+%+/&_81*>M5SU$/]K<22X +M_X%'CJ>*?>N]U1Y)`ZYUV\EZ3^Q__IPH.F`)ZWQ-V$.2<<^\=O$_N4;'UG28 +M_V;NHCAY)"7/JJ/><=OAU%=\+?WYV2=\XPBW\$NO%Z=TYI9VB1=<06EZA1KP +M4[.H!7U;M*^KK&?(Z!\CMG5,TW.-@PQ]-K^1Y9EYGSEA55=315UEMJLP7^V5 +M\#'@?)(>^E_>I4[M6:M3;JSGU/%5F:/EX[F9M3YBLCY&;Z;F:U3ZRL[)3'5G +M:*>>K.B4_"K/>*8GJ*Q8J9]6;)2TW*8=LXT$NWYU3F',]HISZLZ%32JS,'RU +MSF8:FG5G1GKOG,P77QY>&PG7R59TCCY;F<,?#SG<TBGU%9[AQYCF=,X\V7?9 +MQ3[RLZ=R?F=Q,J84ED]3KCC)=OZ93CW,TSK0JSTZG,.9$XZ?1G&`JP%.C=R_ +M<::7@I^2K'<H[-6YGH=$?U<YGXE+YSFS+>@H9:=\>\IU+M=&87\&CI&&#)=\ +M6NW<>*WQSUX[SF`YE^J^2X^6WYC?G-^HWS''FO/)7\SY1C)DI]]XN/A1T'#- +MIZB-H-,2>^,=6FWTO`X`/.`$J/E`I,WDO.%^\WI#+"OLJW;T3X_O$NC+FF=G +MI.>C5277-TYZA^HP5JW'8MUS=@W9M[=OOF[63"(;MO?./!;MV^(WQ6^.W<-^ +M.WY#Q,Q*GIY>&=,]"]0Z_.;^:WBSU/M]4W5UFU)KQW8(E@^/Q>,2[U\JO1RG +M],O=YIN;;)N8L5\L_@^,+AK&]FTOTVM98V0^,B%KL:K*UUEE*I'5K(5P^3SI +M]D,F.[2_E"2@3^#GO:ROU[5!:5NTLP+QMP!R363:S+5$&'&C_4'=K"AO'>_. +MY#NHK6;:^/;**CR3B`=T>8[!KKFLQF<P/3*GMUZCKO_?#WUR@?]FP5JIM->/ +MC<`(M2A)9(3T.X[+\FCZGPH7-DMHOH,;Q$=551M-I7V;5155599%WY.7DIC' +MQG,-66XV=37UU;5-#XU%>;Z:QW#61(=T5%L:RNL,BT*G6MF.JQJMVBZH\$=_ +ME!4_&ILJC85F:+\-:W2TM-I-+W'T<H/X>>ATE)H$\9Q#;*VRL[\^`3T0?V@8 +M;,!]:1T#]4">55:6(#^"]-5=:.U59UYAM2/]5UFOJ+2NL\D`9U`EHT6^QK01 +M@`X`O6Q`,5@!L$>5U<'=UNO:!&]H`="5**JU]G:;74:G5%AL2/\9C^&\/YLK +M`!Q6Z\/:LB]3G;@O=74+@ZJ+'86FS(>P[@>P+_`#8-V"#=&#HE.SOG1"_S\; +M#J^;PS5Z$_--4510F"$2-=+_58"&.Q6[`B-9?#[/QGMUI@UMJT%QH`P0=9U6 +M]G7AKP(/7;7)&=;.PKB1RUE&B+!_Z/]3^<;0`R1N)/"P_45<`^GXVVDCOGG0 +M17E9450;"B?B0_5+8%S55`HO.`_F/UGJ(0[W`=IICNK)(C8CKL+$>NQ$S[`/ +M010#^S%(Z2(K!>JD?&TXHC1L]GJ-)K-`[LOI!XC)9&5VMHJ:P@_DBX/3$X(T +MV8*X:T&4V&4H57X_^R-_@G;Y%@.[)Z#D>35IM*T^P*N%`S1T,7,9FAZ_L>P( +MO@(S9&&ZBLK&"U<[[(W@@SMDDGM%1<KT(?@7-E:6%E)]KTOA/CL=+D<?Q(#R +MJEH?L'D\V>:0VI%YH4EJ)O_MAXU5F`^@7V@7_XE)75`@<*)WLZ\0ZU];5+H^ +MB\,OX9QBSM+*7I/>2PH$>%F:6)Z\)E8N6#=@MJ`P84`KQ*_V(!FRK,U?/\<T +M"<[2LVU8(N`7=B2>4HLSSGK2.Y>C?4!U7UUIL]I92J!3[@.];V?=:/0=Q]%W +MPMD$QRE`]!GM@/\):(X>,W:&#&1J*[;5&XLLCA9'MB`\@OX3&!_('T*GN11A +M#]@.*_(D/G;O'+2YGDR_%69G+XV[=RLC^6:91.0_\,Q//XD^@.AC+-9850>3 +M(5DX\'R/C7GK:559?S]R8J46?E"?5?2`ZV`?R']U%F]%!!!\BKHNAI_F@V=1 +M5661:8_(FN:PG[@@_U_QPO$H3XRWPAZ`=5%2)ONBJ-30D!9,]*ZR>D^D%SH6 +MZH3V"'O7[C`$M@/D&9$3Y5F>;(FZ!A_,GE>S^A&[[)&3^9%LJ8>F?-$B!:E_ +MZNK=E6&<!$NWJJRPLY0P]!QD<GD99]2@_=GW6ET^?EQ,U5C7BM,T6W%(_K]F +M&\^6S4`Z^UO>B2E17+:4J3=%785)\@KP.A&%SSH5_P'^B:;J0&F)ROS2KL"@ +M?2PI:5U=1)1_L"2%_);D:5GOCLUN]!6:]=$NP5[=DR#^IM+._&SNOVPF"E>$ +MJ'>P!>K2PE3SP1VJ)=+Y_?E"WX:5EX_]I;O.4PJ>XM-@:Z%FCBH>KW"ZXRP< +MJ-IN,*!BTLDF2Q^^S1`OZ"BU.2>G'EDP;`D-BX[P.[T1G'8=AA7[O<5+W4+E +M=F*Y+J)YZ/7(V;*R6/X)PTE&\V*IL;0()FB*+:2?\2=X"N?Y55]+=MI7A<XX +MPHG=!6&LOVJ/MFLME\QVX_[19*5,O@'+SC!Z!R8OXQ.K`?(YV:RT`8BC^28< +MCPRV89+M%HT(DL9>:))_G:'Y%_>$'_`(YK@<.<`:.DB]@R="J>2>/W@?-*S^ +M\@_HB#2`Q16=>9QGY'#\B'6_0=X`2X0``W(0#BPKZUB1>5%\>F^&=C6@;[LZ +M7.TU-H-/W",.%(!3\H?PH#S9!-;7-//UA4M!\DJ!]JQ!L5/[N`=(:GQ19W)3 +MDJDV4<?F&#I9K]Z0YZ2;_+=RTV[5UYBRS6%"1=#_>3G="`>@]4`M!16&2PHW +M6^//-!+'G\@)1_`SZ$SO\$:H5D45-B3^+Y+>23S6;<"?V@^3?GI$MFDOD:]P +M$B_[J1]HMD@+LJVIK42+#O8T3DT+^B1I:1*2R0R3!+`XEW]7\R9OJ<T5)@*- +M^YC;`7&T1&.%OX*.>R]E<GQ(</3W6$R&C/_:%8-]*#!C58?D\,+H7+A?#:LA +MY5!1[!H?<L!0'0@Q9@LKBG#1;/][,?ZYH_*3]>/WZ4OL#=UE@+#=DQ]+JG.O +ME5]I#3=HJ"8>"&`ORBM`_^BV`ZP2K5;UYWAD.;%$3X6>S29]#WSW"H'06,_J +M*[!9OV&;;2]"T*!VA_^#!6`Q8)X\1&M@/-=A,7S?63\7:G9M9ZD_E?\OKJ,( +MYEI3"`EA0X(8*E*]P@73#%O*RQB_LZ^7KOYB/G>4+#?FB>+YHD)ZLI45[G)= +M+.08^6L$M'P[NBHC.,=*#Q&3XU^0-BR"&YE&CK"">+3:"O:';7\JWLJ`^R-= +M99%)?3$N"Q5#1#-F!^:BN20QID)WWEI7ADHC+23D3[`^6+N_3#`KN58!HUU5 +MOZEB8GL*5[?CQM*?IYHESP&A/RD\89.L%)M&VLH5FOA[M1+L9X#KY0LMW$-% +ML4)\L38JV6`.O<ID`F`9X#-XEHL5Z**R8BZ=C\A36+*MVM_?I)QQ9`O<NCO] +M\[-<:RZ!?R/V4.YZ0CJ742UR$>&G<+=F7/C0F-KQUPN;NH^-B<2K2^(_*P:E +M2"C2](==*[];/+SJR7-+JZ46IPBK<'YA.RL>AVM50KA"-P/!$ZZHK-$\PQMV +MM\(HUN?F4D/23_*W_U%ETHOLO;S_"!8@.005#!):4+RP.$\C..D[U3&RJPDK +MFOL7E!\!VNR6_<I6EOAHD9[LJS"$XS6RDXZ1\OD+DM8OO44VKI-!\9$\61AW +M?4/Q;O<(H4>L@+LSRSQ7_SU#[Z[0Z73]OG:;"+$=L=@F+)^7-Y86-89UI#SQ +MD0L(K,CV2$ZOG=_(@;H\V%'A2A^@SWRU#*:">.G`E;LZ_"`9$YII.#9':64T +MAM'@?$]XOS7V6%2.4C/T*Z)/P?UMR34D.,BNX>Y&A8[C")N5&R(G@?_KP8$) +M[]7;@G;J25:T$]I=+J-)JF1_J&BV=_?O!:3F_*K^P146B#%,3+^(<U*+`[SV +MEI+XP["2\BOMD7%2)GS7A76:BS69?%N[EJ+C,LJTM/]VKGME%]<GRM6G<N_/ +M_P5:.`$E%J5>N64SWV5_5I_6[2651I*@W)FU^.!DC>V=H42TL3HW*X8;OLDQ +M.>[)9?)#V/F.*2X(JT5$B/=7^2W*DO[*J$-"7=K=U+R6'K@N=J(/[19-VZO7 +M@5A<FC>7Y6O-^6'W1:ISUK)\P%PW]3N&5U)1_R@#6(3XBNLAEP6KL!10UJ-! +M2#YD782SXD-;9[AJ4ZX&Q>J/""?35/B.T`ZK+%=L\2ZF@W-\IXE1K85U0(.Q +M'T%[6RF;`^97Q?W5ZJ:\B'TKWEDDM_?F<1>.2B8C@#W8,32+4SR)@E>_@42; +M>H%E="<_4<7MT=\.V3-DA?_9(+2-27=V4X;EIVU"UVX_VB;%,]I7#0-B,WJP +M#F743@O#5'G;!>__;GHW3=W]O'\+HL$5U*5#46)^M*_$LJV@[+C=M&TWPF'M +MD\I_('\J11,RUTRA&IPSL>63WV:+=I7$WYD*WO14F`;G9FX86R'_PM+Y9O\- +MFLSEE9FZ3FQETF@E^0"A+"K07Z^2?!#_3`Y<4FH[L4$TNGU`FW.UK;$.2J_, +MYM0#JM091<_(3#`(JSI_9#YKP/0W%4%^,8A2U8FK*4H[XP>%T%E]Y1)-T`E, +M,KS8K/V*A_SI>V%?VC7Y$39(@3+1@_V=D\J7-_O$YED>WN#;_C++?Z+*?5H* +M\!GW8K3#W!WZEU.25=OLR>9S3UE@:-H7B9J;38&K_3Y$?@^@C^!!NT!6:ZRC +M;#:6F4DFP7>?-B`(H'"7C_YL>WT`[>B[C4M7SDN-C9V=AFLKE=L/[*//SE;* +MOU]GMA-^LK?.F54:)%W\URZ%RM!:@-2G)#_@H/1#Y9HZY4PP/_[M]+#_@N@K +MBRKET/N41J4#B7:Q'=?2$9TL"#3C9H#)_M"DT[-#@4)FKKZI(KA;^*%JQM-I +MFEW"XOA_DO:)7S>O,BL`A>]J)+E/-Y#_W(NMX.^5!18Y6R%E&LRLIB?:;4Z6 +MFTG<:+NTK[H^Z*3\,1Z0[#N:VK6=\&C:EISEI7B_O_S3+Y#/:6DU/;]QJ,$` +MO'WUST//\8#NFSO:$S?8(`2O0IMKXX'CS_7A-ABJJO7[#8UNRKMFX6'>!`_; +M3:[;-;<.,]G]#HM'I,U2=QIM.!]YK4ZK64;Z5!TDZPL98#&3_B'64/_=()U* +M*JTMRG<UQPY%G.L:TI/CC@+<\N:OUHO'VG#>)'8#>WRC6H%PGX'YJ-H^S]0" +MNBPU%5VP*QWM:'`,6>TI-+GNV[M(GX?U^],F;D/RQTVD[?0/2O%\.%!O5IG\ +MP7;P[+,X\^Y6[V^OQT:`,1&M:U:0;^CD%JMKR9_/4[[KLAH\UD.WR3%496F/ +MM%?H/T!,AJZ+(;,?X0=+=MTU&4R'<#S[W`L\NZ(\EV@_/3R)>5H'P1O>],Q[ +MV=?M$6;P9ETLBRCIE"4D:K!(=Y0^;,#^B[5H$JY7@IT<"O_=]W*KRC`Q/IM/ +M.%_.I\)[]%;ZR8:Z]H.W0=:\_3/G5]Y+L@QVFT7=EH`_H"[NB^AM"'@_/PX$ +M5E;`')IYW=3465877ZF2%)M>'XJY6!BCYVOLLB]E\#2(>%U%NL:,.JVJ6D?" +MUHTD\EVA_LU*5#T8G%17&X3S<43%[-\'Q`AE>%_/+YP2"A1MP9G'D)Q\>_S= +M:#(97/Z33Z#/CL?<?]J-3VDM[2FNB3!#QJ'3I%(90^Z?;$*HT?GS_[3NWD:U +M0#YYN]K6=V8=#Y\&\DUV?9M14"6FT(C7[#:"3_JV6)J4?P,X6#$KS+#5R9O[ +M*E]X,8?7V<S@!=F0D6C[++YA[OV"G+Y=GGU[S'EW;ED:^Q[+,4;DBJ,N][YA +M4S"C+/,[O2.GS=;VSX4O3Y:EUTEX_:>=6\>59BT^^,NUCZ_W1IID3$_N4NCP +M^>`6?'SUU<,7.E5S3+Q%/:2@*.$-W1[RL%'#Y]?L!W!F(M?/R.LI??:42DB_ +M&7-91S\DN<PL:/GTJ&(5+^<NY<$?,5?E]?*Y_?/K^=.4*&*HY0:L/'?2K&PF +M&12&,M'^^9(?K[R@;6>_725@F48T3O+Y,&O0CH$`4?&8:/2J/U/>49>C&UX. +MUH@B>@D"J>8UHSRM]-[^WQ^@!'5=\W!#95\OTF&^>K<I8GI])DO?)XD`BO_W +M#<"9<DNU3L1+(G<(!\4K_65`5T^K=?1)V?(N%DN0J6L@%=:R&KOO-9WCRE.$ +M?$[5U4(Z'JL;UYF$<:XP[L#W1W=2)]BJ/6S/O6;<MY8[*TDNP;$?W7[8PUU! +M'1<&'-42/<SE,M1K#=IM;]5'917TTW1-'M1LZFM#*4F<&;<'JNHSFRN4=U0O +M.A^@+RTE2?(<U&5%%<O8E?;7.?E].DSGO?%Y8Q!Z?8YZTO.:E68^R%=:3A9Z +MFTJME66:O659\U>:<K5!D`4:_(9#)(C3LZC;O.[:K@'[8(@VD>ONV[?14U+H +M-89`&-49C(ERIMST`$6DUZ^]&VE?U=?_L(*35@X>^@SU,^K-!L-%LNVV?; +MV%+9TVXU?>ZPG7C.M=QJ:2D,5C:ZV+]%K;!7G%@*=R;$^;$&-V`N7]"*S;UE +M4X;@5']LPGDKJX)U,KE*ZMJ0F>*ZSHL#BG9B^QSDVO&8_?]9TNCU"YBCU#W[ +M[^U,5;S/6819%KXK[D_SI]2&]8IY,W6%CXI^HQ$79F5WHGI[S)*JBV8\:D4- +M8E?V0V>5R%6/\AI7D#%^:3OM[N$&\7B2M`.LDEA=GS3L^H,]DGTY2"M>=H+* +M8T5+2;7+]=FDL!R?.5;#>7-I_@G>JRQE)Y\]8#5<Q^K(,%A790->SKOH92<I +MC;?H_Y*_^OK">[BOM#./V,UG7O6<V:\]%0@KJ6-:+G6L2S7PM!2[T@.XTK7= +M9W3Z?.]Q3:L+E[KTL]$,L%]/90'D"?5E6BCL5&V#^R1>Z$]A;48@31)E_]UP +M*V;`,]"OJ^;,%:W6<PIO^1`/DT"]W^7N?DPT_WP\P8B(KALI:UD99_W-+FW+ +MIGJ^PW`#YL-BAJT$L]T)F'&H9,8/4I!VRSW>DVE4$JSLZS9G#`[?8U%H4;^0 +M!MV?1LI_HI2OE?O7(DG[76];?_8MJ(:"E?95CY792JECK`)WD)8Y_BTG>1EF +MNRM->$5_-E<X,[LT0Z1E)7M>)O^$V\78YOAD&W]EIJ1,HUYW49[2:1USVCSN +MGU&@IL[2:0,(2+Y\E<?UEGE")Q4620'7Q5"?\?/R/U]#^,F+[5<KH_QW/\\" +MUKOR=%?NG]L>6.HRG`8]KQ)-_,W[[=4#5Q#7]/"],OZ>TZI2/K##/J^`QUL< +M^^,5?]>AT:_@[E>.F?55NXWB9-KSBR3J_HC3%7V.R\_5P$.,VY],2OZN=^8I +M\[PV>>[/?$-QG&>7CM1!X()[W$.0UKU3GGOSN&^^7_W.U4KYO'&C\7__QTY/ +M.UM]**>(^6M3/)B?[;]D?L3UL!DF[7.K/ET3NTI1]H'O>A=N85E\[Y<W@77/ +MJM(Y:9O7.VK;KI<%-`MG)6?7(ZE-,7^X>.;/0R>.<?,)GDGWQF+9YW6N@+[I +M_PWN[-?+*!-%GL]FFJ`5YG)-9C*=CE,L\P(F?P-?%=1=QHFJ/*48:8LIW&=* +M(Z/TY/A"=:8CGL!#B:A/\,_G(&(F)Y_B7^*?_,@S[_JG^+@?-@XQ_U@%SE++ +M8DW>A_(\5W@Y'<6XZK,IG>TT@NIZV#WJ4"]J;2MKJNB%F?W=&UZ/&KW&T%D( +MSN`=L:6(/Q?_3NRUV-97(Z,\+"NLTAXK3_Z6(\RA^GOL-5>?I3<"'[3]OE`O +MKZKVX\JS8A1')LETMW_=U%B/3<.;E>?TJJQ6)R'8K:HP]@:GU6#NI%AL90V( +MX!^\8$#,Q"N++Y3(2=EDBA^O!7ZMROYZ85&.;>=#]=N.+2LS"KC59V*G8MX] +M7E-N;[X.@[">[P7'$S##Y+[Z\#]!X8DPGV7!=Q3PEGZ/Y-B+S`V"Y7WU4RH8 +MYTS@A$[A\L^#D)[O.GDS!LIVF97W6L/XGF3_/>Q*T]9;Z]@[/I+S.6`RHYN\ +M4K=^(D(IE)=T-33SG';P5;AJSWSPS-,K"9OJF-[[`1=VTNZ(:1QT<RKAV;IS +M-O]H]?/(MFKZGV$]WWTNZ&MYZF/?WS7?H9]66F5YA=.8WSLNKR>(K=@D-/V" +MIJE;Z9WGDWX%<>8W,8+#/YEY;9!8@%]B3Z?Z5Y;ER%`I'<]/+OLQ+S7'FJ]/ +MHR:Y$^P97[WV#&7E;^:7!2@M'3IZC_I9"_GEW2ZUL"2N&95EWKV'O-V)\>ZN +M%Q#5Y+N38K/9W66E.Q+(N>VP"]]!;_)_1#+1X)3H\*WW]K2Z?N5Y0"?UTF(. +M`P;!``#!``"```$"44^A\!DE/`"%P`(WC,$\)C("`PO.OP($N,4%[8,"ZY%O +JB(`%`1)E;&8M3&EN=7@M05)-=C<M;',*`Q.K*:];'6F`#!UW5E$#!00` +` +end diff --git a/libarchive/test/test_read_format_rar5_blake2.rar.uu b/libarchive/test/test_read_format_rar5_blake2.rar.uu new file mode 100644 index 000000000000..fe783f39ed4c --- /dev/null +++ b/libarchive/test/test_read_format_rar5_blake2.rar.uu @@ -0,0 +1,18 @@ +begin 644 test_read_format_rar5_blake2.rar +M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``G\AL9T<"`RZ6!`"N!J2#`H`%`0IC +M96)U;&$N='AT(@(`YGN&)9H<T-4;;6=VSA"UI<]AE5F0/`"<J,-&UD4X4Z4* +M`Q/8<K!;AO4W+,Z$$@(W=4,T,_1@-+UPHV2`./@$LCDHDIE#H=Q6HO6ENI%` +MDH(%60!B<&@G#):ZYN\PD8?_Q2T;QM`)'/A[XE<BS#F8<SQPY[/W[C_<ZO+B +MVJKN>RW#!V][-VM'MJ^^#686N9>>L\.7ZE#3!_/][K2S]G1DR+Z^7F8BN1X0 +M5C;9*7958_V2?B;;=J=N[KHV+"ZA!YHY#/G_C>:Y+\RFMN%A8]94O?OY_AM< +MPE=<8[N7Y/@&A*5GFV:9E;M&8JU!O/TIK!)5X(1%@FPVF'!BV@KI;P1X;E7% +MUF:9HH_W^02_+:F+$Y(@/'B`PID.TWYQE_\RLWU#)O3.[Q($`^A166GIT;W; +MTJ2BC%X%D3X'S<XM2VCU%H<$)2[..]M(;37,H8X793O-@H5X47/R$4ILC1A( +MMGU'^5C>O%DLWP[4Y@FL"%R-TR'QED.B&5!.:-0?\(Z*Y>@-Q\DTM%F$NB_) +MR2,7&FYP>)NZC>$5IF2H83OILZ:Z@5?,CH';."Z1XHD*/TW>0;:#%+'H].L@ +M]Y$F)>Z]H[`(+UQGS7TRO#-_QJ!U%RCGU1\95849&LP&15-H7.]MZ[78W*#A +M&G"U:H/3OF)^-H<4X%:Q^/'7#KVGX!=*N0!%4X-1'89S/0E)E,ZW!'')%(R( +MD].ET_<?4C8_N,$1&I>+8,B]G5;8>I3T*8I8CH+E&UKAJ]WA;%(A/KO`R^M\ +,"^WWU!UW5E$#!00` +` +end diff --git a/libarchive/test/test_read_format_rar5_compressed.rar.uu b/libarchive/test/test_read_format_rar5_compressed.rar.uu new file mode 100644 index 000000000000..f9f811c6dc0d --- /dev/null +++ b/libarchive/test/test_read_format_rar5_compressed.rar.uu @@ -0,0 +1,13 @@ +begin 644 rar5_compressed.rar +M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``B<9?VB8"`POI`@2P":2#`LUPRGR` +M!0$(=&5S="YB:6X*`Q.+5ZQ;^!BM'LKT90$G96!4'U5V7;^4DG')SV6660QP +MV663&,62$X9"223AD)"2220DXY))(0A))"$)))"22$(2$LVU;WM],PZ`?1T# +MKC^>NI_W0?[WVO?=>:\Z7^@`0`$`R""?GX]O7T\O'O[NSKZNGHY^7DX^+AX- +M_=W-K9U];5U-/2T,_-S,K)R,?&Q<3#P;^]O+NYN+>VM;2SLK&OKJVKJJFGI: +M2CHJ&@GYV<FYF7EI232R4C(1Z%`?CHR*B8<Z<-FH:$@H!^?'MZ>'9T<W)Q;V +MUK:6=E8V%?75M95U53(3?U_(_0)3Z)3G^$2718HP9Y87:C@IIBF4%^9"T7:= +M1C+#.,"H1_^@E,9I"E]E4*Q65@N+`9%H-RX'=>$&P`\Q!(R">9A6-`NFH9;8 +M-YN'@X!@<@^N81.@IG88#P-MZ'N]AU?0C?Q80(T8,><*'DT)@V+XX.8Z'"($ +?J>&%%CMC0_GQ4(!L(0T(A-(QG)`O)0`==U91`P4$```` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu new file mode 100644 index 000000000000..a83c78ca22cd --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu @@ -0,0 +1,345 @@ +begin 644 rar5_multiarchive.part01.rar +M4F%R(1H'`0!5`$'/#`$%"`$'`0'O]H"``.>[Y2I7`A,+@O8`!.#I".V#`FI) +M!96`%0$W:&]M92]A;G1E:R]T96UP+V)U:6QD+W5N<F%R-2]L:6)A<F-H:79E +M+V)I;B]B<V1C871?=&5S=`H#$Z@$JUL/WSH`BQ&75V"(540R)79@1V>KN2Y+ +MN8P3!#"EF%)(!"&"&:0"!($@0P01"!)"8"0)A)+N$!,$"$4C&#'`*<45'BIP +M5.+'`*(@,!.`.."BL5%)QX<>08*SBBL5$GS>MW-;WNJNZJY@!>^?//GG77?7 +MGI\[ZZ[]5A=UNM[UCWK>MX*P2J_%=?0O]_ZUO>L%56ZIDA[W\`_Z`!``=?]( +M`#H`("__2`"Z`=*_Z@```D`&1?91$7EUZY<DW^.B622/NT6)3WX92?9X->X` +MX9+&)/)OV_)7U)V*.JL'M&V77AABX,Z8OO5)^SZ7E(,+@JV5M?*G"-L)/S:C +M`%"!HN=_VX8+9!OJ@TVS6XH,%L9C=5^R@<]KK.\:[*!\:N6BZ\-59*LC;=A9 +MZ+M1I[J&N.0O3+)!A1H<;_EI*(&_\GW;/L[QT##<7SH!TGZV^/Q=9Y0WVRQ> +M&42]OM4KWPLS,:?%8G"S,IA!D3;6APE#C,5A!WX.?G(/#H1-^4"\QFXY)1U] +M0A(I[DI-E62ZZJ@MALY7<=QYUAS\W6LO;@O+]_NI(#-J$=X`\3(/$.+7&42Z +MX<K;NB9DHA+S&B,`=UHK[O'^`VS.1>HE="O7N9=?"/V6DMG9K]89"";A)FQ$ +M/CKE?!)<1<;B(E?U^IJHVX7$4%=6+"`2A!0EX8W*$$G:##7'9PT-MK-N>-!5 +M#O+[_?-M(I8098IJP7/2$Z.A^<49N;[H"'5W0E.Q4G]$!V2IL^CZI4/I`-*3 +M3-C3A64;:EBFH)+AK4@3))QMJ=*:LC0E"37*R'KP-@39$HB&8IM"E'9ZVH': +M$[5S1/;-M=L!3$VY*@G=D[PFX)WQ-R77?@>`77@@>$I+\0#Q@UO`-Z3R%-_R +M0/*<SO_4#RR5*N;\ZSUYX&=>O3\[V/9C/CH.SLO?V>9HM2]8[OGG!9:IA8AV +M_;]9+0<KH?APORTGW^+=,%D]9T)J!D_SU>M:ZI^:<5I><#Z^TKM8_[;/P?R] +MGB[SI/6\[GQ^0R<YDOA9:.]PM3WTCC_*Q-/M'MYS/%J,K$?!T8K&_9^.UXVR +M['^_O3N3O_TL+ALJ#82&I^[R\]CN7^?U4N'_I*7J3BIG&_=37EZN7T>%\GM_ +MX\*OP\KW-TXKOC(^[=]8:GN<YR/VV_9>IWE[^Z9Y?H0KSBO8]3SL1I_E^O^5 +M?]O[=,GB^'"ZOV\SJ>__KFO\57QZO17GU/Q@_TUG:"C^9Z4SJ<?(P7G>I_CN +MM?_*1@9R@]'VOCO=YHF7YTVAT'DF%Q.@D_Q.YH.Q^?QNUVO+WOT_A"4'L\&[ +M_7,37F;C:_Z_:=_#IYKX_2T'Z3.+P_#]1]H(&]=O>;_G_JW^EYPG^YWWY+U, +M\*7X?KB(O'U["2_EJ665^%ZCL5DWNMW62?)/.XS*=G\+*E[:%?=Y3\WL,Q&\ +MEIH]Y]N&>4O?D-5LN_U_X9ZDR[I-;W"W'M>A-;)AGFFJ]/QY_T=],U/WQHEO +M>4EV^_P<#&.G70';8RMS'3]_V]KB9^V7WZ@8`EQM$XF]G:T_W>^Y=V\'"=IQ +M.O]AVA/AG-UWM\\C;8=Z\GS<7QH+;?*^QCY?_JB/TWV/VFD@_]W'@06MD_\] +M*]]G=<AW;+^^-R=%L]#'SL"TPM\X.ZB>/@OT^3RKGW]^_9=C-_]>Y@Z:[^+Y +M7X^+ZK&%UFPZ$MINY^/YDM/3X>/]3N/CU5_J_\T;SQ]CN\F[4W1PK_WW?M)? +M6=#Z.7[GR\;_.B@-%Z^+R^>X_@]M_G;^II>V]VX>[K/;%='K6P/J^++\[.9^ +M"Q#6"LEQ_\4L@U9?LPLC?CHN3W3;%W47]1<NL7<9MLQI9YPWZ5#"70.]0T*& +MS;J65DO7_J/U=^R\EF?L.^PZ;K^HD]>/[^CJ81$@?L/X,XDZF%1`S!IO^,FR +M=.G9.PTHS8F`2$N-OB:1`G0Y4,,#2#%Q,8>IU%Z7_\G\^PJ^Y\#WMT"/16#\ +MY`RZR"B_J*2%R5DY#(NGK*=N,'^N)]P25R7_N?S[RGXO`0WVK9?X#C-[._4_ +M(\Q^"R=/N-M)B[BE_!+_W/Y&O41%?#F/5D:9?W:_19Y*!TW](?TJ3$4<5H-= +M.=K$XCL<1A/<D4IWX&L!7T=YO6W\CX+"Y>.OL/H^#:9SE?MU_:\'[OB^G(_W +M?-/X_L:KSLIC=%%7;P];A^;>GSQV4G'Q^0_+_%+G?#R-7_R4JVGK:"LV'>=? +M=K&RN&V\?>^9H<)Z=]O=+G/O[#&_%V\&E='CX,?^,5HETQ^OO]?]G&=</%^< +MOO/E?GONW9W[[_PL.)AG[[/;ROW]3]7SD9_F].Y:66_1E?F41`</E=CP/VO_ +M7NOQ<G(].[]3[?^8UFR7.6U;+ZBY=:P<LCN(N8E5(JI>HE_\/_/2P=^]7'^5 +M]'C<OUIW_6)QU;FKW_A[K/"H_7[BO\N:P-!Y.?J^1_5)TW?W:/[,G*>,EX%W +MVDH[8MBZZCG^IVL_(<?O/([&5ANII<7Z'I^#Y/LR&#P7YY#1L([I>#\TY[B4 +M/W\7SNNX<!MN=9_XA@O622Y.#:;%`*X/?Z.R73=;8A+G%1Q8)Y/[.IQI$L^$ +M#1#\_^=OC&SU`L`:XI/8[?1/NN-(K\YBG/OG]2?,&K@Z!#K.D\T-1CJ$/7G. +M1'Z;N$4^K(S3PE&.+KZI0(_4->.H'U[F=TAU0>2DYDVI\89*0BM!&2$I*STK +MJ)B?:#L'<RLS.3<KH)+3S,J-'(:B:*T@,_)3S09:85:X08FR$M/3DU(#04+1 +M&[/RHB,M,.**5E3G23.<L4E+2TRUGY=(2+/2<[K4A$9@1(P<)-DY(P?+3D[* +MS8AC5I,34K/I3H[1_)`Z`R>JD).7'[+20E0\Z,L432FM5*3`_HEP1<PX)IT\ +MX*3)4$_.STQ-M)82$8IT,DT$R'-$HUG3[)8Y52$;%59031J)4Q;D[.#4<R8[ +M3\P,Y-3K36F&A+@R3[#4)O^)DFCFH4)%>)Z;G)`Z5B2A7XX))B(%)2<%$Q*1 +MT81-F5>6%>)P2`EK).?.`S3@SF&3$>3$R"L\AISDE(R$">Z`Y$,74A*PT8K% +M/B@8SDT=6Y0=:LU1QB;.,F:F*`'$I/6"H<SJ&ZQRVL%=1$!V%1U&DI-"/C1S +MDPD=K*%Y.?I<6("0Y6=.@@C8U238TDQKI4Z;34Y0&JPDY6?GT!2%9GC(I.'7 +MHU8";A8J:(JE02R;:9^;4D"!T)J<ZO2UGN9"3CLG/M3G`42%$)N+UPD4:_!+ +MYDJ%U66%X(5AE4.:"I(BL@@[B:IBAE3*B*SZ('.,3VNF)T\C/-9O*S@IH5I0 +M^[F#SLD*<B+'7DR1:I0F*IN8GY";G!+`N=(:H<F6J*N*=:,B_PKF#ED0V<E& +MZ5T,Z9!A7[76@EF<UG]4)CG1)^H-84%X<0R4%2I),7&O,6DN96%UJ:E3&^3E +M9MHM+R&%M1+`E$VVT(8>N$7$)!`D9[M4`R<Y-"01*(A,M,R6HGT%2=GIS4'& +M%IAT^NPZ-^?M=$S,PS^MFCL;-:(:SSD.Z-;NZC7)"S:+$["B<5-F93(2!UX0 +MZ$K+YH&=G`I**X&7--'Y!1FR>[0"&SX"=AB6M"/Z>8'<ET)&JH)75M9(81+2 +M><$0]MRU*I9]15)"*SB*DI!J-/*+5-G9F2M-5)TP-/"LIAT0N0$'$N3D\-L5 +M#K,Y.K2#,Z[$HW]8($>%O:$H<5&0BNQ>-BYI:#O/FM8+'G7(H2<N??%'9W6N +M=EES)`Q?%M=DV=#CLE*XRQLN'@71PK2,Q#RPQ^36C-`9)H>3F;:J%4>]54YK +MA`7!6LT>UUFW$G1BV^T,*&$6+`M.,ZFY9:\":?6->USD2%KJ!GK9641.3<DA +M\B+3J.-8'MJM<8]8[*`8D$HFZ.)*.G%JM*FEB[FA'SRV"T@$FS.S3ZMXQ";: +MA2&]/C93075@$HYQ(2\K,VH49QI::Q1<0<H8FA3L?*@-.]A5S!H*ZO?&H2<G +MCN#F9UK)AI+G5;1:ZT56ZQ#&ED^X=!M`9,+'%3)0I9[53B<E5<"*V&:C7'07 +M*"UO#I0^5BY##0<(EF(N*RF5D,/!X;$N)2J3B`D?]"FUF8M[1OE9T++JC];< +M&#@-.178/%MT86N>W0T^N;?PK[/^/_A$U)QM-P"MF4C;_M!QD(__UT\9@-&Z +MI4"KCZ_>=SWKLV:S;EL4YNY3$P]MF$#YJF_UP.Z)?2&FMWF&1FAV"A/4X_^Q +M+J=A2QRG.?9AJ)N(8;[\:7."]BSB1+F63QS$N7,=[010AE3'_T1<QZ@?4!E3 +M';[DN=2&MZ&>5Y814AG6AJJ#/C^8H+ESVH:K`SM*D(K0SWP:L`S@4\FA8ES_ +M,-,>N#"F3O?G.?\]MIF&?2#4`&>*&L8&?`\\(A@SRPU&AG9>@$:(,UH:EPS) +M[\(G0S8!JB#*F8GVQ<K_;"-R&>8&MV&;D&JD,\#TE-I<WX-<JT'?TPBK#.)+ +MJM#+YZ@177+`A?)!JQ#/C!H4P;8BFVJI]"'971E7*5S]R)5DOI*PF")6DA"5 +MU7@0G$!6P+7+DL2US)&:BKL$<DUMMPP5G2/[\$.[EQ.UF6JO@E,`6KH2$(JY +M;7QA:L%B'EJJY5_B2U=R1I&1-$1X)(D5\25ERU>B3I'LE"17QHZB+5])MB/Q +M*@EP)N2*N1U]V6O7$WI+F2I)="<`EU)5$?R<HEV)5DNY*PEX)6DO)*[TX()O +M05L%8?UY+$M;V1*X!1F%6)+X1^)?B/Y+^1F3`$@"=@2$)@28PD`2&)`DB201 +M(TF#)HB80DB2#)+DPI)TF&)0DPY*(F))MB0I*@F*)N28LF[)C";TF-)4DQQ. +M`3'DJB9`G*)D259,D2L)DR5I(8E=P<($PX5L"URA+$M<JVM<2TRP58DB"/Q, +MP1_)$D9DBB0!,T2$)%DQA(Q*S_^Q][[U_Z1-'T6,33,/7YP-$TE4T7V56,SQ +MV/K%>RA?H-/66`YYOU]O<,:2??-S@[T+S")%/D!+@I[P)>%/8!.@4XP)U"G! +M!,`IYP)V"GD@G<*?S!,0IWX)D%.Z!/`4[8$\A3:`GH*:X$]A2>!/@4U()]"F +MG!/P4T8*X!3/`KB%,R"ZX*90%<@IC@5S"F'!70*00*ZA2^@G\*7<%=@I<05W +M"CP"O`47@KR%/T^<"]!3[@77A3Z@5["GT`F84^0%?`I[P*^A3V`5^"G&!7\* +M<$%@`IYP+L`IY(+`A3^8*`"G?@H$*=T"@@IVP+!!3:`L&%-<"P@4G@4&%-2" +MPH4TX)L%WHP6&"F>!8<*9D%B`IE`6)"F.!0H4PX+%!2"!8L*7T%C`I=P6-"E +MQ!8X*/`+'A1>"R`4_3Y@,B%/N!9(*?4"R84^@%#!3Y`4.%/>!90*>P"RH4XP +M++!LT'_#?7%4O+TT32_1$T?/L(W01=.PWG:V;1-.]X5&S([<8-UE<[[\K9NE +M4&WNR-"G$#-9GB<;8M+F,+K\?D"&5E6OM['H'I+UE-I@^!!X6^@H'J1/%ZCH +M)JL!V5V3B5W(B>7U&ER,0/\AIB#2PC.65#YT?HLC>C#:37$1PI!D>,8)$*I? +M\M'L1;(NWS'1FI--5V^&M+D,.D+7%VE]:6@Q'MJD?X,I5+-$_.3^AS3!<<8A +MC%XA!V;"L'ZUJ^3$5W;BX*V;HH3:FB#3L18&VU9+$E@^^BED-,U>C`*X%1C, +MKF\]'M7=&_7QK;<$UB*]@M`X)I8*@Y;1/O$$QTQ*7X1-/)KM>+Y2#C1["Q2: +M0J8$_'IS!.,XS7L%!3:U35D9,X<7J:_KDR:/Y8KNAP3*)45ZZH$>Z)'H?VN$ +MO=Y5"'U5>Z"+UWK^LHNT,"%=>8.R.Y0_8RJL]B'\I)KA:^]%;HQ.YB:>Y4C= +MAB[C&FZ5?1F7TTC'Q',U_RCMYG0V>,13\HZK85]V^'7*M[&OO<7X-&:4)BYX +M*OO]-'<^EJ^+6KUU6NJAG^>W8)54=="+C;ZMFF%V+R&\;L>0J7IC9L)$%3Z] +MJWI<(UD5@P8">3(\)17'!<X+*)C%IGNN"M<&:XEU"M>\<"R-\0N%'L!4JA?A +M:>+!M@="L>#;&$54YIFGC1/(K.)NZ-/F1D1G1B9/WHFG>MPAIL<![%*O4%_> +MKYU1C4@::$)%W`?^*/%8?T4I&Q7QC(*C=IH9BAXN.L4-4.Y@U&O`;'-[&I5! +MTM6KCG@N>!SP7\CN-L#"%>P0FC=Q9G2C0^J<9KMT,4$37TQ`^F8Q'W#2?RJ[ +M\(DX"V]CF4$S.N`@$D/;884IIXRM&9&>'Z[6;:$R8KA_^='!OY=^';#OU,P[ +MKY4)?=QMZWOY3L.,%1AB3[AU-W0QJ34+4$H"S`*GCJT,U!K"8GO$!`J=71XV +M.5$=V?1K4(?PX`RNCLW^B!]Q(DIY<"+I:2=!Z>A`VK9F;[`Q%$/V,J"1V[)I +M:DDK5$FJLC6M)L+!6LU)$F$Q6GDTD(;:;"%#)Q($(>DIX@RSTF,.::>DC4'" +MDAD;NXA`5-2)HF>KOS,8A1T$__RU*B:-!?2:O<3R6#U]2,4W7Z+_TUAY`Q^^ +M'\8,*FFK3IV'F_&<X,/.Z'5USI=A8TK7I&K?,']L09/2&12G&-*L`:9A"F*= +M'5+AI,&<N#OQW008\N?8*D97H2!KWAP*[/HV#AI=+O[^AI3^']@H)N:Q1%.X +MK`2;#F'%OB\5(I$'0UJ'^P/3L.#7&5]U7T\2NM6D\$"E>EXE.&!6*YK@K5!* +M%,@FIGWPC1ZA-4&8-K[F(J\!#[X:<]=0$5I/X?2FW%_<ZT=51@W`/`BC!P>C +MBO-_6OJF"8H,"AM3_I%M3$@>,:6>-.T&[08=Z>A07KH&.2PUG^D/&""9'XD, +M">!G,S\01U1T>CZ)E6V%B."?^$\'/``>R:4,YQ>";#P\1<C!0^EM#&]Z'`*5 +MVO%AU0WL\V#J#O_Z_]U!$@/U#>#_4+PGZA;&?J#G#2M3OZ='#'V(B)GLRBK^ +M?^DKY:S7)80X!_E-"YKZ44V0!"14Q?EC)N?W;,X?R4-SE!L7"!UGP$-><L/= +M^`^]<#B2MV]Z-,<EU-TUN-+YGP)OV;SX.L*CV:=KFECK`<#M71=+$5M-'=)Q +M@_8,R`4>PL$FL&-PO74RD`0Z4:$.AJ*M.)Z`<9X-]/:3&.#;KK27#;M<>7S/ +M]BDM)5-7?@'46OPUI-O[4091>+'-:)M9>#-S:94JTE8/V,J[8/./&D:O"#GT +M-D./#&[2&[\CJU0]15+RDS[3!T&]0'!61AOL<05W$)L$6+YDH6H@U8>\F*U8 +M!5A,0&=@_6E2A48R?M1:B@:KI&'3Q"%8D9,4DB0&50W0V$Q&"<*7FQ42RD,S +MT7*+GR>[-;<=7X<*NC`AFG<:*\SZ>%".%%;IKVF0/^[)Y`7-+OT%R<\Z--:` +MZONU=A9,B<,5J.MV1\(/74HX7;IN$)%'JI<C#?X`>P!^1-D,FBLRF&>+6NPT +M;N1`\K$!*.395?\(IJ`:_JYW>GWTJHU;@AG&,4+B#>]Q?H=MG]%4^D9<9R(J +M:&1'2V>PZ5D9*WWM?]V8J)QJA736*R__QDG4`W3JZEW$=`@O-H:&98QG[!TM +M*G';FL69T#LL@;67!!EK\"GL9FR6R*)^2H'<(>C5/C9*/5%I5+.<:`-BEK54 +ML=PJ6,X#GB@#8RX^6[CN4,KA'?_E-@%Z/8"M36Z&G^R"_0X<0BZY<IV6RQV4 +MCBV8T<67'52;+;(`87XDNM8M,*?]UC$!W:/U?HS;7AI!E'MICZ^+,4?SUX6K +MY\TUT`Q(@?&&(P#UPQCC%.]T'7V9L=8_BUM"N;UR`[HWG^["YU!/>XOM)A3W +M]&1T[E3FB[M'PP,,#/DUV0&-LGD'D$R,"XA8RWW:CTX?R8CFGG4Q:(3;XF/& +MWZXPRS<D>S"`+'B'-+@:D=@N.2O0;/N[-RG>>,$!<(JG(@1*M&)T7(B%1@U* +MQ"F06V8Q4AS*)LL]LOY&(U2&>:@N;H+G#-:_GC.(I:4+FF.V#IJ]<Y-6L;:N +M[C9V:NI6O//%4*U6-PYRB"I$=SSG%M>L`Y33`'BXM(`^>):7QL<I%&F%1XY8 +MBDJE+D'V<N#F@R5=,U046TQ6N#K$5:E3"-#0JE6\,:.Q$^]/8.QLO>,H2F_G +MS,;6L;BL$:`0WG>4W'"JUKDM%\(BY/;M9RJUFXOAHM!XM;/]#F9@K_VUH7W^ +M83A6T\:ZE*VF.FHW$Y[!G3)TR>`M%Z_1;,:4UJA4`;`,8L%9!;RPQ=&\_X(7 +M.A@H)2#9-E0BD6TW_KX!_Q8D[)*Y)1Q/KT[]6N3<,BX0'3P86EMG`EY.A#JC +M`AJ$;V\NB:3KJ+6UJUX93/ZJ:1RA&SUC]K0A?TLR!R8BP/,]#R,RB!$C0S%U +M6=J&F6B'(B*]F8/L0>JBD+Y5I-,.9&[`EB.AD(T,^K/IA\8I.<5";KC:3CC. +M,T=3$60M81-&Q']JR#3H/?^M8%OX)J:@F9]-S,.V+[K,6%!!,:.F!=KCSW:K +M@Y=F%W(=H/C<`WR4`648C7QUM*K2Q'1'1S[WL1L#]'8[(G1!^[6D:O-%KLEL +MTK3JX!G6=V:'NU<PVP?C5@FA2ONTA.HJTC6-<M1,%^+@$J4]/Y,[9P#;;`3) +MS#IS:'\K!I`H?HP:+H/`)MR,,1S\G':O*R'SKHM2PV[H$E,4(B?ICGF.JJ9J +M@VM[`^+:AUB'X[Q[^B$_]#6UF\7(R]5S\FO]'-/QY-B!L'Z&H+RW2BB'L]$M +M2EIZZ(DAX'"TL<`V%@B=F(^C:^Y<V7J,@L8:*S8*9)[;C"3-+J4R!'A]ZY2^ +M^\>)1%%GW*%FS/26FVM;-80LBVPOYHK($P#JH_FBV*S[$[<]?>D]2<L$//8P +M1L^MU5RYOJK(UW\">^-.OG@*0O=&9R,28917]95WZ\/2IY9#5-+35]7'8[JV +MG62Q[/HU:,^;$@4N_RQ\X!N#9U1RQ'U-N$4=-2("%2Q4^XD4Y\XFI&"X0)ID +MQG4$FFWZL:33;[Y^W\R/T(7.'TB.H.(N'X$YVVBIY8=%"`=AWDK:\AF-\&%% +M`IX7Q4R+7=N;0.*6DC3SM'PS[$FMZ;@R"EKPO7M5#=P1Y<QB<BC]?<YQC$/1 +M(2G<)[*=!1IZ2P`1HM)C9S80'6!"8";F3_B)*`QWOJ9-$S;SUAK0S@S^`X7= +MZ#MV?1JD$;AFT;&EW^@1HV\396I74BC*R`@MTY^)LB],@`>=IM^K&FT,9X/2 +MOS(O-U!JY+=(D`'LP.Y!;Z^QK$'Y7Y`N/^0/P$;*>I`M#!$`160'EH,P@3IX +M7L]6L<GK4PVI3I-,&*X%1\,X&.9$-)/,61EP;S;Z8:/)4K5;@2*"N"J+#LWG +M@6X0(BY.BGY9W=UCJ(GBL0BNXKOR;NH6R$<T"F0'8]$MK*B@)]U)KAAD<T'@ +M+0D;FC*X-ID<W!L:>GL/U5I$KNLF/0O>=1PY+JA6IJ=54.+A.$G3)=[CG;F/ +M4F>TI?)URMK5+BBN07ZWL<=8:9W-Y]-INOQ"%=MK30/"G`^O5SE_<,-`\X</ +MLKXGZC+*U5JX)L<RU"[&;5OOQ%@C`W8I5=2)GOS)L/3H7J.-F@1XCM$[D[QF +M'19_3FA=!3Q,JUZV(Z*E^>=R$W%=ZMKB#":8BGQ`96[;=#D0^78A%'J4'F,3 +M2L4HQ0%H=64P5.(FPL;B$VQ@AWUY-F:4;8^YLR(G/1\P'8^FKC75^.,0&`74 +M&JLB::BF-ICU.&6+4^M&"BY5*UXX'`)4TT=QSDQ95C4@>/-!Y")-0<L;*:#U +MHNQ04^`XSDU8#5E'50UIK#3G1US.VZR>:*#<T_&-.:@#/C:^0IHFZ*WT\9/6 +MHI3<:WS:-5M?HFS$9'1Z'"CUH,;"HU\(G2I9!X:Y%0!R#VUPYY2>G1&H;\X$ +M%]0H'CP*=\+H>.3;JO7*J!K?"6HZ29B)60T.GN<=,E[D\5ET-47`KWL8T-M> +M!:'/%0Q<IERTA!,2,_5P"WK\(8-W&J#N4"?W;L6?&\YVR!#8;:E:[5LVXH4< +M'IG7+`<5P,.+O-W9_-MJP0[-R$;H%31VU,8]LK>93)=/$;L7H,EJE3O'?4B" +MG6(SHV04"16\Q!I*%O@%7S5!Z=#8:5"&5((W).]2N.U)3@VE,?A5!N01#<." +M:_,AN$16GT89]VOM)(T-$_(.+=]JJ1JE,731CA#Q0S<:FT5[K&N50;/!Q5MH +M<DFR-N)"-JL:!Z^`(CAC#WFX'AQCPZ(=KIU@KWCF,F]!<B([Y1!HCE5^43Y* +M9>VCRWE/#5W!#:)HM@(4U?C[B+$9FB[U<IO[82.;>Y1([=H)Z,Y1/?U%D`FA +M]VOKH9_O1?#]4W#RQ7-#0*L"K#IH)@/W'OR'"KY)4FE[,_XX8L8_KN,B'DO, +MG_`7)RT0SS0)!U57E6A4_-4JAZ'=Z1.TRJ*%4W;(*Z<M)4A@HRF%N9\+/<)6 +MS3/R9@>@KR@2S4\(ZV4%38W:U+R4DK9.2=#7W6H48B(#CXC>ONTR1M&N75#A +MUT9VM)T^H1N]E?[:8:T=1%MRN6C<][RC'$"]I0<L[H$J0DK4>PW*37$C^[H_ +M%!W#@;DXW5K8SI750/XC;(@>?K+!EPITN'")MFB/&CY,LKBZ]4J;6,2VX3F0 +MX05LT2#WJ@PL9QOEED;J[-DR_I:X<8=>0M$[/CFN"=)I5>KB*]?'3+O&&.9J +MY5.UXLCG'Y>]/@=*Q/7F2Q$2H>OP:8UR-TD2_&`I@:)W-K6-+%3-,8D_(JO9 +M6P%,5:!M],+R]N(-:+QVOA:.S9=;!</;;1FO;8PV^SZ,BN.:^'P!LCTN_]`W +MZ-ZSO>H#[OJ6IFC4`160'EI3[BK3GTQI%!VXYY*EI/:LRCX9_U(^C$'`*;?J +MR*VA\DP]6<BKS_.[MXS&OIMV7P_IIP]*\<,_N*Q,5'DD*)QO&:W<TTHKLB72 +M>3C8?N\MB;@+Y@RM691D5`^+3*\IOC',!;N*9WJC(?X!R:A[.P?13E;?&60+ +M$V0/`61&=D0>4?\L)7VQN4WK0ZH@2IJ3&6QH\\`%&T9:R!'_2P<`IM^K(K:) +MSJE=O0]`RP/O$0B='8Z=I?Q_)II<2237`HP%I])AK\N>&"IN8V)Y*)!W+<&( +MXCE6!A<?..F,*\K#EK\.`N!=,V3MY)V"HQ3%)&J2J+AG(&G4U%DZ(CK7@X+/ +MR4FZ7\(^"L3MCI[*.N>(G&H0?7O[B;JEP:?=O^1S(I/X)LXD#BBEB#7%IZ9Q +M:K-J/HL<[&"$M]76E)(.E'QWZU6BJ:<;CZ0U>!L-0A83;YUS::D3W3H91PR\ +MK+?G#1_68.<@15+^<.H\<[VJAC/]]IP%K\/S'AI]8YV*#(AJ4H?TS'5(4&/8 +MWO,DA@-KV:W,:7!$.A%SY/&UR%^]0W3A^C3A[CKPJ019`Z+9)[2U/#6K:XRS +MC5B"]V,#H9Y!&-HP%DN/,1Y[9.B!-;G3(WL>;F-M2$Y%TW#;*FIX]#F^,L@2 +ML[PZIR&]2%OV\/^2XM-!^B:_\^HA#=X\'NB>6@QJQO$8/`(CSJ&_VPWEO<5> +MSI2_GMQ:QN/H3_A+8C7QAU]Q#P`KOH`>ZJ1(<?20BM>,V#<-$*NGT5LKS%!7 +M\X\/\/_/KE:9.UE(34+L@]>ATASB2=K9(;^L9^&2M\H7H/E1G=82?=L;^)L) +MP%'T#C4QWB,;QFD_;AB]C2!E,4/DA./I`LL+1Z7@!?]]<?__E6FKBL;K1!Z> +MQV(>NIU0?NIM&'#-Z,.64L[E_"DO/SO:?)47((8]0'2#NN00_ATA`AB'2_@] +M_"6(.K(I8W?9!ZO(QW19EU&]6N[`>%5&/#4CI>DIA\43=/3U2I%N#@URG(5W +M11Q9"`/2B,0`+6Y"W$=O`>HZ>K3[A0U')BFMR[@Z)#PQ^J<,5C\.GDENLZH. +MLLCO1:I7DZI,^INM,%;.1^U&B#-??;1PE33Z+^!E%2M86CA91^38D<OY[X_* +MW>'6SF#Q`/>C\!`6JM],H8VVQPO7Y.Q#_BIH8A6K<M2Q',BQV\ISYB+,S.A8 +M#K!@U)^,N!Q#^-Q(<[_7NIF>9,E0C_2$*Z26MM.ARRO58$_4'AU(BE:;11EB +M]-(:TDJ##@/2"@C/3PRPJ&YDV?=J/\KQ&3S!1NXK-3P&UQ7LAF.9$[EOTZ.+ +M`!T-JE]PY*-8*QHT#3,*BU:40J="'VK\`JF$/`*B39M]?2LK(]:7KVSI,EHJ +M86\O2]$[,S]3NGYD,24?XCQ-Z!LR7W0EIX-+61(/UVA<M/(JTY]Z"_6N@#VA +M_);S#3NL,=]]4D98*WEQP=U<$3D<&:T(EXX/D_-^B<+3:1B+!'4;B$1<7!"Z +MV>F)'ZR!V-D1*TWQHYWAB&C1;$"L0_&C)61!YG*?AV=>:8?@>Y&DL0=.-;W< +M^KONW\.F0!\@"UIKD0X!3;]7TM*V7PYT/5!F;HK<0AY3T(8\XX2"YD/3;T!^ +M3-B0.C/"4T8*Q<'W?RS_^/'\#CBXKRHG\OJB>+^CN>3Q;$4F@>,5JMQH,#\X +MZ@SIJ<Y<ZR'#X".GW$-:&,3.'#ID`X1^?ZSY-?V`+(6SSNJJY<L&*2Y=6"6I +MR"=RN(DQ5GQ$4*P!K`(Y2OD$_^V>#U>Z`W5BM<V:PXBZ68T3<+]K#'C,H?;- +M!Z;QHW(P3X?,=<YZHFJSD05]+]>B'_"SQP\Z'Q/PW+0FO)XCHCB;1X;X)OV% +M<.R(JE;!7/2B==G0^%?)'+;0):A]="'RZPP@*MWG_FNXY^-#UU6LMZKL]6.( +MM)6>0]:^9%I-'RH8>2ZU"XO!H8/IAP]GUPZCU=KJSH+.F/R1Z:YO1*L:]X1V +M%FFC\Z;FZ&>/V`?@VG/M7L%C[C>5*#RRH8FHY&7E6MV4WEX*@:H+3H"=&XE) +M*B]IVET#<FT"91QV)%1>)9/.!M_QQ0R1B;>^-@'D:06("]Y``<.7B#.+"'XL +M"NY^2,Q9N0NGFPNH:F;[WBTC8L(A26&;#;ACYV@CU/(_%B.L32JA8^0;I<%R +M?%<^D/CX;ZS7ON$8I-J9Q+F`W,2:7A4`?0'0SEJJF^]:K!QQS5-@$9PEY#9N +M-><!T/-W/Z@.)GTZ?IQ@$C&'EF5ZGA?FS=HY'4L$-6B*Q&&*C5QV%8WC/O=+ +M3QYN;!^R"/%C%&F(R#:.5F?&<ZEZPT1M&H5*$/.V36NBQE>&!%#>8C)[]")B +M68\(B@7IYE&MJCAA[@ITO4.+WZ&FV"#DFE:ZK4384NP1MX_*2=9:KA.$C`>3 +M"/IBW#J%89^QP1AY4;*A[#CTZG29^SUBMWNQC+2L:BOW.Z`9[4KS*\ZD'8P7 +MYM!^]*,36+4DEHL*J(&O"J\'<'#DAT,!V+RY6,N6FL,V1U"I=>G;B;6$8">0 +M/:C`?WXPB0:U81YF:#L>0J\VPSJO?[:;.>6.50SK>K=IS&\K"-/7)A6G$)!M +M//KH\W&2J9^4FA8(?LD,^^D,OTJJCK6(N:;=0LONX6,D>`C9$YV9#=FWZQ;F +MQT_+4]O)TX:!]46"7`?+%@_2RA/5S012$F\R&&[ZP\CGVST]!3,.)SEQLSL\ +MC)X`'0?]B/7:/D&E%?=FD&/,N2'/<>^F?.'"BNB`XG]$SU]\4!(S95"QD6B: +MQL6`GD[((R60*)ZYX4XKY@1PP2W0K$<7K$ZP8`H)``:51)68.UQ')87$!%V, +MPZ[O$^PF7ZYI7#X,$/`-]?SA`@_^OG5$CG?.&^7\X3['=AOBAV[X)W@5\()J +M`ILPG:AVZH)E2-^PT$<F4,6#9@)N<("-F(4%3'!V]>$OX"E:K\X1U>%/\=T& +M_RS(=GS?,&_B^94LWN_,&^+\P3W[@D<$.W=!/>A7;A-$%,Z$]F';I`F."L8$ +MY,*,0G(AVW<)N05>@GJ<TGJ]R&[**#L^/FAOW^:%/9YH;X84H`GBAV[D)[H* +M]L$Z\*80)HP[>Q"<Z0V''<^T2+#-Q3B^1A_32<<,>/;1&"0T9`^`RZELTP1: +MN,]KL395R6M3U6WN=H<4CN>-YE:F,1'IY9:%"#<\^+HY[<3+V%A/5$J$P&,, +M?X_,LK*VT.]8$H'Q/5D+4!V:97V8!T2K89SA"=6XF*W[$4HZ7X$11C-=M1E. +M"WXCFJ[9ET.81;+4YI<L#F9&#E3'#T;UY=E9.!+6W)7'+<&M%$]GN)T<OEO* +M.F=JQ&)O6]D"S)98.>L9HZ=LL4[L&S.F?F&I8PA:NE8GVWYIV#YF'#IQQOVL +M0FM%=VYDGIDC3.#Q*CW%_S#GCE$G*\\O.8!_<>$@7\\J&D(8A7L4&^(E1)I9 +M%X<]:JC49G$GY^MME/3Q9*]X/R13D,2KY'V'4[]A]+CLWDS2!^<'^SG!/.#' +M."_.".<3G$YP7IF&`[@R^6*_8WAQ2'R%\0KU!YQ1"RLUA"DOYMVF1^F+)T6M +MKA"V[O@/+_.V6_D?G_[-B.Y,5WXK[KYPON_G"V]^<'.&E)'YP[F\S3PO%QZO +MI9RB^>R!'V*=68W#;`DZ(SY!G5^,8@U*)CD4OQ5TR?4=]?\]D`?]2:8E8VB? +MRQ%1+'H-):9*WYT<HB-X`=)MDT2VP/CVX'3[A47L$'_1L4VX0!4R9<'0)Z7[ +MG+J'ZH/0J".-1N["&6JIT,J'%P6E7,DN:<(#QF].CA?5&=SI)I<EH`ATY^MD +MLV\\DYQ@CYER%S65M3HO:[N-='PZU4CI>?A,QQ^M;L?>L2@=1%+-`:<=C&;@ +MM("KHKAO8KAG4'Y5HZM5'#G=S3`J<](GT]$*;<O**KM/FG3MQ1<W&K.H=U8N +MA#_$RBV*QPS@+G%;W64!Y%Y2!9?)!IP&[6@=#]0PJB[Q$G5,\8,ST9L__'.C +MA%^"[(*\+G,HF!HZWM7U_J#T^\FK<+ZL.M3FN`Z')7EH,U6*C=P71,HNH7$Z +M<(XA3*!(]F>-P>4GW*M9T=;DQ(U6<L^+VYH&W,_5'`=15BK!]N]KG`^84R%[ +MV-S5[LCLEEQ2W9=1PX/K@BZY$-IC*FE?"2RBV9MHGQ(1V9.3D`S:JKG[0U], +M&0J-OA".T/A7ID?O%L7X]EVN_52%Z]"TVC_J9B2YNQG<)!^&8A@?:!'[8_K) +M24=I!5J0,39U:FW":0_":R`7MIP_%R<F#[8(T@?$70UB.=8HSW'=_L:I2WK% +MU)<S`9^J[DR66:U7O5[K46]GG.J03;GE>UM2";]F2#SW^)"]8'3/Y(,U@=N; +MR0/X(18XT*5@1YIP=O`']+(VB&"/1UE.>0HVE-`UL8#&G9PTZXQCON261M<2 +M86.:K<ZSC3@XF10^RR:[=R;RHX@IO=5J%JF_*1A>EM=>3M\C4GSW,CA_ANU) +MQE>/+/W*4M[(U(Q6]U1QB6-8V;&Q@J%G];;)XTIH](I3]+[?#4*^[9-*UKJ9 +M@[CJQ='8V31V&-+BJ_4&[M],AQX7QC4W7NYI'0PRIS/MSL?8=IM4-.Z.'*8@ +MXFU?S=D;CC/B$?@-VW(7@9$,U%,P[@`>YO7>!&Z-O<F(Z9V*:D>WB+?N*=Z? +M>)]SOMC%N5#XH0;.*N5!V@)Z7F2F9]L=(MCNFA\.]Y%7U+H(DNV>PZ;[@24% +M/$\EAD3!1_G!HL8,CB)DG(Y`"NX6&5=R]9T<4/2\/=?:?%WU'VVCE/EAZ0Y> +M6EI/&-1#+\P'WI/``%M;[M>Y2/DOLW34B"-:>\:0J'J1[CGTUR7I@:$_HL@& +MTZA^IM`K#6\3;R'9D0NB$@=3C"'$^!Z0ON*Q0$3DT)9@S&_RP5-N$`M/"L<A +M;//M5O(5W-$$&QHJ9(^G'VF$LI1>\LQT3#8;3JA;A0V*5YX$5N["QTDMX>_' +M9`C.<*+'26!MBG*A_F"YKQ$GY64-]AD10SLV8?E["XU2M@;9Z?UIZ)Q_=#2> +MCB0/5F@0]1",/:.%&IOH"/;!.&T7/^J9)R6S0H?Q8YMYFI>:3U387:NO)IAQ +MWJ>I-\9W5'ZCD<>WE[^[8@G4?X:[R6$#["+!:T=,:YT+JG,+$(8.2CL-A1%M +MBR\!"MH!@CV-*7BV\D^C`-W?RCD"&]#W@0#*N;E,*,[@]C?%400:.^9;;]1) +M!JW"+_C8*0:]>.L)[)"PSRI@#![!W7$!+3/V\3Z;8(;<CMOWC5>G>J/_(HL. +M%[>*4,FD76'%PV^2S^;&*X`9M>NQ@'"A$2V.-"F-"N,)IB3I-T2J)8$L27_' +M!2&"LN35!M2XHQX*UF%837H@#I]NFX?'+%G-'YIF$.-4N-&3K^"X>%6<5]1U +MUV;;6!JM/;[5Y@]'68U<!7)#P,RF16O2\7@W=QWD_]O&AI4:3D4Z:)Z9):"@ +MC3WROC@[=>0_+[/#<=>ZHXO`IJ'9H8'^,$YPNST5.]Y@Q/.SB%]I32_;3U[\ +M^TF:8..I`,,F)FS<\"/%3HVR/W>`/2GYLYPW5`PU")ORT`G=@V9T.[W2<5]$ +M,3FH%!4NONZKN,XH.5:>@?6Q0FZZZ:<H>X_*U@/]X(/"(Q@;]C$!RBW4/[LI +M@0I:B7\3%AX;C%AN[AS\-T#^[NNP#P'B/EV0BATVN@>/SXH-R>'#E7KP_N^7 +M`!YM"N52&*#PP(2><+PQ8?WW\+Q%7P6*-$-X\*%Z34KDZ<^0'6.@_;@0\,_" +MANLA`Y2RX/[HV_N2IVHF?*Q(>'AXD-W\.>_2#^[=7X*&QE0S/7'0NGR.:Q*N +MY9<<6.DW*?&8UP![KUQ&SJ*]^'_O9'@CN13/X5EJ=?%JNN/U.$%I=\#UC??? +MN[`,/M^RU\O<#Y*K[`C['/LM/R:3>FG#I*,G?!-23T`U$MF2^UQ*L%4[8EU: +M(VM(Q,'GS;QY"V-"G-)QOK=IT1Q.$:8.G1\VS25J)*>P=WE!!7;D);KH%=]@ +M.V5D>].KVH1<PK=L0'93;A0N5P.?G:`>1,8I0_'Y(??%>['M>O#2:"(1>F.U +MBE.V@9Y%*NHT3:Y4-;6J:^13)@4G5MSFHR"N;FQ]VK!=:694OK*`;B975@M' +M7N2=/6(M=AW-:!V/&'#M<C%3Z)=::NES<%IWI4??D-8.I?=KHO$6JG0V:*=$ +MRW#3VD-]A[8"G#%L*:R?A@,&0<KQ0<-<=.)MQ-#C?7\TQI50'259ASH>[NT+ +M#%K`BY@8\,U^C-.05H!;L3$@,@Z6,(&7P&85ZK?,!?0$F$QX]1/3Z22;?.8L +MHL^:8]963K%#R5BG45OC<;C81!ARF89.?/H+>O>1E8D'7[&YJK4`F.[H\:DR +MFS5%)A>#<]T'LPL>A/>*=O*=FXW*AC[2.J]5.'TF7<.5HY-]7H2*8Z?<3U4T +M\I'=X6DX!YX40K`U1\,\Q.M'M.1/"9Z5)P/'[/6/SBW0<5K]*J@$CT@X+WUZ +MGC+WN$%JGA:K"N69>50&HC<`U?>;:4:L1.,/"00$'.F0E]'72E'8W%][4>P! +M5+5*?RC80G^N&1E:A_@YOB'LYU=E6\EAY.K16.=A0[WAA8Q[09J5ARN"N4FA +M7L]3[78"I.RU:/XBI0&D5\RJ#=<??CQ`-&"J@,Z"S3@;AP;*MZ+'`H0K,&&K +M5,7Y4&'HK;H^TF.'IH%6V@9KH*:U@P>S)TV>P2M,!04"8JHO-@$'V(R9&KG6 +MW9X>$#NK@BP##>9Y/%/JDM+QD<A-?%]WEFZ$53OKDP1=5RW)2PO[X3$2T\_* +M28C,,ZR33D0SLX'J5A<O3/HR#V?8J6]T"K\B&.V1CU?27/G#P(=2:44?A(6! +M.9;>R`0KWU416'BG*?)I&8"&AHE*-[[<#DGT1-)52(Y)OY'JO9N2\(1;V+6J +MC+"XP!!A.J3K4F81$7@TS]J?1#_>X,&XC-3-6)J;5_8YW1RR^07>LX(+BZ@% +M+W:)R)L!I0&<:T,V$0`5RF##LI^&@CTV_1?-[A$4ZDK3L!Z+&FISJ+G3=<.6 +M`1@,':VG94?'?E!=OIU'E/@/E;X$M<ML^&<H?2.5#V)M+-\PW5%.XK2Q\>"# +MSHSM.7=":\<W\?S8>BCN+GJ>]!'PI8LE1LI6'\C4GJC_6$*Z/1H<]3@@THD2 +M,2AR,$%E0@)=RR$MH=D8T1@.<.\4+FHM3Z*X->8&!F/0M`7O)EQK*YM["N!K +MOL$MTJ?(ZJ"42NO9FW:2T$C2A=$%05_?PA_^VS=$XI1TS]30O]<(X?6IWO2: +ME,@S(Y8(0OA`4?#/^I:V.<"BB./SF?4VP*8S1Q"LA+1$"/TRW$^4>QZG8)K\ +MK1GQA2Y/#,[FFVJB*(<!/Q`/;5!]/JN%&?&5CI*OGZH[G6<3<"3&\>A.-?YB +MR*NT8J7N[E%N^T>L6F&I02!W??`1KSEA]EO*<Q5K8(["!&V[M)R=<24JPID* +MX=G'2@0M3(4I%!^`88?3J4=<F?B7/]@W^09J0W8AGNP#)!M?Q#IT($#^W:*X +M2?0[P;X!#2;7T^[+RZ>K.-)&W@:]@GI?;P%TM0IP2?>J,$U`74K78.PNVXU& +MX^]N;A\RQ1%5K;*P(>%?!CJ%<P?#9M7A5/*JE8"!MU\ZGN?8&I^)<WT[-*>\ +MIZSLX/8\9O.EO#-66GQ::U>VY0S=BWY7*-/VCC)+##><I;]NL$LYZK8=3S34 +M2?$Y7'$WHG<GYZ?BZ=[ZADCBC83E[>C#9[HCB&D'3)?!`>B"&,8GP/;D>:#Y +MB72!/\$'`K=_YK=%KN%S]@]Z.MBG/GX1E!)`L.F?]I`I\:=4/>9"/9U`/TX$ +M.77A/4@5G-NS2(,2K*I![&I;@KBQ<=(7"(6,`HQ/)A'V0"B)V[QG(W%]Z=A[ +M\"IRD38M^+XB<]J@]1R>A"<):CJ.F)VC*NWVQ0E<N?MUJI59Y`3XD"&[\$;B +M!"HN]U4"2_IT>M!'Z/JN?FGG\`$20;K[[Q,"G-9L$]8]$ONG"-]UD7'%7DU< +MW@>']/,"U0'CW>R#NV`2U#I+AGO`K%DI"8D.R^!65#CK0\/8\L+:</%+9AW9 +MP)S`=,>&98*WLG8D=P[.E`!3&!QBP\/K_J%L4'CS;6JYOP3>`Z/@9QX5^Z`" +MF#"OR0`=>26KR'&]A?C<2]ICS,Z"_EGD+0ZA?)$M$)#)P(.S"/C4M^&3"3!7 +MT(XJM2-!`JE\\@JS6<6)(S`QP0.J7,(=.58`1*I.K`%?`B("B-1#S_Q65DY5 +M=X;?`A[TPG[&[J?T32)ZHKN="$V[?*6CV:UR93-R"@0CA`KW'(G_4!)W$OC6 +MHLAJB?'M=V;M/*"VW"ZIU'O@GD$3J$X1</?^DTJZ"JH_^4"6GUEKLU+&K;'R +M!X?+Y(6_M;%A&[HC43@8\X)\DB;^NZ<T_]<(]E58`UI:\L%V%IC7P!/.#C[@ +M>'Y>0%N!;]T8YK'XX3X(=*@,\((X@5FB>L2.#LR@5W@<>"'AUP7\>W[I,N>Z +M">V#IKPSY`1Y05[(GFDAP[(/]W>[F@8>0%VZW+5Z?]Z"1T5&A?NTMFSC3A/L +M.<</C%S_L(^\$G&?\,M;I!`**MVI?!*"#OF/Z!;Z[:2K[@F^03E`<NL$&,O! +M`\3!!3I!6-@@IS0\,B7PXF\"V!@K>P!;;-R@K3C<BZL@S@DT_PD$6G-+7#P1 +M:<<.SS0K<X(.$#;"Q_)XX6N0>/-M:QPN+/YN;IU>&;L6+Q!.&#<HM;XK7NIM +M.#V\%M5<'BJ["+5JOM*7@4=I0D^)LJOXD.CG*)F;^%5*?PE0W8+RN!/#7UEO +M:$RTY9C<^,&^]<H.W//_4"5&7&N%&]\MW)[;'&XD*FL-,M9?D?/69*H60^U` +MDQ81I@V,LW0JG"@;4Z_5$']%R(AU]H[%@MZXX]!&`?QY'2!+UW=H(IBU"\5, +MY5VYX"M4_/3)61)P(`+J:)"PE_%49?X0>DS`!62@`C+DTD`&)\.FV!1(1!N, +M-UD=<YA#WLH!`?VP+,A'4P($5&]7R_XJ9X'\P!'8^!4T_"/<U31_:5R[[)O# +M6SK>QDG;;B2XN<ZJB]8-5D(I*!+2Y!T%$60/"Y9.J#HT(-4*O!FHW@UN/@R_ +M#]B*$?%#Z$?S\8>.AZ7]H?0"CV`YF=()'I\(?;GXN!.LK'45W3-P9#B_LZ-. +MOPWRG\&]XNE_0?_^.6I?MA[*Y<T03UET3C?F:_49.&.DTL/'PX_=-#R"KP;3 +M.;U:!U!]\4=^X?_U#Y]"RP'9Y\?VU*=Q32@7EK4'[]GUGAE.IX9,__\3XN2M +M[S>LP$_CL!*8YFD\),RMEI6?DYZ8G1\?Z!FAH3:JHS@A^,Y:<GI.8F]0SDQV +MRK,?(6-G/SC-'DC(,Y)3;/3FGI73M=1J)64.(",9_-14;&Q6;S!R,E#I^0'J +M!,0)$X;R,&@+Z,F^P)D$9WS(V:,;T?!E9'`3,R)+@(2A-MH<&SA#;)R!>&]- +M!"("'I9N.BXL9J^I1\D/_TY)LD\)*DQ_1$X3#Z(0J`$U"F;27$-E!,+/2#_Q +MHX3$C/:4U`*CM9MH:?2P8[=5-SFLFS2Q4/6M!7Y*!;F)!A@)MJ)W&:CVJ!J/ +MCAV8PE]>%)\=IIZA,0_&^*8.`P;E``#E``"```$"44])V*\C8`#>=ESGN^4J +M5P(3"X+V``3@Z0CM@P)J2065@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U +M;G)A<C4O;&EB87)C:&EV92]B:6XO8G-D8V%T7W1E<W0*`Q.H!*M;#]\Z`(M' +/428#!00!```````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu new file mode 100644 index 000000000000..fce29824622d --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu @@ -0,0 +1,345 @@ +begin 644 rar5_multiarchive.part02.rar +M4F%R(1H'`0"ZHBK1#0$%"`,!!P$![_:`@`!@&RUZ5P(;"X'V``3@Z0CM@P)= +M-\$R@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV +M92]B:6XO8G-D8V%T7W1E<W0*`Q.H!*M;#]\Z`,C&\^P15*#4'A\D!$R&)9;I +MKEC,XG)9#6#4<`F""CK,4"%#3^0Y3,$9A-F9R;F=:X1@:"5,VN<GA_9-H+7V +MDDT5M-RYI(G27%5Q9H-1AO(8['*$=FG2&-F.<(;E4>1OF.'>GM.B9CIL?*BU +MFTG!2*=&A0DB!=42C[T^A*YB4,-S$G)3)ADR;RN&R)JQWA3=PY%B)F\C!;2E +M)R6YT*?D@JSE!D8$:6:%9I.74*ZA63^**JA'<&J%6[`CJPF41)`IJ<E*C1E; +M8,8@`KQ)C0"R$X')'HA\IL4'M,71-F\J+!$I6S8WD<&Y&1!+*[A)XA0K"BC5 +MHA<9T2K/F/R+,(T\:GO.*9N@UG$4?R3A9SX.S'Z:=6%]%2@NFBC<HC8+DIR* +MGY(Q"1[8!U50(N7JPU-9!\J&$S_F]!$9[-P\6)SR@L*'RL8&>DS0$#L69F\G +MU6Y?.5Q))C+)GGBL-L'!H_1)PJC."=S'S43CPE;P?!X"$QJ!91@JR=M`N/E/ +M$,N<6!AO0,:TE\:`ZN3ZP(E+5!T6CW,^V;9:8GK2^,82F$6#))F,,A`(H1M9 +M/"M>H0CBJOT12$P&(,O@S.7&#XXWEA^5BZ/*<BU#LJ>6GU`-#A;<D.$4;TPV +MT%++;;M&P6HX-)F*HOJF4PR8"^P<6M-*Y38^6U;E-&\LZ5#G:1Q1V4T&_-RN +ML/4HI8%9YPX7)34JG,6D;<)>=@!_)Q],)1,-X6:>]J)5HS-Y6FHFV['TYIO` +MC<0QSG3(X"_0F&A*%5)MP7E)B6-Y1UM"^"=D(R!G\I5'""&^9N<&@G9*3$AR +M0^4US-'E9R)'D9$03`X%(3+DF9O'&;"B;!6'"B2!!-5A126@PK6;GI*>A1]% +M)1V2<O,"+X4WD[N+")F?3E#Y;[P<FE!:MGD<BSP(_Y2_?9X3"*&42VI(@S^7 +MB;/#K)@?+M],/[%G^X$'%QM/-6S2HW7LJ>P0J.DXGON"HD5C)!").9)<C2=A +M`^4_L@-^(SP2&)G^:%0JS36?/"EGFB+S+`BSYNT73R4_*I:M)N/IMWD<)@1J +M\::R5,43T4])31W<3Q$E#]/N"'?<(SOJ0_4_'=P1\31,FM/B."CVHESQ`7%1 +MEKUCG32+M(':4ZD51'5*%?54X9!U>XD8K&+N138DHP\69SHU0(+8I$G@1X\[ +M?8^>'"-7T?HD81*2<>7$T'"+-P:/)'=H-@V1KG<2TM./E.<SP@E+":$UM74# +MY6=-Y:J4-<1OV95TDSKL2I)UUF.)Q73S4DXE3C>=H=<I(,C2+'IGW"L*KBM& +M.PV.GM9A,&*`BMDZ,N%'<PE#@T3YIZA#2)4X9X4H:G'RLW*ZSS,'@(%F;RJ] +M-;`/0FQ/YL2<EE9I.]X57@Y[NE.V&Y8`/`3*F&?G)9/`('L%J8#=62G*;UB/ +M1YQ5"^4HSNM&BCC?WMQM$59P.#]PH_^#:M3CYH2;@A*>6P;<+2F)MPK6GE=0 +M;=2%QU+0P\7%9:0CH[+1&5S@_8"=TD)I8&U)S#`(-240AE9_,LAX3\O"%GE? +MS:GEHHIY?IN7EJHY^6'[CS)/MKS"U3\Q`7'F&+:GE^(L\QDK1Y@4+?,A5S\N +MJ&_EN>X\R!U?F'1$)3FJ9P&?@7@VT;\2'BHMX6Y4_/M9J:DIX<9OESXZ,V"" +M/=9#5WB#.P83%8F?4E(=7B,]GLYGAW45W'RC9G1Q_\ZS'S"2-?*IU\P<S.:A +M+6&D/%NBZT3RJP'4<N5&(:E7`5/33/"3QLE">2?`L1T_):@]\FSTDX?,,3^E +M9Y`S"\DWV08_!&,M*RTD)9'(,SZEP4-B)F<`%,#L7SAK26L&FE<&-W_*R<Q+ +M#8G&99S;6:TXM3-8]/O($&>M%)!A?S\NH2A(&<3/../C3\)*)Y4H^:-1>C"O +MNM4S1^#/8_1FC1L@FRR&$U0-FI65G5$3,-&L.IHPGEFDT^QRNE01I]J;S5PE +MFJBEF*XT0X<U!5$(R$[)"FN2''A&V'2R5H15EJT4O$-.FIYPVTF>=0(R6J-; +MV&$FSRF?RV5A]`#3=!,#B!9HV0/H)*>F#DI!KU8_<ZUF!/2GDED:;%'L@-6Y +MC\X/YJQD>8CQLA8M@&VNM^5:ST\<V-\/K!JB^U39J-02"<BK<4$GTV%CG0Q* +MS,3=*G;T8O&$Z`&&Z1T\Y/F3:'H#3QU!3#\<:GP";^#C`:N65->%=HV#T9H< +M>`1@WS<XLB$'WF\R585K/SV%G-/J5$V5EE0KHS[]HB,.,R/E9<56')\#7>9" +MM8=:%&&&6K'/"@5'"J)FXHL!G+RCXHN-S*=9TXK,S=J"EGG.-6CBXC@TD5X) +M:",C<M%9X^P?L0I^'F!6":G5`.0RT1E([,)2&A$D93.9^*T'92$7$#+BV]*( +MCGQ_,O%#-Y]%F=-(,(.6D%`-6U,@ILPGJ&IG4AM3BQ\R+SFHFQR=4HW4W`B& +M8$8+79"*30_^4T&`B8/`1A$R>HGN@-87<9!HZWGPG0[IFT3>H4ND[-A(,)B) +M1P+N*CD\>.T<B0WJ(BI9#DIW2S8+40^2GY?!C9P%\V9'*.#HCQ\=E-F='5"^ +M>65L*@=%[:-EI#N&>3?#3,:FEO1%"(W)S$^:@'3`5>*T<!Z1M+^BLV>\:%@D +M^C.*:"<%%)D[Z!YJ?-8AQS-O\P&,/HL>@<*:;+^+*%OIAPTTFAWO'6?8W&"Z +MS^JF)TQGE9V<GFBA/*YKEXZ3N5F%G`8"44B(3XW4H_,LFT<^>Y6BB+E>438U +M.CYGP#G`9N<<#XTL'!I2GN65ET;9^S]JS>T`W!*D*U0'+(LU)__S?B0?O7AS +M=`RZ@E8[<5/JF>@-I)#C3%\G?$C8H&`5>=">#9]@#0*?EY)U?,3C$%/$N1^2 +M$(.8B/\>+8.&/9F\]J5''8,<#(XT#5Q=O&1>`-2F)Y]&#[!G"88?D";$TJ(L +MJ+[D,%\'&8L59'=SCGN+XN9UJ+.*P9L]N,31!ZC7(R2HE1!J1FOT2C9F^60T +M']ZS]3%W"T9N54G!3-\BC9_@003H?*-ILX%.IU%K@8/(X.<TZ.*(:#:*FEB7 +MFQ7W5TP;?D,6FWBVDP%UBES:U#_V[7Z$/A9M9_)M8<>V7_,8M2EL)BVDX$V^ +M*O!_(RC_\.W.@;,B5NK@CY"&M:(\]MX"^VX&WW!LU(0F#-@YC0B8&U5P6)_: +M,K:FJ*V9T?_I*^C+PGAHIISU9;;86_]XNN&<2<.3$*F%)_&_`D1R;-H8G!O% +MM4VC@WA):F2UE?6"O_QJRH3^)4.GGIU;_O6ZN.:OFS[W5;4'\5'S%KK)(3@S +MQ:\&]&F#=7M@6JJ_6-T07\I<6TJQ@5R57^+=3ID[K&ZH_BJ>7-M*@<&<E1_A +MW8Z;R]J0M>JP3'*S/_#@?M[.O\9EZD0#K&SWU2$DL:=;3$;667_R(.Z$:ZR7 +M^UUD<UGH?^WM3T.NZR22A+Q_=8.\L=8X/`OY2]+:5$P.Y*E^]PAY\?&;5BQ4 +M,_ZXX40WW3E85'GOXMD=!&'`@*&1/A\>H%2Q*YM"N,CLN?)63C-,UP:2P\*T +M24/\2<BI\&,<<0P5<(Y$@"K<K-FX.!BB9>8GAT%0?1J(S.I>U!U/3SV>!1I? +M^!/P+%.6.ON2$L<?D"0$[@V=]3H#\FI"J(LS5,P;IHCX:DZR6MP)J$94J4^; +M1_C:":8DFX:`AH"4NM8<DXRYYD1R%O/%?PJOSZ\Y:V-Z39&;XNO#ICZAT/Z\ +M1WG-65EQS2]?G!V[X!K&@W1`F<Z#/0YYBCSY6P8'F$BR1F@!ID!_C@;MP'K0 +MF%RD&3VB2A.B30:(P^P!NZ*8,G/[(H4B=&4*>B3MR;/2%"D%IBA3WY$H4]N2 +M*.P-\.G`*>/)E"GIRI0IK]04*2,N4*9K4E"D5JBA3:S11W!OR*8,FIFRA2]S +MI0IM)XH4\"A!JD#XM:#58&*[,&L`/((_,0:\Z\D(![&Q!HT"Y[(&G0-$2H)X +MI*DGTDJR?WHBA3![,HR!IPI"$TFT*%(ZC*%'BD*%*+M"A2^;8H4]4E@21I2A +ML^)3%&QYI(TD=VY0I2DJ">1MRA2_=R4*;/NBA3H]V4>09IN0"EW_D4*29)TF +M^)4$_`E23,]^4*=V2P)S2/ST#8#P"A2;)&D](DZ1+=%"D42I)_3P2A30>$4* +M;HC\]@VC\,H4I"1I.^W90I!>*4*>L2I)<-Z4/3^04*7'R2CX#1C8A";;RBA2 +M(J2A34^:#=N!A^`#;X#3\@&Y@#QR@;I`?Z)<GT&X_KDQ('B>P#:`#8^R#-`+ +M][0-W@#'VP;T`//)S"=][A0IV?NE'X&D*L`I@.64*59&A/0]XH4W/OE"G4)S +M"/'PE"F[)<K@#>T!B29#X@;7@19.\),DWQ.W)QR)^A%:[79X?M"_+KP].[&H +M7)S]Y`Y0VIS>>P^6=WX%?T>>I\;F&S2+JV'Q^R[X_YE]>=8QHDLG=\?!8B_W +MU/VA/CP-G%MF_*S4.(1VB_*O;LO^XQA3I]>!HHP&NJ\*NEQ7G`"K=`9P8#^# +M6#^H0/%?A`:2S/"6E_^03S0/C*>R%^0$],#:C!WZ1;_:$WD6#Z(81]];6TJH +M_Y`IHR8H+:L*1X$Z2P7+%?KUP;UY2&&&_DFUM:%-TV-,3/+1^,">$!4#$7E+ +M.\@$\UL<RS)L+S`3TP+['6VQ^\C4O[;8\A94_XP3D"FAT0<(\#G#%O_1M?\` +MG7MCTQC#LEJONH3NFQ_./!O=+?V`GA%,[I0:Y+3^^A/-`B)`&]9:7^($],"N +M&/OSRWYP3>1NC]\-P?7K1_Z0G(&I]8-P_U&U_S"8\".E`;'K4?Q03KRD[+`T +M^%YL)W0'K6?'A`70;H_?V=ZD)YH'E#=3R:T_Z8'9@=,GV#=?W9V+6)HW1T>G +M9P8V8VX_\#==Y!M?%A(]_N[+5E:06T^C"30(\E/VXH=$V.Y#CNP.>3RRW\AM +M-4V)Z@!LTM'\N$UH'@E,J%MBXLQCZ+Z55GQ9V97EXPP#YK`;]0O^(3(@=`I; +M1?H@+E0APW8&+*=$M_]!-4`Z:VV[,=:4^9L6RY&/HVY/#@<Z"SOJPEF!RAP1 +M?B%ON@F&`BMC;<8.1*<DGB!?=!-$!$C@P]VM+_@!.[.?QP;?FMK[X)J@.R'! +MU^,6_AA-:!\QJ?$A:<55_CA<_]MAFL=?O`2S*APG>N+=J$PP&:'"EZ9:G_9! +M,BV*7M0;5!>6":(#F#A>]LZEM1NH;W8&0IP;>+5?\0)JBG&)%!?+!-:!7AQ' +M^<UW+;EX,P,B2."\:$PP$];H_(@>`7C1`<<..[`^L.-4!=.X#A6@9,.(^DUD +MN7BS`[DELUOPQ3W:@&_K9WWH3(@1XXR.);7RH31`;4G$"_IA.[`OHXUO!%M+ +M.'OZHIA"7%:C[V$UH%['')]W9WVX2D..S[K<`W\K._>!+,U.\]Z#9M8\_%!, +M,4QMF=HM/^S"9%L>&..[[-:7Z`)H@/T;&/"U`JA_E+GNB-KXH)J@(0<@'PUJ +M/\`'?P*TGM^(#8`+*%OI@?#_,&Y3L%O6/=^&Q<]Y')'['R$9`=9>/WY\32!0 +MCY8P/VGI`V]6I'XH3*-A\],&^98P.L"=J:G]D./C`;;@APXX$1Z@<.>`OX0- +MXX7W82ZCE-^U*?Y"]:$W\"+X8-Y07W@3E@/B);.%'E"G@<0.&U`D/5#AXP%^ +MJ@;D!?BA/'`]<EM(_SP-!Q0X.HY?=_XQ>%_;'-)+!>2"<L!??6!GI99C=PF4 +M*/G]@;O2W[D)VI3:DO06T2'8LL4\8E025!9<&[A?$/C_MW0?QG3NI(#MV$2^ +M0G:.Q,91N^8?(:;':)#A!_\!E!IRL_D?B,3Y<_HF(_`(J].YSS[J+[]24N89 +MO(!P]5Z@GFS`F);%4&?_N]\G859ZV+KDK8VT`:4]5NX0L)^JV>]X18NR2SUN +M/O`:8EU=R)^MR]Y<Z?\.I93A7=`A2_3J;JVAV;:X"DAX;:Z:A`>2Z3]56W._ +M+=`VCU3?7EU0J$]3`)N[;5U)C,"Y3^VOKDF]2ZEADYG_];*RG%BQ=13??U!^ +MR+IN@]@76^9A'YAJ`2__:?$_?E<O3%)N/Y=3;H22Q*`G:$[TF\)Z).03X2?2 +M3\2.V&"+H&NP)BB9<FA)+$H"=H3O2;PGHDY!/A)])/Q([8=0_EUV!,43+DT) +M)8E`3M"=Z3>$]$G()\)/I)^)';$%T778$Q1,N30DEB4!.T)WI-X3T2<@GPD^ +MDGXD=L271==@3%$RY-"26)0*O5KQQZ^_I^OMZ2WU]G3]?5TEOKZ?'N<_7AK4 +MAE/U\?UI<I^O@_:ERGZ]W]\7*?KVO_,N4_7K_SRY](-<4,I^O1_++E/UYWK2 +MY3]>7[`N8'T5GKQN7?,#5R#*?KPO?BY3]=_\27*?KO/DBY\8-109S&5RN.9P +M&8S<=`L\9!X>#A$L&WAN(B5:V%4+#HE:_Q,/NB\-]KC`CG3P<O<QH;4<PWJX +MO*@R8;<O;9@OAY.5#=>'S^?,!M1W@OI<8L-J/(%],O&AM1ZCQR\YK0!M1\#_ +M)>?G:(-N7MT0D7O^./#:C^'/+S>Y(-J6""^D/*AM2Q`7T:S`;4L<<@O/RIH- +MN7M^`D7O][5AM2S1U1#W:@#:EH"S],=K@WNN`$3R\.7)V(;4M8=[9\^CM`VI +M;(O1?&XF.Z,&VQ7>*`].Z/?*BU;9"^_C9U?U_7L=.1TUYYEF\2=FG2\OIMR^ +M/LP<D.EX7%+Z[]F1^$NL$!P_IL3&[+G;L6P[FP>C$:$?:#%V8N],5,6'SI[/ +MC0#L<V5+W>3(ZN]0F.1J)Q@/K=Z87[0C*'*+HM@<V3J/70*ZIM,7;KO#!#Q$ +M(`;J>6O[F)>/!1O8`X@5LL\;,'QATY=.YX&R>#I,NC+IWZX^_4[)Y:O0&<=D +MP[0/0]9_CO/81HGJ8E*$&C5*6/>_H40&^)PGIXVUZH)T0+LCL:*TBD^/B</+ +M2)!#R9G:Z@?DP"7,RHY.']P@#[_HZ'8!=V:JI+\DFZO/'+12W9,:B4U+P$&G +MO0SS'@L"HCFB>4"<`W2MZ,BL"^!IZ:#N00:,@/H8LSBOT!2YO80YQKKPO*(J +MK7D7D7HK57HJR7D=$5XNIG`F&F,4E\#=,>>7KW@#!79",H<'8#YA3K^XNV4L +MU?7H"HNR`KP`7<EC7,`.Z3`\:[`=Y=P>6=`-Q>$3\T^`=Z@M,/I,])WUX[-L +MYR_N;LA"OM9`=^VA\.'^%=P<>365^[O?9H>7=CH+OKTBA_,X+YMY![B>?]5, +M=NQR3QKX1W8YE<=@!S$ZGEL,>9(W2('RDI*TX^-B.N'L`KD]`3/7#X][,'XT +M^ZN]Q_0$\@,*RZH4?8F7=VO'7'L<43NP9&XHRROQIQW=[F>6+\YP?^QI3R>0 +M*U,-8ZG05T\(TT]58LJ?F(_/S.+;,Q78O#T<QCN#RP<Q>;@/I6<Q$'B'<!DR +M8WQ>&F3R2\`,GJYXP'7HL^+T6K7@ZNY->H>;V)%\\QMJ'B#8OSH3M#*B\0CW +MM"O>A;L\0KWO#J,RXIBD\9%]XB1SGXQ]S)/AF./[+2G$X9[VX%Y9#RUP\0[W +MWY1F(,P`RK(S5+^RPSZ4B$%J`986S69>S-1A&7UKRF;N`^RSV,9+RJ-?F9MR +M&*ST!I+F9A$2RBWDI'MGT3)J<@:4KR[(>H]GC4W4Z@T(R#KJS=%%@&[?9&/# +MSA'S+&GGOCF_'F#1+82(N8O5WN1K!#"N,=7N`O$:86?/<,6NR-(>)@WY,-R1 +M9L^_[,@#^-)O#33]P3$$91^$I/W-=V\MU?N6Z@C8T%B_<AZ+M^$T=Z8<K'W# +M,<(8TLMX8Q/N(=S,8'<\-W`Q3(Z)L66">2F+!WYEL78#&`[^RT+$#&@[-EMW +ML#'`\`RFUX&/!X1E^;Z!D`<1EB>AR(/#,O-.0(8'B678L`(<'C65*Z@90'T3 +M+2N@&6NF7,`2+*^')N7N0\QO2[+RCB<2A-9UD/+.+[%(W&C+P7H#,O)JSJ%E +MM3T,9<39%6B901U"S8A%F;1EK5Q,XQSQB/1LNS.)YU]TYMS;,O$!=D]_"4J& +M7>%6DNLU9FY$Z&8A'W:ALS=LO/.I^E0AV]92#(#3,C-?J65=9J0>.T`X#+3- +ME(H1NJ96!5IV.Q,)\=)AWYB<_.]V-6'</:=&Q@GRX]X-0#NQAV!_T]`>Q$=% +MTZ^!G<:;<N/<O1Y4N3>O))\!`7MPWUP&=-,.IYEA]IORX8E_RQBD]WJYFETK +MYYJ#(9P-[V@MTN';(F7OZ#"=PIDY>K,'7&[O1T\>.\*?2P.5W7Y3T?&?`+Q= +MSS3W.G!^O!WOBGG[V#W(??0YA$KG\]`ZOKL<WX$W[<[H[NIGHNOPJ[M3;UU@ +M!8LDNNOH&TC5?=>8;23'6ZX(VB9L;KI#`"3]=="?=9W7&&NC(:ZXTX%1/^P, +M:A+@\T'KW^^FH75_NIID=YX,Y[WSLFP@9;V/MQ)UWAOAS8]SCNV-VFE>/=2G +MB7#LP6J.![P(U8+RPC(@O,![M_=>`_KD4%V]LQQN5[7OOYH5<YRNWNGFKX$/ +M;4W%R[^BW7]!DCN>'3*'>@7/%IRX$I<\>5V'PF.ET@+Q$G<!S9OVX_$8G78V +M%(NNU77(U8UV[`PW=?/4W()@!Z(0]'PL3_U['S###(J?V;P/-N-FS9/]\?3@ +MK%D5/]].\<_)7=W0'/1UB8W;$L?G.-^\9$KMBF2(!^1.JN+1N"!B&^B!>#@I +MW:OS=PUDP!]/X+R\&6:](&>OZ`M.8W=_=QYO5O?S#5?=[N@ZWN/,AUWO![%0 +MKG#F6&[]?=#B[%C>,8O'D3]E!&#;QCGSZ$(#9&`;QCWS;E=B_7C)K^Y.!S;L +M!#O":2WM^*91X*[+Z3'B\96X'.[$XAF%_&<%2*"V9""QF@VSO&<7O;(F="V> +M#7*7@9]!N8LKN\`:#KOL/=%YHRMWB.1N/YSW).F&.2K\=+)-[0N3+B'`Y1&X +M)N9MFTSMGP+V/+ZMXE7<YZO?WG*>H?#7!IT0[)?M2<PY%TCT$>4Z`:5^C4(& +M[/@$N\'-;\<[3*_>DP!JK9M][-"@OIUEG$TT.!M%_QD_HZ@4"A4'E/6\:Q16 +M.T!4/7&M3O0I/.WC$,,J\`-6)(5V1+TAS!D';(&KB=SHAEG8U8%\D)YH#1;L +M:JB][8S1M"[&J#O>N.O4PFM_.9`3KMM06S/+UKL=-$D'W/O";K-X'!:7B_LO +M">"2AUE[!-YAJ9AD`R*[+`GH8('8GOZ+Q"$>A5XZ6]FR.M3\DP'F;F\:]@<N +ML(DP->8E^,^&S8WJ]L*PZH;X"]7VX>2>7"+@!/1JBQ"/K>$WV+TB2=ESNQ.B +MP_IQEZQ!IG<WJ\,<>+E#*6,L]Z[!AZ)QIEH'4"#?O[+D(X9*;UA@?;,H(7MK +MUB7HUJ6H1%?S3RHN\,*JG)-VYQB%>>O77<]!=AY'<O-[3W+[GS"J[P'MDZ;W +M2HR6M]'E7M=X1IG=AN:!>(!P`U?O]NP'ZG@WC.R*/;H2_5C`I^P:E`WZSJ!9 +M!J7)?\2R`'XI/3(;-!77,B[G29-X`>0VT)PWD![#="2^KP'Y$-`K40;'H2!= +M<VX;MB?$<MW1<>ZI*U0&CPF37VN`*K)]$'T!S9B!-U&]%6[#7834_J`;$AO= +MW\-1SXD>>NX1O0VQ*LVW#:DC^=&LX&^`76!OEF,5VI7/N'&SK`-#->U2,>@. +MZ]`ID($&>'<P#E7M1+GW`@WI.@$TN=3C16JE"E`Y<7R5TV*BJ(`G6A?^V.3> +M`QL])^Z4SQKAKYW+VFZ9<!'3YISOGJY;9!43]TM8+A'6SSGM<="\5X*2/D(^ +M*9B4T*G!8YX0!'M+.G<]OI<%_=]1,77\W8%1:6_G%UWH/?7:8[`_&^!,>OY\ +MY[OWMV.11!ZC3=A,-F#/M&%`4`9$1$,C5G!(:+TU=U>K-:T"0EB2Q8DLQ+-* +MU@D"U`M`(1KQ&G$EFI!BS,,U(0"2!"&AM@TC0V-FA8F#?4,$A#!@,2#HVQMH +M8-L.Z`&#?6/HD"T@(6@$:4N7$WGD3-55W=9F(TOO[A^;]YSWWX>\]^6:+J=$ +M3$Q$3$Q.BJJ\RZF?\E'\$\CR/(\B9B:K+PO.'.7R_F<KA\_%AO6!/V_1SO2I +M?0R7<@2WPUJQ`3)*W(:2"4X(EWI#Q26+B[`"&NK[9`\:&_TJL;D`%RD1^/#7 +MRUQ.^(.SH>_/#B&AV,/'B^LDO/($B0M6"4'LW@YVC0#Y9`=8>G`3)+;"951^ +M`)>@0HB/DPWQJFW$4T86PQ['Z&ITX9"\)*<0$0EZA"H<E-])>N0X;HIGB6Y( +M?`=(OZ0-*%THR:;#N33K[D1R_5X4:,1]M7A2![!PA:@S(G!VBBYZF(_8$^HZ +M0`TU^(EDRK\91.V6@`+K(DS\,!5!#@9K\<L]<Z>_3B+J2=X'1L->OX2C2FM# +M?DE/EH;F+7,91SMGK*CW6!E]15"0"],)?T\Y+FM+RD-_U[E.0/3G=/%/YHEG +M9SGS0WRJD61A2SF:?E,H2K%),0+R2R1I\#V<)9C#Y0\E2_&"/WW<L$'A]^:6 +M>Z$!]YF`<4=]2!86&YS/;$L&Y:*[TBB?[1ZJ.F$E@F?TK=SQ.W*C6JGR0!*U +MQ0ZY):^3"34F^WK"7DO"=?+$*+1)`(C%22FGU*2PN/4AC44TY+G15Y<)A3;U +MQ`=B:?O,0-T^(VY#\B3+_7"8J0=K&'B)*O]B'VY"J-)G[4/N:8';L4B37`F. +M9^Y&7(E?DRQ1IH*HZ98,CHI_]SU3^;)4J3FU\*4Y$JI-:DM/,@N;PT+7$7VR +M.6?JCIU+R,*P6?*3=GN422NR@I0YW'9$NICRG,RY1GX"@*^,*3::=LAE&WYX +M,3DTKW>@'^BKJ]`\B#`[-*Y&VTP(OY35([5`FNQ)=?(&RD8WV45'8!%6RE6/ +MNP7R8T)?MC&5P/O05_"57&#\=O2'`0R7H"0YPT=]O!2M5&'J6RK#G^$N3=@A +M,XDMZ5`_;JR6<:ISTDPAB.G$8Z`L]"3]`JZ$F)S/VSV->2O@L5Q`5,YS"28L +M(+Y5,WEVV)Y7[+$[9]TQQG3&ML08C_,!<7`I!_LLCG*@J:`J^^U0![*#RZZH +MZ\,+[3_A05/YV7566HJVIKD'$JK39B<^)R49>#`KHU50KB,&,@9]Q/=$=.4I +M!2P7[C5$NT=$_Q3*(A+J`IE+QX#IVNGHJK1V:8'")(-`]"+BIQ1+2UP._4"; +M/RM.E1B7)"`M_)BZ`(<F(P^^J2:NX@W\S!2P_0.&!).?K-OG-,%4('4&`F5E +MX)(&^BSMB,2U!5:W:W>A^%MTG,FFW:S)._@U=2D]/B@)7([#KI'YCK(B=&,T +M8,,`4TA:ORBA-.?R0$:I++Y8!5V_E*(#B0"KM?*(4FR-3C>":>D9F6?:HMYQ +M!LTQEZTJD]@E\Y#*,82M]3%\J/(?%*)]S$4!7I5+^83../)"OL"0IZU`Y&`O +MD'RAC.<<;(O)P(G9,TGCJK%SZS]4PTI5F"OCKP3`$PJ#6*7[#_"LB.?[M9$\ +MA@'JE8;TNB<PPWX$QY%,!WR`:4>_ZU"V)7V47OB=*2[XGG5*IA_C$$UI53GW +M[]=2XN?G$3L7[*VJ![J1AGV#7Y?K(O2-4H^ZB)PIZ=^R@N=JA8_V+]A'5*:2 +M`]@(J<_T2&!_#)<X)@W1'F23PJS,<U,G>41O3K,\VQ(W[OMV;MNHNQ#7LEW) +M4!C$-4[*(6TU!<=H5Y8GK"WC!%=J5]\=+F))6*.=P5XLGJRWC!%?;*\"F'G$ +M+#%SC;T3G8NH+>,$5UQ75D9HEZ^G+CL"N\D](6Z`BNJ*_O$7I+[Q<^L5KD[` +MMT!%697ETAWP+HG.%SB+V3^%<JK"WC!%5I7XQLNMXA?#IHO.E?W"BBI]'4)` +MKXQ5V8F'VUXD7/EN(;CB50B_9(_S);,JD"S_L5_]$Z4MXP171%>E.K'^]"J[ +MF,<3QQ/^,7.EO<!%<X5_M(^42OQ<ZHK\LGF"W0$5RQ6NFYS(6DZN+^,K],BJ +M5?A0\M%5-`AKT2R49TG!.SPR8&^^TC$!JVK@1H+X44"RHZ;16GG_L/8TTA+9 +MIL`LJNPQ5RQV8>67*38Y=.E[")9B=LB&77?LWR_N$BCE&G]*XH\>;1/CP7&J +MMF"!Z9IF=M#(FBZ?ITQL[\*FPM%9627U(IIAG4S3?Y"=T1-DPTL\(V$_]'Q3 +MA+5'&1OK-W'`%@8RS$_@'BG^'9->?Q#Y$\DR@=+4WVWQ5GR(>HJH)7`171$) +MPU"=.P0.QLHNE:N*V^18`IU&X?T2&[AHG*(<^_3`:A]+,T$S]D_1-]8D.244 +M7=%OW1:#_,&#?QJI9SDD*:CEEJC;77E";>#X-`\?CR8`K\P0/;Z9@LQ`85B_ +MT("4;7IHH]7IJ+06:7\WU*@#4$)9^4X9B`X?5T6C1.-);[JY^O>%.2(@EW"3 +M%XY@TQAV57V[,/BN<'L$BYS(G!)/H`8,0/1%-&VX]K/,)[1&_<PF#7SQ5BFJ +MH5]OR&`+CV&33!K!_A&$=S_/H5'%%QEQITW^^]1/YK`EWI7J(XS`%.(W#^@0 +M^(=)OP/99FX0S<2XF=10F/QTLMD)MX10T#@E8`L&T(XTA_0H7.1?ZD\P20$5 +MDIS/&H'_9ZUB'9[\!UDNW8G.HKHMNU4X_)?R8`L!&W#^?0TW(7[Z-*:%&F^, +M1^=G^2?E.#97F[^&B<=@'LA5H\=HDZC$]`?-[H_B4BG![&YN?VO8+-T:!:SQ +MW@3K4+]6CBZ]I%,2;)@"FY*@T/YY#ZU9$Y!#46L89EJG'$W!Z<E@V9C[LKL8 +MH`L"C</\.AI0S8QZ<5'R'^"C.AR)'+DNNZ9DQVD^WS`$P!7IBJ_U3$R"`P*J +MD'7(":P/*/2KA]2Q,T880EONI5?YN9>ODC",-GU::J?-/2JWZJ<J39><V]3> +M?(P[?JCK!\X]*NUZI6!OP^`*@:[B>S#E$3C!<Q.EBVI7X<4`3##OQXH@$5XD +M5`Y!"V"`F@1`S#`#LU5_)UZ5I)?"$_/TP(;\J1EQ%D3GJPE^8KY#`DP!(R(! +M&4!&4!&'$5R6WDFG'^R%35<7XFE*]NBP!8!&!`3Z,(&11=Z71/+*:4V^FG*D +M[5#V%FLAI20^W6*O,TV)[]F>IZ*HM_=6E"9Q/VDY><P5-E51=Z5]-@B8`L$C +M`@,0C'Z5I8K_`Y1-_DD8>BM%_V6+6Q(^02HF2&RI7_K%`%AI*JX'^)0U$)&& +M7C4!GZ)'\I+<5,7-E='.$P!2=;`/T7<3X:R'16:7LWU+#,B9(A_A268%]5-J +M;VS$XMO"U8@>L5]LWIV[:+VQ:\]"5`9ME)DXE8[[T='QI-[<GMM-B<6R=E%( +MT[=X6^1-IAV*%_I4-TWT.#)@"Q"-P_QJ-^R:0V@/94HU1+HJ@N-?'&8`IU&X +M?T2-^ON-^O+,8(TZ(V8^F0KW<S%X17IFRFNFBZ8M?YG53M4+^%.7%7.D[4LV +ML6V+>V+-L6E#YR8"$A3>@B[)JZ[4^$)PD/8%48(KO8L-FL%V^F3.D,D,\FTS +M$ZPXIW9:?ST-4!B<TEAW;H'3P2G(L&*XG![4\N91:%A4J:^/IIS/.;B9@EY: +M5=I4GXBJ\>-+3$Z=7\6>_(RL,GD<6A6@$AFC`OTZ9DXCQ$['/DK)I-O[8Y]@ +M"PD;</Z-#S1U#>*\0Y_.QE.-74;WS0UOV)CY`N9_"DP!8)&X?XA&_`+*`BZ$ +M=4T.?UH7K=)%IFK'?S$6`*]QEL.KBB`9Y0F@*F7]A)`[>+G24Y%UAVT]&@?T +M>,)C\M!I(LQ(M6/^GA5M>K(=XF=?]&"8UW1Q<@5\IAB8`L=)7<\/\HAI5:V# +MQ%_L@1IPBL\ZR2KB;^1XQABJP\^([]XS=O8P[`Z8J0EU_/Q;V])U\]%`%BV+ +MEBPN\(#DT+@E6)90UN8P\IV4J(1`]?3,$+BR>85R:S&/&,\1UFGG/MIF3&O& +ML4;$?*?WM@`[?3I+</L(2MR'2D9XEL!+OY'3#CD!7+;-FG-N\>Q-R>465J3F +M$!#5BK<E.TX>\@\?*JN_8$=NG)1R+-#.K$!C'Q3?27V].XGNR2:7!=I11@N= +M)4[3`>BGV<[Z`%/-8A&XD0&.0O$0$H&0,U&0+>BJJY+_HB0-:<3>#/?=LT6S +MCP[_A\#N(PN5.9Q\I_-$J49T`YX;MG/+3SZSX7;%+?+3MDEZ_)!L=W*1U_%@ +MP*[FV]U\_BBP!8.2Q>0?XE#47T89=G`%T5DE]S#$=DE&9&'2(6S*O1*TE9_L +M6_^Y,8MX^<C.?)8)[X^:;L!\!AT,`4FQK#_%HJBJDO>5:L*_UFCOOV!CJRYL +MBL`4FQ9#^CN-0]RJ+'M:LYU*%R^=B\BTH'D<03`%@457DA`42*KPB6CC'*1J +M0:2+S9*WKYS4I$>J=L\G;C#L"/7E=M.U1B+[#MGD]E>'](19Y/6@)F+5NV;C +MG&BD(P"7GUX,G*':CZ-"YCF(O$1?>(L`4ZA;9BOL(#%(7F::,*-+_E)+EM5> +M[*Q,I\X&<YE"J.7B[QI7+'4!/,M(OM269*[6-.9:1=:J8E9N008F=N6*[4U] +M^7=L81S;!\*0\XRBKR[49E0=<C$$M1RT7;HN9H66>.(C)JH/B&#Y1%%36J(H +M'<LB[6H2_9,39H`Y()0NX3+)T/JBX-\9KRT6AC"B=IPTIU-M#41C>V)L7G^I +M?N$O\$KD-4K.IFND98`UALN<2[9RZ0VBN*:>C&"Z5)MOB7DYJ+^II.'"18`L +M`C</Y]&ZY:U*)1H``*F/T/8%%Q**MU'Y`)"Y4*/N`2CFZ'^#1M")@STCN&T^ +MS\Y^$[6*(T<%8XH\2G##.G/?,<HSF6JONN%]/HK!,9-,FU16-35)?L7`?))) +M@/:)(K2V=4/(PY!B`V:;&+V'3*3)WI4O63&K)VRJ3'>W=/E4:=#B9YA+K#`5 +MP="_Q.EV69SB>^X:['[G2:"O5Y4E_&/?PZ,F`+!HW#^A15$:&_.=3*0M$)H( +M\YHS<[1&BKSVHW,)H%\^.=:DS_O=08HZ8[OHHOHY@_1S^$$KZ*O"BB_:4<UI +MB<"1,8S8N45LE[A&)@SN)P[)B=C(GCW[J59Y^D@>T:3_MH7IY=OC5N9I"?VV +MBE8N9@?T"*4>/8NI9FD!!#[`,FG&GLF(U2S*G^`0V#S^X5S^V@QIO#`]7G:T +MHUKIBQRK`^I",`D#`HSZ;FSKJ'0,8*3OFE6Z3$J0WG6IL.?+!+ZBCSW^ATJ6 +M8UC-"-.Q/@@,J2V&G//$>:=,KLXC8,S)^EP2_[I%)1Z$GG7&)_0KP?O>ZRG% +M//.Z]U`9K^VAR"P=0L<[(Y@[5'IW3XES@%E<&B]BT_#.C%RQSVY^-RFB#59* +MY')^TC86U.D"OJ7EQ%%9)>XAE7*N0<:SS[FO2+OE<S/]#"W[NW_X946K!@AX +MZ95$-*M/ZV=3,$LZ@L%G4!9=+F`.N/4B=.<*<5P\_>;N>W1U0MVP5_D<G%\Y +M%V.*)@"P"-P_GT;;P$=A72-`^OZ-D#$,1L9(&11N'_*H<]4IFS^C!'\L55Q7 +M^R*`*3SJD/T6KD6SG'M7%+V$@'H,#/<\E%J"OD,63`%?D;A_A4/NUD32$L_/ +MZP[GOZ+EK"'*,>X&!0LZXI-`DA/$0/NJ\)<W--,!.QQ;'0/(CF+*[5VJN@>/ +M%<L6N6SM3Z!W\9S%0.WM7%'\*9CUX&5*5<E',+R2/4L1UXEV6X^C-A78@/K. +M1);Z.06`QC-P5L4-GD9%P,,AL%((#D8SQ2B3LR=OIG&,_LDM:5`I&9CQB+T" +M"E*U*VHJI2MQC?3.U,SKE[*LR_`E>OCE'G6RO0?T-PZ0^F,<8)_OO($N"5^P +M4,&"(Z::..,L<6M'^"(43Q#F<>W7\P>-:$(CKRC&'+;[Y&]$/#QQ+NRNSBH% +MZ9:X)EX?8-,7<1.<0Z);XP+S4Y?+CM!?'>X:G_:+\\Y:[=LP\<;X].6(=I>4 +MQHM"<$G+#NV?L/A83#K3-XXI'C/;V^1E23;O3:NP"/95V\T\+5Y%>17D5Y%> +M17A4>09O$4IVKMX)!67>*[=V5$HJ-*NW:D%ZO\KA%OD%X.W.G9)<^VTWC]?( +MN2HXW]:+>0IK>."Z%S[;#6H%[ZZ*EJ*'4E:V+A]A%6R,IKXJW)1.VBK9*'T\ +M5;)P^KBK%LMEU#I"6S4/8E:V<EO]W!-;.RO]7$5;H9J:*UNB4\0ENC1*$MTM +MY28.D<0$G+AW4:X1%[B(@[I-A(+V@4[7/ME5]1K^<[*GQ;/L8_4"HE]C5/$) +M]CD2A/L>B4)]R")0GW(HE"?9!$H3[(HE"?9)$H3[)HE"?91$H3[+7C;NR;[E +M)G=HA"?%L^BOLU!V)6^+9]%?<POOG9-]S("WB&^ST/\Y6^Z&\P7A-]T5[O$: +M$)]T:B.0GW2/_1<$WU-`?E;XMGVA7OKPB\BKOKWEC%$-!?3\2)%>K_U=I]4Q +M$#Y5>0L"XH0IM5XD8AT]>%""@2Q0H+PY.8*'B3D3`PAVR2_[")E3=O4T[PHQ +M?_9N)A(+_[5PD&`5&QGTA_H+9]HTQ?Z8A1?..3!0AVR3`)0B,"_JAX!T<^$T +M0@&\(=KHP==$UZ9&@P24(C!U\L==V$@P?QL`:#!)0B,'P43*H,$JE2,*_NI2 +M8629Z5H8QA8!B"A(,.<4OR@PR4(C#)0B,,E*CM;J)USF9-%<J@Q/#9>(,3Q4 +M*6QA\@%P;ENUK<]S+GC1<)$S;EGD0E$8</S`K--I].5-O8J[F<$C^-V-7UEW +MJ^JD&E^J++9H.;"9YB(FG2[07E`B7Z)6HU\T:PZ"L50"*V,?JD,!!6QJGDK` +M05L<B;U`05L>B9N`@K<@B<+`05N11-%`05L@B<=`05LBB<E`05LDB<Q`05LF +MB<[`05LHB:6`@K9:\'F)^?@(*W*3.BC160$%8J@$5BJ`16S4&IBP(JQ5`(K% +M4`BMS"]>Z*(!%;F933HC5P$%;/);^:R`@K=#>?LNBB`16Z*]]M&BW@(*W1J( +M[80$%;I'_5Q8$5:F@:U$>/`05BJ`16T*_<.BMZ^O8_S/2"@K3\2$2Z1T13$0 +MSIB22\2X?/&\A(6J2Z0M8B%!??DXQ'DCR?)@5XQ?=A$_2H<9J,8Q??91*Z"^ +M^TP[05R4/PC@/@=(G>IBT%>^<=\%P4%<DN17OZH>&FGIVR0EP%R+_71!WL$N +M@OR2Y%^27(O_QL`:"_)+D7Y:ORV@%'9I:GZ=#@%"8)=!@SBE^4&"27(P22Y& +M"6L(H-%:)A%"GB#"*$&6Z=!OCEO7J1'D)B>/B)!1>])@9+!?FN0F,,,\$]*_ +M1*FWLUE*X-'E#])+>%[<X^*[Y+$FWM5MZ$ZCRA#EBEO7J1^S!KE?/%3;VZZ^ +MYA4>4.T)1N$>K!%,Z_*^\*FWN5]G9Y'E#UB4;A'(],FEA->(!7+RY)M[M:[^ +M?1Y0]TDWKU(CV98M:67'^5H.;\R^S\N_(W^.Q$5<:WL$KSJ*;>]97=XA'E#[ +M4N4MZ]5QTT13[\=A-]\J;>_8.4H4>4/2(WUS<<(=^D<C&O[?,^O@A%?"889M +MOX6*[HT>4/9)-Z]2/V<.&5T<P2;?QLG]5(CRA73!3&X1ZJ0I^&(5Z8J;?RLW +MKL4CRAY)&^.8W#?-!\^6&LSXW4I%_BPPU;?SM.@QB/*$29*6]>JX[_Y2I70S +M))M_2RO2QJ/*$W,E,;A'[/5EBOJF&&;;^MG?=QZ/*'3$;XYN./F.I\^P*?6E +MRO^<:FW]K2I>11Y0_V(XARQ_A*T)TAY8Y%+V(<4+#"CG)>P#RB43"!GYB8"? +M7-&_UJGU*XF?(2)\`YY^08;533'^:.58"^*Z86O&V4%3R%G9>M#S!,B<8/3` +M%/'3)7@IHDV_OE^9R*/*%ZFDL1&]>J-`N6."*JTA,%,":*ZQAA(V_PR3><DC +MRAT)&_N6]>ISW(_)9S@XDQ!=Q+Y$#F7?2MY%868<A]!@\@)C@X^"Y')9G8.4 +M0##[,S&.,KG@%V$O8IWE`0YP)F3.&XY(Q)&#Z=<7!7*C,)_0.>3O;4O$F$:F +M9\E>ONY2]I'<!8M75Z,V<4W@(10N6T,$HD1)EL1AT*:!,EUS$DY+I.&0*]W( +M%0\8+I:\2)`&;:3D,UVCK7F',BAM^7$!RY#A,3!P!BZA.!A-TGPY(XN3O>0, +MI8B9T2/I20#$&5)L#R6D";%YIF#>)EDP/CZA,LQ2S!;30^*K]X>.0;48R$]W +MG"E%]"C=Z4X,37O%2,H8(WCE4OWS&I0A?9ISA$T5\>LI_?KRW,^_R*`Q_@<$ +MDB'`0Y"C\/L")NY5DCSI,P3>FZ<DB.0<&E(YEC.L*$1XG"-(K68FK"PY&5FB +M_#-C;3))YI8Y8NF?*H\QX>!'@#L[L1'5[H"'.A4NA85YNH6T11)EC1R09)A5 +M(V):3B\2RO+BC$3C%W5.'WB6,N-I.)QMU#^-6.NZM"@8]O6?^@53Y.J0L21* +M"RPI:I$^@54;G5`AR-1F(3E",K<UX)9L>,B=\NPK(C_8N@NW[=`4"+!DC=A$ +MX;*&(D7Z8=\E2_,?_0!`$;_IW_W@;I?^[*\*99<L55,-T)S-W98K-+-Y7>%O +M\OJ@?XBI<XNT[S_W!8?@_I@P%OQQ!/"OA^`?ZY^@?'2]PXD'=!3IETB_K"+A +M8>C]TQ_MUSO!N5GO`M%HEIJ5GW7++6:T#EEGD8+]&(8.ULVM#BP50CVA6A<^ +M'"`_C!\/5Z(J]9X1MG<!?-`-MEI4X(?B_+)]8.;,140C7KNNI0(W;\>CSDUK +MZ.,VM,CE5CFJ#M/"S1#I[2F1PX@*R-(/U>L`;:@/'Y"3%";Y=/!?(+7M/$3V +M[3)1-D`%,]45-X2_ZU:84+%I0&`_U-I<`2:'N%I;NT`2=YD1Z\Z(6SN`Q*9I +M@)?<PHJ@4D34I,!X'"^>2:3_-[(%TV$+TA"BA`''(5YBP=&0UP`F#,P"2=!# +M00++Y;K2NL$@\@'-MXPQ"TX[JA#1'?'T`+D2*^@:RJXB5PF9<0$L$L>`"/`- +M@4RSG6C:O.K3Q>U280(8>YYTZ"A',7\U&N>=%_8_BR?HJZGK;0!5#H=%9MX& +MRZBZ0(2_J+"I9AS&M#5T]/0Z3'8RFQF*Q%A3JTDSZL>E"?_&X-2F3$T82'Q_ +M"-9!(Q"Q;J0=.R@:$8MF;MX0LK.H$GJD0L4CF8&(/]KF)'34UEHJL:$ZL<,L +M;2G-Z<OM=!6W.#'Q;+:A-!9L"(]#TR-#V./K20'YP.@L:MB?,AH1$5J"?\C5 +M9&O*9GELNP,9!RD31GU%D/AN#6Z*R9FU)"L15I7'"5##NK!@U]@!8/C/0P## +M1$94@DT7"'T>CKTDC=%<%D8.V$%F>J+#T%755\B^KDH2!+-:'S;$VGH@#L1* +MF"#'\?/=]HY<K2NQ6=>:M>]<M>0L+D7?6.:#?B`]H5H/W++52SL5.5]:=8%W +MT`CE^V7Z5UGI<1Z^!=8B8-_UR_WB*Q!:#KHOA@%PR8B"OM0\]1W*KZQ:9V*9 +MA<ZW)B2>"!I[*T#T[@;,1.0=4J1-.+2^X`$(+CC"0]\E:<V2T^;J40'=6M?: +M(.-N(83CB+POP1-0E2\RDB$UX*5+#!SW:2@?+B>I79I*V4SP'FN=B?1+GKM_ +MY#!?K^S&'09-@M9PB#9]I)"NMDZGP\X\.\%5'$V@!-P[A*(4SM7F#G]U@1ZO +MS,?(XDX2A.3("P&<`3>ZM%11G?T&*1'IJ#X`?.M<ZPTPZPB?P1NMBY[%@FG= +MYWXCM?&`']X_"9>`U(`_)<!3T0L#1!_2I?0W6,O($/6I=/P<D/TA&"&P:F/= +MY`3@-L'G@`I@4:^:NH!,A9-_-$(0GJ]"0O@54$%I*&X$J>X?DP\\T<->;/*Y +M2'YI^D8^:4C\A(##B0'4_DB`G"!;+.W?3V;N'D`:F$BB`?6J4!9&C7`HB;A9 +MT&X@2P[M`BEUT`='PX_/+7P%'>Q()4?D1U/3(C%Y<.*&Z>#ZB`&IK\M5KF-S +M$H&B]G%=Q.M,44C!3NCX.O2/T>&7:RN*^)$K"=3D6I`HX`]3#'P&2P-!X;D1 +MN>223X?DH[TN:.,"N=<S#O*LYX$F=+S07CF%\^;G^2:9912NE^3-8G*A*`WN +MPZ>"]`E1H(L"@AJ40LB?J/UZ)Z=`M<\8T2HE2('`,4VDD@J\$)F+*T!V04HP +M=)D#!,%>:UG@H][8C5%$'K4DN[O5!(J_+,64MFJQHN!?T\$5:&2J]"%QE$*[ +M?T!R72,$(^("S2=BT6,5F%NP\?1;XP*DU;/`6PQ*=8>S,5^`O#C\G@_G`[>9 +M`Y=K?GLE-5EUEU6A%*J1NU6\+M`=_B`K5<$5RFK3;YNLPR&@LWYP1E%*BVY` +M:N@/JM@]F%'<%<'XVAW>R4R5)B]&P,'?2A5ETP"N7=Z](T)1%_3%%NJ^9IIJ +MB,=-HKMNK<Z=`3/G'0_&^*8.`P;E``#E``"```$"44]A84@A8`#==EQ@&RUZ +M5P(;"X'V``3@Z0CM@P)=-\$R@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U +M;G)A<C4O;&EB87)C:&EV92]B:6XO8G-D8V%T7W1E<W0*`Q.H!*M;#]\Z`(M' +/428#!00!```````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu new file mode 100644 index 000000000000..c600f025395e --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu @@ -0,0 +1,345 @@ +begin 644 rar5_multiarchive.part03.rar +M4F%R(1H'`0`S!&6T#0$%"`,"!P$!@_:`@`#;[#5T5P(+"_W#``3@Z0CM@P)S +M="<U@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV +M92]B:6XO8G-D8V%T7W1E<W0*`Q.H!*M;#]\Z`+YO1=#5A^0(J_-LW+!*WYK9 +M<RNF@E7H<AV@H,Q@7^P9NSGKKS$<R=!K\,;_26>9Y-S&=<\T5"W>)8SVKJD$ +MMJR6)7`.ZW:KJ>&(CO-FS5,$7MTW>#/&3:T\F#!BLLQ%Q)W8`)M?:I`7R_0# +M@ZP,N:A8K3^REFNF;<\]V[WJ$CSVBZ;4AF@IDR^?D(\BTKJ=ETD@^(',Z9K2 +MB;NSNHD%ESN"<`A#UX?NL$)%#JU<:OU%)YU@7S,&'X^MSAP3SNV$WO.ARIE3 +MN-P`8'[KE]=&PEM&)TO1SE+I7QM66TF>9;?W=%]L43,4*KANS,I-&\"=8=*M +M-^F"!%[/.C<5S-HJD7K1$IX)0<`H0CJW4<]HMACE^_7[-;!G8>BU#7Z[7,41 +M&[K6$]2,QP2#SR%N.`YA@53@FF>%Y6R"IL6(00#RFV3.K[:ZE-Y'H6+[H\S> +M>SUP*)+J_25ZFHSX.@]GD'P`#<L)Z#,8,='=K-K+M[VF[=P@VZP)T_J@<TFI +M"F(;&D[JPFBT7VILJE]DR9PJ4K@WG^Y!;A>OKEKZ$.VJ5MQQP4PDWL*I13O# +M7(FSJ8T"J@U*I<8(YE@KF)9$V(0H#B>!7C7`<01^0+<Z[*37=JP"#M>E3@'W +M>09?9!-`9@F`(\BP6U*FNPD;RG2'5&F,TF>0C)[<C>?$'MHS@F$K+IP"1V%K +MK/*2%]]:<D2K\",-&"!24^;+$L0,A5Z)9\G"!2@:S+`<RO.@U/(!!9I+8%SF +M6"7`C?NX`;:F3PPDQFC`[-,KB&UP#S`Q5SEEYR"N#[T@=!D>;F&)TECX0;1D +M=X96![OS+-EY[RF\U^98-B9)7TBFABBGM4?F"O\*8V&5S9;K$+ZI"SNKVFT4 +MH()$;)>0&7($'AX,\+B)XJ'W?%?>EKCF`E4Q+U#(%^'7&.#5!9K9[L*:]*9V +M<!-1-2FFO(6:U\-#0PR"\V)ZZ`Q3R+K"S.N22:IR=Z6S5AW<TPJ?5.X&L4LU +MBTL?'=[VYRNK1'IW`UK#*-[;MG\.U$S`3X(?F&8+_&J4-P3.*M=O:4_5Y9L% +M<]Z!+&-@:U3-JC,LL0WUUPX(W&$9\ND)<EQ<$A6IEZ&0]1=579H(F7<SW9V; +MJVQ56W!NK=ZM*B1'89/4#",0;%K(\\UUGIH[[["MV(+?BYUH+=LP$VF2KJ@F +M,2;FA*<5'@T%"Q+K!F6NY%ZZ@&:,O&@^"VR6AL3K!]-)Q9&:)+])=0U4(7<M +M('O>6)7#8M,-2D1<E,M-P$I<31TU.T(H6\&/.?`(\G,E71J'^\N:5185K"WE +MM&7P1HFX];9:A4NU(VQE4Q9FX$-77=4O:)1=;%JWF26D3"_NTQ]2I:Z4+$S( +M&5`M#N,Z(A'-)UC'>N9G>5M4M.TX#?-D+2.DC2R*TJUHHJIH2QJSQ/!9"Q"8 +MM#81!Z?!YFS@0L?I$@RY4[OZX-9\O,2&13GZ/&KZ[KF,)(JS+2+3.X/U%@L+ +M;;P5IH8._R*P%9K2@6W]6"]P(KD!:MU;!!)S@K"@Z(,X[P+K[0`CC'G2G@YW +M5HOM!8\VD<C%]&90S"6C2;<&2CCM8,`NPLEBG6*!$3+O$[<`XJ@[(#:2NY&& +M<%'=W2P06U[04+");PX[P1,OXBW'@(F#40E[5AUA2#VV.7^J6C-6M-`8O2[I +MW?@03Y19:F.B@YU!5_B.E6/!'35\R!!)M[4JA*-*K\C,JB;55?2J8*^-J_ZJ +M1NX]`JLA=1'K%$=^,O=?=LV@CMW>\D!7I#;8/]B/7P0!4(O<?/$Y1C@FRFS2 +MW'J3?0$0]G[@IRXUG+R\TK'@>`K`&9IB3"C#-BTCZ)(+,$I5@:S9;X@E/11< +MM'70B^I3Y`>E"#\?4H$70#(<]CE=^M,[D.^"9GA,P547UX0#LB#J>%7?KUH! +MG:\7$Z.M4ZQ9R9<2,.LH:XNT%YK!`#(>]J&R%"07\@W2]&>&)=9,/H12)KH) +MEB!$KAH(MP:,!]$+A%XT89IFYYRGS@P.0C0\S2V-58X/2@9L9ED\%_>&`R=8 +MB:5>H58,@(42H8<Y;1,]NW>9](8,+'3;N]"UZ>\N>1['4BV6X6E0=%[.5##Z +ML2=Z17])-F]FB2[WGQ&Z(2^K=PQB?^69ECX*,A<,W+^W.+Q?TN)?;40"!"S9 +MUEUQ@28<80"-)QF1H^9/-WY4*)^#&#K#*JC0*LV#YU+3<C"XO>U:>.K1,O:` +M[21AH5NH?YR2MG.H"(,B('KQGH,!?;)SIG@GE886<>6AW/E;5'8&0OW$!D56 +ME$HS>,,G#9`@,@.X)P?4D,\[_6X%(>U!3]4(=W]H56Z(6G`42._FNI].#Z>G +MD:ID=_J9&G/XSZ\7\Y.(1I!)OP10=[FMRRLLLP9&57W"<M&.]<FVRY8U*1PZ +MU0$;B;9RU%(C%+IL3SP`#O6F'##O7DX(8-$+!3`O[ED$1G"8,A*18;J<`CFK +M0UUDANX3$F3P;.RO=GA`[P+/87"S($#GC<*17:"\)A"PJ2+Y)C"FF9LN,H@% +MH1,YM.*5JU9>=M,8O-IN*!T6"!VAD>.%`,CN]5-*S[M8QY19YB0)L$9=C"7/ +MOY*B8.J,Y^[UJ>04&9OFIL_DU,_203O#B;PV]`9N$2NG!R*]68U-6],>ELXJ +M;D\094!/#8IK?QX7K4VI[VK5![$A:W=.;$M2-6\OB%+`FUA3D2_6^*=M)3^# +MV?N^FLW>D$(N8_>>$J^Q.[ZDW'(D+MWS1W"W)A3F>FU^B-,.Z+E?U0D\\+\> +M0K#*NA`S$^(1+7/O4B*T*!+X1)Z[A[=FYC3%H:ED1BYF+X%5C:!7-Q78Y*=W +MZTO)6-+GH'?J.0H]_(9=9,Q[E)K&CJ!G&@!YN*)C!M)9[51'6*R@I*+%Q.2O +M7S5KY@A/8Y.96'@@KQ0IN66*4W#P">!W,$%'DTRAUB952&!9B_=#D6-:^>RH +MQLKW>#";^29'4CK(S`G=WI77)N3O:(.8ZK)W1T9.[KQF$7)D("]*Q>U8CKF0 +MLL>7C[=-:*2"IA>9/E3SH5@O/,(G;P&Z_[A953,B,;^0F1A^AC?77("WZW`! +MSLXL%+IQ=U4K+D\U%.E-W+9IUCA.$NN+=0Y&[A)(CRE[3:)^MJ?V@GA3P@9V +MK'%\<1=8V66E9#"[U0Y`@!%>=JM.=:#1U267B^;5E(T/\((;8R#X8EQ\@.QD +M8QS>%%@P?P8?X(':+/O!BN(IR?%?HUZ1*G'D'G,T/D3M:#RH'.'(SE"6+$X@ +M8&*9-3B(4Y7K/F([IBB>F2[]$1N^6B@T9].*6E%[A"_"LXW'!2#5`6X`[UEY +M2TN[\G3]VM+.Y?(91W`R&5#_+90\`+-A.KWR2'`3BR\W2"HF]]I:&`D8@S!# +M\7MSYJMX!YK>OX:_1)1.!U>O21(<+BJI*.XF:6@H@92=QYU51S(VW/+U;<XX +MR_&4;=VS<0F,N5ACFXB^``-M5G@YJF[T@N"!P@)8P`2W+`1!2_["UX%:<<SF +MOW(F%^0(#7FPZUXD?L+7L`V#,WMN+!:4.^#1#"+Z9M9,/O(3?(!DAAX&L683 +M+G-ER^.6/1GKH>3$5[KTN(70#`(#-WP.I86GE4K'-TJT\J]PP>A/*.8/>(`N +M@.E%K$8C%^GR`DQ\ADFSS-M_J3R6N&;P9:E*#/Y-DJ\Z#()O-2<`YLE$X!I: +M>YY?A+7HZL9A8ML'GJK33K%!2P.IH95&+_V)L6]82(R0#-P'M"HAZ^F=C>;M +M>B8A*)?@BV#S@8<]WU:1X\$V3#ODA7R&71=FM>3P[E`I&@H,U('HM5#K_S+N +M4%'81Z#IV@H<A)B);^@?;%1]F8BYVLYT8O[1*;E[\*1?.'+*@.KT+^3D5J'V +M%IP<A@S('FJ7]DH"P/+S)S;MQS]7:.L#-!6+1AA&+U$[&9F<<[B"4/SKU^MK +MC;52NN8Y8_;G]A@<9/`O/4-S#W8F<9L+ZIB[#BHOK5_-W!GQN$YE?<")0I(\ +M$1MSRJ@7))_5*Y#.+4E395?_HZ#A2Q"&!F%J;K39>.>N#0;2'@A($V8ME=TJ +M>]29$:EC[,MNN9@SN=QRB5%*QLQ%LVEC\Z=9^59R[)VX0?]3S@.63>8WF>-& +M#I?5;D*U7SV56'_FO=NZ@CGH']8KIQV+GZ5SU)CY#2W/GEOU'GD]RY[='!/H +MW0_U%<N>TM<]2=_/N>.K?.N=XK%^"Q:K%TR?.Z&N=$L?X%$[P;GP#Y#2^3<0 +M^65D)(R+77LP-&3@_B:L^!SG]U@KPZO(I0VB:8K0OBKOIO1[$?YC67?32S24 +M\+A8K6+1X7X/"U>%_@8_O(SN^.1T;8?/[3P.PHF8RPN&QGU>;=8P8Z@<DH<B +MY>.@7+ESM4T?6I?>#Y7U_7FC_>%_#_(JOVD+YS;;*X]_R2FV+[Q7ROI^N](' +MXO!+W^[*;$OMQ\U(_KU1WUNS+&R&<.<J1<FX.B'8%.D+[MGYCB?7>B?">$6V +MQV*:*=IM'7-32_\FJ*[?_'+,UKYMTH^8A?E;54!1',K^F5_X[992'S?M1\QX +MS-$M]1^KT_\IO^4?YQK(^8[CP_IU'_^1U@/K[AL]/XGTZD#\93U!?>_7^Y)4 +M_YBW.SJVCKGI&Y'][_D5%*?G6PCYK#>+QNY)_Y'9I?7S)!O^/%1[_E?XYAHY +M'YYXH^8\?QOH.2#R5(/ME/3E]L/GDQ]>J.F/>SEW@'*T/@++\%/.I%QS;(=` +M$+/^=67;=?(O^8$ISU&.9S;L<N^\UUC3ZSB/M7K8ARZH!T^CB;RGGBS,:,KY +M'</'INKS_C^5\,?/A1'S$3:1Z<7NJ6=.L',)S)V-?W2FS+[97@VU^O5$?>D[ +M^Y6=9L=)5)H9KJFKT%P/H_AV@8]@;Y'4H&$F'>0%3439ZFF@)&SM=!6@R`.[ +M&SFX\5HE:E-5DXJA!I\`=3@_`2BKTDP83]H]$/7E<YSLWE:/&I^0\,WB-'9@ +M#J<B?@'GT5.;Y)09%.L;`'M6XL`9P&5C7%JU.%-5`L3BI,ZQX3P*$=[Y5#)Y +M,E:F1L>$C%B6'0.#H$=H*9K4SSL]+35`A3H7N6I>`<V!#(,VI,XA,=(WU&_: +M94T">JICP,V77J/@4QQPU..HY'4VAJ:H4V.*NPIJ^JJC3JKP[_#4@_5J<6L# +MRF/4B`5X"\V/$0)3,B=P?AOHIK:QT01?7'J5'F1AZDPM-H*BHL0]-R=+@"JH +M>(A(*R'^),M+T_$"'H&.&ANG4RL/PAP";A]IE*8K06-6J94SC4JF>Z=2I:[- +M28!GONAP>I_(:"#H2`?;:*HLZPXX-)P?=H*+=*,/?76AFY;&JT9A5`7A.J4$ +M%`U:WICU*TK4#.UJ:UQ;&M0@G2)8R6I9I3A2T$936%>)!I*.INC4UN^8U*DS +M"0*PP;#A5)J9H.NL%NK&Z=2HGC.IE49Q)H8K0G%/A503J8&*U*6U)=K:^G3, +MTGJ<$<9U):C4^2I2)75IFVRKQ0-'$"9BDM3<6L!-'J6I4R4::42"ID]37T5( +MTKQ-:E,0&-0I?71L5$FO8=)7@6+47@E%JI1D*9&B(+(52=3(&F.H$H_KEJ9& +M'X9N6EUJ\-C*H&3;&K>?[4Z"Y:D]TEJ53I44"-;)1YB:01=5C@2U>.-=HJ=) +MFL:GW3*`[JU*4U&A6"^M`[4JGG5.T`&EI8'P`<SJ8_*'A^*;`Y").:YQF$E/ +MH*I/AA(R8+>R8U,-0T^M#/RFL`?-$X2H<)$?1V]VZH)"O8Q1P(.I$]&S=8J? +M`1BT.IZ812JFJJXR:0#%PI,CZGM]M3V2:7[.U8HK"314;$K/PIYLL=*9->8% +M_=^INCF>;T@F2KT2=4DI-(P7"`2-4C5.J6ZE$PHBJ%(D%!(#:AEF<UXB\%>% +M9A)(6D4Z)VF@QQE<HMF(4')HV:E%U:H+"3:!AUS2EZF;U,K5/8I[,ZQ2J($V +M4@)Y`2,`4`668\-%#0.T(V.E5P=%GI#70L55'P2%;6R>J#`-4)CJ`5U766=W +MZFKIH54PYCH@L!J;9:"F85AD]4I-3<I(.XMDIG#+L4,U35A"QJE:7+5'0D-3 +M;],J%.UCH@P951=9FM'=VJ.XSJ<F-M3O2.WG32PD>G20%R-$`4*=A<]K4ZX. +MO+1J]:2[=3?`R/`\J:VHLH["=0Y"3ZFU`Q:U-J`KI3UPD=:U9WIL?KHL;#MX +M;IU0MH[*%5KP.)W$5-=/FU+G6I^'A,..H`@2B9)Y62D;I7J4%'XG%X]E6=O0 +MI34!U>?BM759TI-FK.:?GNJ/?=VJC&W$)K**'MA7A89+$/%GPIV+"%A;L]52 +M2RK([>]JD,+Z6C`C##5(@JSU2*#,P3+:FJ'8U;%8IK54JNNV\;ZI%PH23<#3 +MH$QF*-+1W<1JC)II!5I4M^D:HF-:Q95G2(:`U,]#\07\86'35/475J@A2&J: +M8;'Y)6"DNP%ZHLX]8L[*%,*<YV<?V>02RG",7&CLJLUS?F=56RRIE5-[EJB5 +M)FH\`HH&2R"3`VP.FI/5388NJ4A)[)-BP9%J\0N1N38!"@Z2K>*2JQ8!@L-! +M5IID#7*F9NB],HT&7-H/$9:;^T30,85813E"3(-``;2V%8J[T"1):.4:O6DC +MTDJO!4BPF-7-.J;4FY5FW435N"1:>LK:A1T':[T]J8"+AO(,PCU7Q[IU3YQ? +M<%,%$V^!DUH*T$SH#+*U8KTW7JK55H)&PN)T"O70I.2JJ/IWBJNCZJ5YX@9* +M.P)<32)2M9Z5-5?C&J>9':;FWONS51B,WU6R7&M5:N0'R364M*=+MHKQ=?F2 +ME=4VR3W$+H0HV;5RF41MFI(1VI9L6;,7'/1)H4.GUO,LCJMJV*;(DQMI+,5! +M$AMHJWN/#J(@Z3%5**=A4/0UN@KNF3`!,[-;5*)K4WC&K/KH*9K5A,,OQ9Z6 +M*2$-.BJ\+&,G-<<>UWPAF5Y&)$DR$ZJ*#6JP@E?(6%1D=H;/275A1%695/6* +MF8%5:6%A4IP(8;#VI4SC^J9DYDIM8*VD85^.DFFCXC1JW"3!'XDMSF*TL0EZ +MM!+"9SH9T20>Z=6F!MJN/TS!)W5JNU'40J#O@UJI/"FM-I7"G^HI&L/@FU&N +MW!D)-,[Z@FZ":`V_=F+KFKPUYT7TGP_72/697U#P]8*\*N<GU:Y]5\/*3/4\ +M_U#P[V?5?#KO(P/TWPZ62#QE%=&WZ6G:B:1IQB?J?AR[^I^&W&._^K>&QJ[_ +M%;-]0\-3WU7PT%2,#_</#)/)P?]P\,/'&?%B[]4\,&$CRG_ZGX7K9'PL7"Y" +MZ&0U=?CY))],\+GH\+:,AGO/U'PKB,V#_T<21\Y2JN95FW&(YQCCS95SD6Y? +M6?KT+I+"+UA5UM@X1[8SB5G7KGC;#5IW\RZX<?>W1UO&?GK.C"S/SU?1@0FS +MO*.I\S\\KT879^><Z,/V?GI^C$!GYZSHQ!:^&V"-X3B;+KALZ^/Z,1&?GU.C +M$HSKW'R7U&$JSKUCHQ+..WW)=4NS\^]T8F&?GW>C$RX]`NN:9U7#T8O#/SZW +M1B\N,E+EU7IG5:71B]N+J^D#CB[;XX1U(%]<(ZD#CR[;]%O[A'"=?3?WN+&X +M7+MF"AT*=]F69I%>N6<*53>++')*GN].,PPC=E'O+W$W.D>S9$]@6=04W-0_ +M77:7_@%3;YKA>/=H?YC)3Y^*\B_\7%5#>'VY56%G?E5:6?D*K`LK.25F5`'^ +M1Y\G2_[^=PS`OX>+K/R]MWW/V_"_-X4/&5;.MJ8W^O-TW;X#(>9<HO\%41WC +MB:WCF9'":WLR@_&LX\;,_ESE\W'CY@<7'#7[^$/7/V_8SV9YCPOLVH(J\Y73 +MAB+TO-]7^P'MAXOYLV@[KNK&<Q6S4[Z#\O!YW]J3XU74N.ZI]ES7L09=((]X +M_'][\F>[/T*D17#_?VFP[CILO^9QV>YF+3B1AZ+S1]3N''2>-U_ZG'ZX-$XO +MNWS>Q7\;)^?WG/?$)XF=[@J+8Z/Q?Z<&%V-EV.\U<7UYOS\5?>XS-'_&:F_. +MT/(5#'S>M3KN/;;&N>(Y5KRXW;XL!!KR]_%\_U_!6R49'6ZANGZ!H.KJC.(Z +M.$DH=@@CUSK^*YDA>>MWJY5KOTI<24F/7H89)2XF[B+NJ#__#_UPO]<9P>'Q +M??X+SA^YO]]P-_[WN[[A\/I/P9+P/<X/"X`_+J^_>^#XN%&'P;X!/N<#VQ^^ +M[[F]WON^WP=_P-+;:W0<2QT7NT?N\#A_!P_;$%?_.WV]]SA[W=;SW=U\'M_! +M_WMX/]M^'OMH'L\/=;GV_=JNNWOO>W[WP[W><+;^X(3A[OV]OO-[W7,;S=\# +MVN!OOB$+&'I36EZGVP2']CD6_N![`]/;X&SS'M>T))NM_NA*/<]3A_]Q-[P= +MY\.\$R>Z"!'IN_:V[WL-#ON%Z^\]_>"9N")B^/V]W[N\W.^W?P_!_S\&W\^? +M``"L^#=^^)1[^]]G=;O2[OL@7(DOL^P)JW.[$\>V"CV_"XMSV`A^_B>]*..* +M77Q>,03P7:N2MWI.X^<5-N7(/>&O=`CCR%+]UQ'_P-HYH0LOFBY:C5^&ZXES +M*)L]COW+[AR3[_X9^N*Q>JD\(^P)3XQ?=T@;GY49-9IW\KI3KBF*!?/!][Y& +MV_E/>N6P,:=7/7ZJ<\5SQ>,`^_B1]@78SPN@61W1@(%OSC8'6;Z5<?^B?K<H +MB"G8%YP>%!CLB^%=J35`?$;Y%%M[Z0]>;VYM-OC^.!\+[XW7PN8/$AN.!#:^ +MQ-+F`X5`.&'Y[`\:\IX)A8P3^GZB>8(A5.TA#A3B'NH"9'&29![R2E,9`C(; +M$O2^W-ZX$:3@N%>F`S@&X2:L>>&)[4-F7$>'^CH[NNI^K$.?_^VQ^KX8^OZ: +M'PG!\.OL:65_WW%CT>%_AM.YXN7^3@K_(CJS?Z\KWU)^[O8V:CN2$Y_/9N-A +M>IO8:CQ_+S^SVO!E7'EY)QV5CC_V_RPFPI?RYQQZ_K\KF0`=S4<WUV&^1X*T +MMXO$MX8S%#?\+Q:=QU'V"%\W!'6?JA[KG\_2?P23717W@]/W"(J>X\OC\%TO +MW>BOG8..]Z)QAI28_,X]/O/.R&G<4O0^U5473O<\X\3&]CC^8R7EZC`^5\.H +M]7EYO!;&5W?KXQQF/'[/RMGHOZWOI^)YM6X[&RZ'XN_J=GO.(Z6^/]F:#,:R +M['_3/:CJGD[ZO<_D\CULCN=-O8O\^+@]]%W5YW7$^6MUOR\3=_+[_!XYQF_S +M7'7_#B_'Y?)_H_Y+(G1`@>_EB/@_'SW@\SX.%]%YZ]GM7&HU&DU?,>%U>IZP +M%MO77:N-,X[.NM_7U&LL/N]*X[G99FDPDRXR_/^")HVV.B]Q4D?W?JO'?V\O +MW5/&C4Y7D,YQ?#1%CV7N>3SOZLCE\;UP20XVGWN2L,E`IO3\_Q''>0_Q=_E^ +M<XM8X_1^7D7?,=YT?G[-S?_<X76=9B\9,]/O^Z<9GQMC[_1]9@7'_.!!SC*6 +MN9Q'6]3ZFQY7\^RYJWW.D`U^YTX^_$\[K/S\KX<3D^TH>2SO%:V$5[F1R*SB +M7:PI^9V%3YML4_;>J%<X"[,D>3DT3A&+LR4;B.KM>QP]G)J+C_U-M\-I-U*W +M5L2)_ENV'O$L79A2@?EZ9UR/V<<5D%!\-O\U0!SWS168YTW3V-G96=I551NF +MM@.Q36>C'5,M<?7.M17TU6'>AT%:'-G7V-E3:"TT@DM?H[!/DIXQM)CL9=@( +M?52X<6-CH.HIJFNL['J'%4'6CJ0`6FCT?4'(I%Z>OEO)A4CVE!(=G]2'3U;; +MK@AMUYC)=@K-=7YL]H+)ZK[C]3!R'8GZNFRI#IL9CJA9GIQVY=6Y2/8NC;J; +MF1['SDNI2I/J\QOV&&UV#M08S'T6+9ZZB8Z_J8['2NCK$*Y=-T*\F`^-Q(^T +M]A0I=4DEV&!(`>.BX^0AL=(2K'8I&N.+21#<>6F/+7'EICXN*HBL.D:1@BT! +M&M&6E&6M&6E&6M(6E(6M(6E(2C]13L]7B)ZM0/MM4!&+,ZX_:K[,+C*.C:]U +MT&W3>7&NFL+ETQU(],"2;RZ>D0N@N72G+>!J]+<NDQ+HZ2'NCI$IO!W3T@DU +M!*Z.)DNCXKMZ-<-]34W*<UD^7R]-E\YEAL&/J96P0*DF#(ZSFJ+*O5U,`;RM +M8!<MGLX)5F<J<!571)E=954W*YSG0/,PS,N8RW-(CG.7RK4W\KRW,93)\M3< +MQRG*<WE^<$1D\IRP!&^P2)3L%?,EDI#7XD'8#S:!8ZSG3L%S6T7=?7KRM@U( +MV"V]-;6P6;;`[/6SA^2,IM%L]?KMM@T:V!N,;!]A/:[K8/NK8*H)V#TC8)/8 +M.[-H*Z.K%@@"RNX%NS8+$L]7(<;'T>3'L&[N,S&9^,[!T*[@;ZML%R4[!^EL +M/V=@\S(0V)^G;!?(]A#ZVF!.PBQ;0;':)#&P=V;4P5ES$C;82LR$;BKKZZR/ +MNQ6YD2)>W'"NN>F\(K803MH7^Z[!K%.PFP;#RZ4S)V$L-S(2GMFRI*MA+DVA +M)#8.`G7A;1O&=@X8WV$H+:5IV%)3:#/851W(@!VXG<8DNYZ)#86_`'8V!D?S +M[8.^)V$_+:89+MR]6PN=N2[3;8/1Q]A:<V%UV]=LR>PQQ2NA=TJ^C;!]Y.PN +M9D!?1XK_SM@_BGNAYL8?S[80"W17&^D["!K1W0IJG8;#-H/_P-A"$K88&-FC +M]D73_XVPAH5L.(VQ!_/-A#ZSL.G/G-OO9)[,`/S!;W)B?57.WI;W6QC8;#M@ +M7YYL(UV-AWZVEO_\VPCM/MG1M/EU>PH![#^9L$7;L)%&-AS0V#KMV$E0V'>; +M8*:ZY\3L/?VT;=^PE0D/+N=':E?.-A+.8AN^9E=PG)\N=-W@AL^N,;$7+YK8 +M33IQ)]A=TP27=Y3&P_GN\-XUL)T4UN;NE?&-A/));$(2[;Y9)X7-6Q&3;!DC +ML14I%BHQL2@(]'Z?8WMM+F>\JG%`95V>@T)\1,2%6-.3.D2BPN`%(JF@R>4S +M.('<UC#VKKK2@/V2QQ`QQ4::P'#6!S4=17&+V.*`Q$LVDTD\ICBP4E;H$A#+ +MFPK;-,Y!O%0&K^/5."O$77IO.E!4UC&2W5E18R#UB0JPDR$T[,<"/T5.<Z@K +MU>C$P,"P,[+@#V:>.N=0'Y<V3D^@KJN,&GP]CYX\5H=""BM6GIVA33M1R,.F +M9=_</J^,<R'=1;LV5\Z&WY))@BB0V"I;;95KMNPMFW62]&WE^W=-N,XCTY8H +M]_B\6O)KNT8V<GXNYUXV<XKQ=IH?CO;C'#E23UD^XSO15STGLJR]G>;C'R+\ +M;1_TA1Q9$O_`FXV.E<HPZ1GIBCB2,OO6!1BP<1M'5TG_I6$IH>KP-QC9O+K1 +M_&?7,R_*1<=A+C&D>HTO!=/91]EL7=&RWWOGS%/_87&9NB;<<^WD$JC/:QLZ +MC%(Q@]6CL:^OP(SL-K&Q#^9+^W;5?VVRZ_<X-&&]4_8-Y?=FRX?<7';XL;/; +M[EMQS$GT<@W4_24T1BH'([+B_Y;L#UV_'SRB4D9?MBK;%^WU&$]H?H%7H16/ +MF+T]1EFD?^S)_QR_E"KBDLD7I]FXRUVA^YD=EY.XC=ONEG)2[4G9,=SQNG_A +M,BMJ7L=I'RKQ"M\RY+\_BN*;=KS1G+(RV\:6[MS=73`^`N*\MWQMG_+H[?[/ +MB3O[!>B_%V[?LB6ZFB]&'+M_?WI+59(O1CBINC_FMP2_#=L_H>5+MX/Q$L^X +M<%^;FZ^A+J7XT*BOT7`,-:V[7]_(*=R7UJ[VP-<O+?,3_+7;+_WSQ+F7)>CK +MRDGN5P(3"[RP``3HJ!;M@P)=CGKX@!4!-VAO;64O86YT96LO=&5M<"]B=6EL +M9"]U;G)A<C4O;&EB87)C:&EV92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74" +M-XF3%E90!E14,B9F<$AHNY)<D)@+D`@0"`0QPQP@0S0P1(!`3#$R0@2&*`1) +M=F%,<(!"$"&%10%%14>T1.U13)#`@**D5$14P1$5@P$@@)`F'OG57*P<Y?.7 +M=R`]^>]^>^?M?O/K[](DOE<JMXZW6ZQ<Y<?\KO^"5UUOJMUUO=57.6!)K3IG +MR73\G7^@`0`(7^D`"$`&!?_2`$"`!R_T@!<@`J+_Z0!#0"]7^H```&```!/^ +MH`JP)``8'_U`&:!(`%@_^H`1P5`"D7T4/$^4Y+UZYK^.:ZZ+C]L'%)]\,I/[ +MF58*@<,NMRYY-\UU=7%SJ0.BT'<.N2<A9W5,Z8ON5)^DV@%PLO#M#37Y(7=I +M9<^-&0H.`)EI=GZ"\5)1!OG3R:3A@.@N%6E#,;F/H35"8Z=):">5P6)I+.2@ +MO,I3/3:6;S\U:>Z#/)2:;7E<+*-#P'Z,HUH8+W$PBDVCSLT(S47P(#JN_V/Q +M\)G!*&^F6+PR?17JI7O:(_)XZV6NT1\;9BR,NSSEFSENMEF+WV>1S%GA$(F^ +M*!=ZOZ'N'--I;5,ZDI-GI]E7ML^S6.VE@R,=MM\Z?1)7*MOF>FY4U)AU".\` +M>K<GB[:/5ODI>W2U.^EV\Q!#&C7Z4Y#=]5AH'E/D%J8'&V7F+X75W_RG*#?( +MV,]5=3FF*-RVZY_DX;97G<1$"NBJE6\`N_37U#3.E>>+_C<`OJ!4%='=TI,0 +M=2*08CGE331WFTE*]YNQ:O^.6@+8M>;R^ZG'+LLNTV"QOV]J/U1T+Q`&+I1I +M<6!C5O?CE.L:!'*2\@!D4LDEE4H]++)9=*02S*4BH%L@&:6:2S:6>6EO/@:! +M+0I:)(S`Y-O0_4@2J4LEK$M:,RX&NI'V`&QI,^@!LTMHMI]J!ZJ7KI;A+V4O +M:;S7[;3/N`;I+=C/O`?Y2]]+X*3.]2^,#?I<!+A)<-+B*4<P!QTN23/R4F>4 +MM.?,`^927]*G7Z@/K2^RDSSP/M2-`&^X#HJ3_X@=)+II=1*:2_)+\V]5_T`F +MY9%F3L;)/KV5*/\OKD+KS._!O&SQMBS&B88)E^'ZV.^^AC;C[EM^;@^_!YKF +M\#*[_V)&O?JP?>_PO!B;CC;'[^;_QE=Q^?MS7E;:NU_9_A]'Y^G`8GD>_]6Y +M_7O_IBKE=?8^W><W$]FAL<?PLEPWN*MEU@,%DJM.0D=KJC,US*62\[R%]?U( +M7S><]R'O9;OV*P5/X[U\T]ZG-NW%Q+#*][!2?E0LMI7NHZCL9;19K01>!VNJ +MK4%6-7`6#Y=+-UJ`T=.OG>C\IY6`Y;)YOG&EZ#TRB<)COQ[7W8?U/<S3_J<' +MBJKZ$[=<V47_BQ1-H\'X93%97^=W@KK"::M6CFYRH>U)U7N_/?,IZ5O_F5@, +MKKO+Y6`>M_[]\^_X\)?>@5)WE=]D7T/N+US7G4?V</@L<U:/Q\ZVYI=#XCLZ +M",]&X?5X?WVMA?;_QK+KZUFM.R@*OVLGEGN:VMT[V^=MM]_FX:`A?2OU\I^/ +MP-NL-#>?V>.IJ[/W?7J=DH=9A^#M]=FL+*:J%8T)6=YQGE7SJ_?4=%P?ZL_B +MP^BVKS\W-OQ>W&VSA>S+=*P4,AWZ#J;C4::U,RJ7/Q]MA-3I-$^6_U+KYW;W +M>3ZGAE?,PD!C[W'QF$YG8W5]_.8?JY^%8^G86^L<'\]?GW/+;FT3^#HK-$6_ +M^/Z^.4:8N\/]O9Z?O=WJO52ZWILN,5)]3">U&]4W?]:[#_GQ"M;L,3I?7>[A +MZ#S^5ZH/L>Z#[WS]C49_WV[1>O.O'G="G8+6,=]E-%Z6?G#S[[]>W[30=MH/ +MX2]4M0=1@M5;MS9O>K<.ZT,_4^,[6[T9SMT/^#*W1?'D?2\!@/*TZ\=#$>SV +M[39]SI(/,70I/TE\T>47?_2_-Y@I6\?AFG;;QDS3N7&Q/3JZZ]SV.HLYN+U^ +M71L>"?92J[>CW*Z=V=^U.,Y]ZE9OA047<M1N'C/9*U5?/ZYSH>1C[AXL1C77 +MZV?]:31?MTH2H1>AB<_8,-[&+N/^;W[ELW7HN7@S\[OGWY[[D<'"1-TU7[]V +MX]*)SW)*MG<N^WSMPN?,Y3KE9:N>SR+AX)B#?<)[&KKM%%?#^-OK/Z:*:XF4 +M^O!NCYXN^\]FK44_WGV>R?I]NG]QR_[=?\4P?:WY>S_6?RVQA:"L;38W;REU +M<\^H6:UYV4H?NJV=NGQ03S&]JQ=1\V-5A+<[=S3;+\>]^4/GM'UK9E,)LV.. +MFZ+XLCL,G_5OYEM]RN_+<.[V.]]5<S$GS]9]SO.KN+[TK\-/A,^N]+?0UPT- +MGM.%F<Y7LG9/@T'^,W1^WAL74ZY#5_)^MBWIZHM!@_8N=RL7*\/]5[M;W%N_ +MVN7#KDUJ/KL>\AE]?O>T[CH\.?<8^#Q.2^?73^=2:&C+?(T!;WVC3OG*-3X- +MWKTP`O8O5"2SJ^D-$Y+1XTVM!34B]H:$U^D6<+_Q2X;YH3?!J!<@-*%N2A=H +MSAZ92.0G(TCZ_E?>[VZCXJ"A=N^\QQ;_&C/@%O_4?G.Z;M^_]4,AL7OQ=G.R +M]`N?(W:.JX?B_4<N['[1TH%\:N]+N5#'RM0[;%</Q7JT,[4:(JYX_:>%V_J? +M>OY=6,9K%Q/Q7Q]-VHW/^E[SWW/N.]#4/XD=C1SY/[^2FZ[=%WW7PU*@HG/P +MND=K'*A=G;P$^WN[/<\/6U#Q6UXF+Y*X&-ZN>@%SW]57<IR_>O5':H5F&S;G +MA_4\/QU_E3/!=/+U<EH[EG(^!QOK,>=W).O>#WX#UYSNP71\WE.].M&=D[JY +M87HQM<ZKQL,A^?P=?$KHS2?36\2YU!=CKCT>Y;=?;]G;^;<W3D;WY+7^V5\K +M>ZWC:?^OIYVU88?DRLW7/2T4[6<U@9_TO9@-=B(^-K&0Y74PV0L7\7[T/$^> +M*BGYY][;JQB]91,'*B7$^Z\%.1=Y45%X2Y^ZC73[DY+BG(O[XF!;Q5>6[++2 +M^)U/0+SW>D^>>/)3O"3?M`Y'ZN4\ZN7].]$6[TG_"]4+F4'/>)HO5*.B<UU" +M437^%V+>+E5&A*"%ZE*A1_NO/A=*#Q,:/PTY!B*$E%RY5SLNKKW6+KXK;9RR +M_Y=/`QG?_5W?^U83C]XH[5O;OV5[KX7>A=\AM/"N'XK:43EW%U1<O$O[[Q.K +MWR=*[*P7$_%:QA/O;K04/\L;;]':J,\YT/?9;8?B]I_57Z51\+F\>&#^N?=> +MYF=A/T=02]'PUO[W5CW9^H1>U\#EE=B[>&>7?^K_/0>("\:M[<IUBNH71U[5 +M'([3NT[\[G_'^>38-M[M4]WZ<!PW6#Z&?UN`P=;YOU6S74?^/\OLW;:OC?Q8 +MXCY+W5/!#^+\_!LX>X^;(?A:\=C^O3GC![O4^&LP^JIW/\KVO5RE]B8;%9S= +M]ZN77:V+F?'9/%^TQU+5KZ@\XB0]'NX=WO5AJ?:Y_GV;>VJ=O>$_)U^F_.VT +M75E]=\]A]9?]W'2;#7^FYS?M^CE,WR/0JGZX6^_KI(IV^&G:Y=S;#]L/SOUM +MOW<F#S^_K'H6/JX^$]OS+%U9+E=G,6[:Y7]*K$Z+I_3A\YZ^GNM;U]BV_Q>9 +MM/TS/NVJL0E.]%W^#3^CH/XP=JA("]^KJ\KO[SAI/0<JZ_I>L5(6/X;-\G]? +M?+_E++G9Y[;W'>I/.?>HWRB7.7?GW2B+F+J,^8[+F.CYB\TM?13[J;LH'1>6 +M2B]D-^EOKRYH?OO%`YG`39HDX>::-F6S2C?#E1(DF)CE/,*/PN_B=:&A=9]? +M0E[W0T^Z4+"AH%SJOGRE=SH:-UHB]CLZ3Q:>CGW>BHG2@H"A;I/N;H44GG:? +MH7:CHBTACV5!RD9>YT%$P\-.*`,"I:4O%(=$9-"A),%))3=XBTQ93D4G^)W* +M<5WBHW,I(8.7B7,&F')A/43N8<\3MX6!224Q.9@MTVL\6B>OW85'OFU@[9NW +M:>LEJ__59?_T'1T[KE'^K0>)TG7)\GJ/O//B7YE</Q/ISJY[=:+M.[KD):G^ +M%[[KS_+KD]A_`7\T\?)Y('/3SKX'/8DI.]*TM*S3E1-U(O74;7N-,(I4?'C4 +M@13_Y>YJ![3HY%QI7A[S"G>"??*'OO:[_U/YMJG_%%0>%AWJ>Y8_8^&H47;9 +M;3_M[O_NC/?>1Y4K2^/FOZ>$=ZYY:T%$Y4B(FR0W?B)[U;%UZ'^'Y=XNZZ^% +MT>*#)ZQZ\-.7KB?B?KX\?L7N>[JYEZLX^T<\\QGH^!VH)!=(LHW,,V2[(2!? +MC'KLM'9;'R&=+V8^/S$C'+LS&9>-79O'R./RQ0;+1D>6;QY@W,X^,&,Q(1Q: +M+)YE=%Q>/99TLN+QT6>DR,<R+/9HY1CLR6CR>82CR]F=+W%*A25'1D:7=N<J +M<@9<Y!R&3CRA>8.)8_-E,D>;KG"SI:,L_F\SDRB!>A"4,R>1C"D0I(RZXM'F +M,F4%*42H*7N*DB$&R10R1*0XZ0.@A1N+*4,N6DR>>CCJ'ELQFB]2C./CI&10 +M%&3\W0R*9@Z9%WDK'Q9>^,S+*+*JI15=FBKV4YY=ED"@>74D$QG#4[(W7(4D +MQXT<=Q\BS.<"HD5$,O$YXI%71V<*7S)5%E,F0*9BJP4\FIBHX4HE5;#"#@^9 +MSV3*@Y5;*1XO,2!U4B[Q%LY"0CD4F"9Y>\9@J;F;@V`.$&6R;R&0CXS(R)Q2 +M].!0D(PJX2&2*A!:NS26F$3A2IE5$-63>3D8O+Y@HMDHS,HJ5.CQR8WBJM.V +MC)5?R*9UD<[ECTL69PE8`G-11[,1KB@9P:1RI3+(%$\B4;CF15:71<=&QC*, +M3)N0S&9*#%Z9>.S>/;54\U/M4;"6K>+C\SGFT"D7`_1AG)3)1CX[+LFT)9LR +MU.'1MF4UE0LI]<4W.,)B)08M@EL&RAT=('1XH>@+D6VDC\]F&VHORZ4JZ*M) +M7YXM#.XYE2BKY%N59:W<J&Y:0*`QRE?IP:0S.8R)T(1V4NP(U;*NR$86 +M>9YF.I0ZYP6*I.6C!4U.6O6)*$E3R]Y<S.XN+-5JBR$M.Q1/.,DSV5+,N6`2 +MR39"I7FGVYLLF-S&;;6>&*K/+-K/L,*9HLB1-.)P3,@X+5CLF7LR2%N64$=Y +MK.,CS)$6VAD6]XA-[<JCWORS`,:,%-<BXN%'40L!XJ\F"RH)%QF7SI4;S,:B +MU=$J5VYLLUE3/KN!X:U+Q<>*FQ57*0,L6$+2E0.>,@J<Z45C(T]AZ/*4<D +MM@VE@V,G!(9$T.YLM-'0I:T6)&5CH^2<`/,1YE4*@V2*JJXS^3?#";SF5-LF +MVNV9<WZFKB`XLM2&$>*66X7*ILA&%+J(U<469*"7;(%IRP"8YEA#`UVQ\?35 +M9REL!93F%%'+"U"W]Q<VC\]:Z4@79[,'#L09LK?506XM*V;'%G4WSJ7CD)O7 +M&=.D#VBBCZK[ZAZS-+'BUMH%GFI&C2]M*!N(I5X%!F-:ZCHU$YEXQ%M6)4+1 +MH`E-/<Y?,%<WS1;Q:-3L$E)1F8TK6OEJ9B8Y$PYD6IUO3A=AXZV6M.*BWE#+ +MFLQ-K(3W\*DUELF4.,_0<+;B@V]N7"*Z"5S,JHKLBI>H2)89<@XCF4;KU]99 +MO4FXS'Q[=&X6*EDHZ/D'&I;'9Z$<5;S#)2P0V,J02FRT@W7H/F)PR%@&S,W= +MN(S,K<68AQ0MPC-HNCCVO&R>BG"WN>[OI8H+0,M@O,9D]L<SMN;R9;6I:\\- +MGG"QIFW"*NL@`N`9DVYU"(I2\8SS;::*SA2-&LG$Y-*7FBF`,QQ0')X\Z8W< +MM0T(VE\H?CX]F5Z.[7B)B[39X-=>HF]W>\1<)9[3:U92R3:AHO_0ILQX2J?> +MYMLVZ(^6LZP5GZ4"6E'14GNM*T;G2I%<Z5*K<CYQ=?_R?^<O^2"D_IQ_QK)- +MH6<"!@*]I6!,.:[BO2Y2G=#<>;?%U(MCKO/=1@O^Y=(#S=2R>3+H(91+ZU.^ +MHB"B?2)EG5LG3C50_JH3T^5SNY,P/F$7,;Y^9B@MSUA9KW[PE[)XDU/F"7J? +MSJ%\EXJ@3#X*>G?_'_Z;`?YY3\FG>>'UDNA7ZRIQ`EI?_8G/_C'Z=29_I623 +MG2@QY.GZPBB7?_]OQ#UY/^7I[_^)#E7_\Z.2[+B?ZBGNY.^"?G_WH/M[6NHV +MD45&*-W:KW42W]I-Z).?PRXG^(G7T\-MK;Q8^2RNEJ/1X=GR,F^?CP(3'ZE[ +MZ>^M6.U3SU;QNO2Q7?GOYH/U=66<Q\I=-WMXF+EMCAKM[D_X/>AM=&:#+9#3 +M_';-Y<*]\V&]*H]7Y*S#;O:17V0%9^KMN<9J=W=>;6>+8['S.F_2N1T65D<Y +M\U==.U?O8W%]V.,X=HTWFW7W,#Z</NW+Q.OB^+_O5?L_0?YLO_53L5/]WZ<J +M79J'\/O;8]RG]Q[[KUWGGOT[P,)]SH5]'1K^^\]QC./WZ5?JP/W6+FPO%NV\ +MP&ZPFYPWLXC:1VSR6OR^NS&M\W4YR3STGYVET.CT>ATOG2>:U4C+9?7Y;89# +MTL454M[Y7`O/!AIBZ<>Y\BX<J$^F#F;'T*[TZM^I,?200C3[TO$MZ3X/^T,O +M_YGRTI/_K'=8UGQ1$EV7>(E6'RZUR71$G,,G*CF2S/)=^02*.%ZQIZCK_7-\ +ML:U#&DG[\D>B[$!@%Q!^`*\-]8+D&^8%S#<<%T#<`%@&]\%U#?X!=@WK`NX; +MT@:<&UX+P&U0+R&TH+T&SP+V&S(-/#90%B&QP+X&Q`+Z&P0-0#7P&HAKN#4@ +MUP!?@T(#4PUC!J@:N`OX:K`U4-4`:L&>`:N&<@8`-XM8!6`W\@UD-^X-:#=8 +M&!#?@#6PWU@UP-\P-=#<<&O!N`#7PWO@V`-_@&PAO6!@@WI`V(-KP;&&U0-D +M#:4&RAL\#9@V9!LX;*`V@-C@8,-B`;2&P0,(&O@-J#7<&UAK@#"AH0&V!K&# +M;0U<!MP:K`V\-4`;@&>`;B&<@;D&\4L!<PW\@W0-^X-U#=8&&#?@#=@WU@W< +M-\P-X#<<&\AN`##AO?!\H-_@&]!O6!B`WI`WL-KP;X&U0-]#:4&)#9X&_!LR +M#?PV4!\L2:)?:>U>Y3ZL9$2G6B)+KSN`PD3+,/BUR]=$2SW=4=+GK"Q'J-^S +M.J*+]Z7-W:38%BKE`\\?I;YYD_%BU>5J@J=1S3&M:,T4SD*=3!^!$0M\!L5% +M$<:B<RFJ=+TF[K$+^5$?51,JD8@0HR[C&0*,WE8/G1_1W._&&US.U114@N=0 +M,$E"I3]&3V46N?Q:M(J,K@)O%119[E,*\8(7XOD9"SE'M,N/^%E+)9H]YR?V +M-68+BC$,MQ1!EZ:#HE_6<SRX>;N7F%GFF.RA-I6'-.P\Z;K,I3R4ZQ^)=<L8 +MS>C`*\&2+,KVL]BF;LCOG,`TFQLX><8-H'8V4ZL#FVB8\0ICE4I3H%-/+F]U +M@3J\8XR6@GES*%3`GP].8)MW'9V!04TTPSIQDS[B4Y44R:7XGE_8RAIB7G%\ +MN4>[*3T7YFRE[8S!0^8G',HO-_+R%%VA@2KKSR](KF%_;],4DE#^8N9VB<K! +M,=F(V<1+5*3:L,7\<TW*.4D9?32+C#\_/_B7KS^Q:<.BGYAU6M#'60B]9W6] +MCK:Z,F:44Q=<&<KTK%=>4F>--.2^97S!9_KM6"3$E-P:\W>M9I:-"\B;?H>4 +ML7IWI,%(A5/G&;6ELS/&M@P8">3(\4HKS@OEE915<,F>YL/-B\VE5`\X\;XV +M^&(7"2T!5*SCX5IY6#:`Z%7$8T,&LIS3,M@"GDJSE-W9EKX61?NS$8_ZXB6> +MMDAIL4!\THY*"_USD@HQJ+--%"2NX%_Q4>)@OR5*2V*^.9!4=LK#.Z'BXJ>0 +MU0[F%?+7@6QS6BU*H.E*U<=<'K@=<'T3N-L#"$XP0FC5Q:!E"T/%.,S?9P1? +M@IKH"@=`8Q'[#2?!,UTHDJ%M;',:4S.E?-=@'1RTE2F6OTT69+/%_76DQYAD +MQ7E_V!+AC_*?"];L^2K`V$O,E]6+;U\O6I%4TP5?C$GZ6AN6$.FS#V#T*@+Z +M(,M%30O+FL)E/=J"*ITWJRV.5$=TG9FD(?PX(RNEZ;W#"-EC4I;)`1,I)R`B +M6S@&F:8@6-BA]&7]OTNE%;=+%[Q*.F$LM,I,YI+03JU9I.(,)E6GER<&;J;# +M=%DVL"#/22T.99Y.W'-,M)X!!PDX9';LH,&5DTT3/5W%X="CH)__EJ5$22"^ +MN9O<1RV%R]-&Z"SF&_^-8>46/WVBW-DWTL&<58?D:66=8=;;.7DESE-!/2C/ +MO&K?,'\!(LGO%D;\XQBVP!E6$<8IR4PO+28HY<+WR>V08\T?H52)$@(6HKI. +MS.JM+E-[7D-*?Q]85!.9JU$4XNK!38<PM_2<RJ1)H.AK4/R")9A^^ZH0,9P. +M`P;*`0#*`0"```$"44_VQP+,8`#Q=5S;[#5T5P(+"_W#``3@Z0CM@P)S="<U +M@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV92]B +M:6XO8G-D8V%T7W1E<W0*`Q.H!*M;#]\Z`$)Y/BM@`)@Q7.O*2>Y7`A,+O+`` +M!.BH%NV#`EV.>OB`%0$W:&]M92]A;G1E:R]T96UP+V)U:6QD+W5N<F%R-2]L +M:6)A<F-H:79E+V)I;B]B<V1T87)?=&5S=`H#$ZH$JUO1=0(WBT=1)@,%!`$` +/```````````````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu new file mode 100644 index 000000000000..3b47dd07c873 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu @@ -0,0 +1,345 @@ +begin 644 rar5_multiarchive.part04.rar +M4F%R(1H'`0`\BMS_#0$%"`,#!P$![_:`@``H3"7!5P(;"X'V``3HJ!;M@P)= +M?Y*E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV +M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-U,K[HY2T0OI6D^@"4>G(I3D +M`9Y>SLE*@FY3()J9CZ9H]135C#!LX_%%;@$Q]1.>O0"*TG\?)*[*O-]:/!UZ +M]=OCP(J$T?IK7F_MKZI@GT18J&S6T1;4M8'/-+/&G9%NT&'*/0H+V0%N6P]K +M:(K#*"9:50P)X+.9Z5"\@Z/)=DRK:">*-6"5/!SKX$^;`TRG&X!L4CQ%Z,%" +M[&.DWNL(EGRX1*7:V>9UT$/\__W4$2"GQ-EGQ6#GQ2W3X@X:3$L_IT<,?HB( +MF>S*57Y+TB0RI#RV'F@'_)6%\X\P6FCP2D5,7^HLE^NYL/&4>0W.I8HS:'?5 +M`%O.6%'*%=8878XDM=ON1ICENA?6Y)J7JRB;]G0E'+R=1\"G:YE(J=+@=IN) +ME(>:E8KO*X/WJ8DUZ[.KF=G+<+S<JI`$.E'LRXN:BFCB;IC#73LZXF,N#;FW +M$N&[9L\O"=PJ2R<PS=M\=19RTN)MOPV1>+'-:)MLO!FIM,J4TET2_M^F:8/- +MQ+2,WA!S[%HC#S90@QZFAF]RG,3/OXZUQ6MF7!67XW[%)%7<H3.HL7\(@(Y0 +M;HGO)B8Z($R-;(7T#XXJ451C)^S*U%`U-OF.3Q"'17&3%<N2Z./0W0V$Q+!. +M*EYL5$V4AF>E<H?LW[*\P"Z/A<*NC`AFG;>5>9%/"A'"B8H')E<C_.B>0%[* +MK=C_*<\YLLZ`Z,=,ZE9,B<,5I*:T1\(/-RA<+M0*H25'IA>C#?U\OO/BYFR& +M3):93#/&FG4M&[)('EH@4HW6G3/_2*:@&Y>3.[TQ^.8-6X4,XYBA4!CZ^-UG +M72=:88I4[CMQ%30R'[VDT'>HS)6QU'<I`L)QJA7/-K2__QDG4`W/R:EU`NAH +M0#@T,RQEGYUS<5..W-L69S'"C&,V^H,LY84^D";);(HGQ=FG8)Z-4^6R4>J+ +M%J6<\``6Q2SF)2*X4I?M\WXH`V,N/ENXKF%E<([__PZL5DM`5:F=3-/^V*]C +M+9!%URW3M3CCLI+BV<`7%EQ4PFRVC`+"_*2YIW96@_SFW<!V9/DYB#=7AE9R +M![97&<B3%&]BLY(FFK>+8T"Q"U^`JHM<#%.M9JLT@T.;?RM;0KD]*MH'4VL_ +M^8J=03WN+&3M![^BY^^W4YHN[*GF!BP,^7-XHL;9/(/()FV%2A99;'3=LW=R +MX?I'G4Q:'3;XF/&[YLPS(-R/7I`%<2AS)]-2>8*ER5Z#9=V^=ZY8("\HJG(L +M12K)%.B]$0J_%J5AU,@M:2Q4BYE$V6>T7HF(RX7Z2"YV=4V3IPS.OYXSB*7[ +MQ4TQ^`VXTHW-6GJ:N[C9V:;E&?7/%4)B9+<.<Q(JD177.<6E>B!S&5?/%Q90 +M1\\2RK;0<Q%&F%;HN6(DYA2Y!\[(B#09)F59H*+37HR@WAYE2IA&AH3"SN+& +MCGBGV@T#J;+WEE%*;^?,QL^BU%?P-`(:SO,:CA#2UR6B^$1<GM6L[!M9N5\- +M%H/4-L_V--DB0_-T['`F@F2V`=&@FI4Z:EN)SV#*!*@2G-2*X;2%I36J%@!] +M`M;0:,4HA:IM9_M"IT,*@DF6R;'!?:VTW_SX!_!Y,[))M<HXG64[]6;3<,B< +M`(3P86+IG`EZW4#=&!#4(V@R*)I.NHCTM6O#*9_532.4(V>L?[M0*Y'*@<N' +MG3S/8P^51`B1H9B^9.U#=MHARH><@3!\\(D,HA?)E<RA#(W.I3Q=#(1H9\R? +M3#[\I.<9";KS:3C;N.R=#$6+I81-&Q+\S*1:=![MHK_T34S!@3Z;F8=GF.;M +MH8H);RZ8%J+B>[55.7-TXHW#N:^]4&L8JHQ&<BJ:564A^R71SZUH2V!^SH=$ +MEV1'YR8J:+7Y;<65B=/HOF]@:'OIF\-G7PU8)H4K'2P=$LTC7`-VHF%?BWR6 +M\3T_DSMF^-UG2F3GG3EP?RG65B0_19470=?3;D88BGQ..U'MD/FQY92PV[($ +ME,4(B?E3GF*F)5F@VM;`^HTPWAWP[Q[^B$_"2=+-XJ1EZFWQ-?Y++/AY,\!H +M'R&S4`U2B#+]05-J4LOE1$D/`X;&D[XV%@B-(4?1U8^4;+U&06_&BLSJF2>U +MA829I>\3(&Z'SS:E]]%9-$462;H6<">D<;:U,UA%9%J2OYHK(*8"ZJ/&%;%2 +M<$[<\Y6$]2<G4//6XHV?6ZIM>UU5DM=^^S/WIU\[Y2%[B#.1E)AE%?VRKOY; +MM*)Y9#@R3C5]-G8[QO[:QZ3LS*,^;$`2F]O)\X!LC9U1NQ'TKLD4<K)H"%BQ +M2VRQJ<^<33B4/7[+S5UW480297>K1I--KP-F[,C]C],P=,Y.7.(JOP)SM-%2 +MBTHNH0#L.\6E%2S%`+**!+0O=3(LW9<(?0CL`>=DN&?HN9UAJ#(*7SBLXS4- +MW`+]);1%S1\L?+XYB'AD)3LD^DL@HRTG.@(T6DQL[.`$-@0F`[]<G]5BM7OI +M5-$S=T!@7!G!G\"X7=Z''2=F801N&;1L93>X1&C;Q%'2E=2*,F$!!*IS\11D +MVN0!YV5WJT::+#:0>DY?"O-RYJY/&D3.#V8'<@\>ON`=Q',\`/)\`C?(Z2V\ +M`<&"(`B80'D8LP@3EH7FZ-L<GFDPW>)TF[%IL&2X9P,N9$-)/,49EP:S;$PT +M>2I6JU`D4$V'18=K,B#LD")7)T4_U'=W;'42GCHH1793?@:NH4R$=("50'7% +M$MG'%0$_:N9VDLCI"()P2-O1E>)3(YMFQEI:=GUJ1+;K)W['.\U&W)>0*TK+ +M+*ARN$Z#1#""0V6YCU)GM*>;HFZVMO%:*-%?[]CC^QIG=99)M->L(A7::TT# +M^-"/E\F<M<+,AWUP^9;N?J,LK,4K@FRYEJ%^G0+7WX>=1@;K8LNI$SW1Z`>G +M8^AF;-`EW':(V9R?<L&(GDYHKH*>)E;7K8?LJ7YYW(3;KO,L[4833$4]P&6N +MVU,Y$08,`H]2@\WY-*RI1IP'!U93!4E5PE#;A-H;&7O<DM(:4;HQOYD1.>CY +M@.>WZV-=.7`Q`BA50:F4DTU*F+C'J598VI\X8*+F2C/D@;Y+>2L5R3DQLJQW +M@'?SX[%$F8@BYV?'K!YQ!3WRN<FZ(QT9*8AG&L-.=+KF=-UD](J#=(^\:=)` +M&?&U\I31-T5OIXR>:12FWK>_HU6U\B*0(R.CT7"CS0P;"HSD&G2KKD\,[FH` +MW)[9PAY2>G1&H:ZJ(.4NH'EV*>GDR7?)MK.+UE`SK:5*.DF8B3"&ARS]['G$ +MY)XK*W^<2Q5[T.`$L]\X.>+!B-%3/9H$C/U;XE9RS&#?TSPY*!/^V[%@RWG. +MI0(:#4RC/3-,;+.(V>F0;L!Q-C!<7?,'&3=9D$O39A;4&5BM,8QZE:\RF2Y: +M'VY7H-9GECO%Z]E!3Z*,Z-<E`DJWF(,GG&N`5QF>'IV+-H4(9O`3<)WWB\[4 +ME-FTE3[50;@(AMN"9]-#<(>:/HPS'3?.N1H:)^`XM7VIA&J4Q,K?E4/*AGZ9 +MUPKW;&N3`D\'%:VAN2:Y^,2$MJLM`]?:%%%C#P#Z<D<(]M)S_L*][!C)N0>5 +M#^@H@T/S)R[I\*9>V3RUE/#-V!+:)T>@*%,WP_8BQ&9HNY7J=^I*1S=W,2BM +MN@GHSE&9]TK("FACIOE0S_<E?#XIMO+F]7@CM`F0)D;;C.#^8]^0JJ]T6)I6 +MC/^*L6,?U_'1#R<C)_OEZ<M$,\T"0NJJ\QP5/_*E4/8O&?3M,K"A,-6R%73Z +MERQ#"HRF%MY\)K6KJ9IGQ,P/0?F`MFIX15,H*FQNEJ7EKEU,G).AG*I+J,1* +M`W&'W+'2W0VC7+Y=5UTL[-)4%$DU>RKU-,-9.A1;9KVT;S/UJ,<0+N*#DUM0 +M5B$DQ):#9KF=K+\[4^Z#JN!MSC<RVQG20L@?P^I1`\ON:%U5.R0\(BF:(\:. +MJ9I;%U\A4VV,2U@U?!X6.F:)![X+,5;&<;ILLC>39LF7\7-EQAT`*1&DY)K@ +MG$XM;JXBW7QTR[QRQS.,R7HM>-D<X_'O3X'3HIZ\R1;)D/63T1KD;O(EX0"5 +M&(C9TM8TGD[$79PBX[-</3`4[K4#:Z87Y_C$&<+QV<A9*DPOI@N'MMHS7M,8 +M;?2=G&KSYHW?40/PT0C<T26WHAQ0!$P@/(TMLIE.?3&D4$27/)2DG\]()+AG +M^5Q]&(.`2N]6D5HL9F1ZS.C6Y_G;^.,QKZ;;DZ>#S1Z3A<,_LNBF*EX2%$6_ +MCLZL::45W&DRGDXV'^WEL3;"^8,FFS*,E4#4:);E-[<W@+5Q3U?(,A_Z!R9C +MV\P?(IQ;>W48-KHQ$%1I0-&D7B/]Y*5]2;B;S@ZH@2E9.W4QH\\$&:*\T8)_ +MDB.`2N]6D5HN+Y"NWL1NF)ACQ$(G)3V.95XOQEF502C&=A1@+3Z3#.>4>&"I +MV6^(Y:)!W+;*4<1Q6!A=\@;FHV);#E\^"`7@[4T`7EG8*C%,2>`4E:/AG(&. +M4U%DZ(EUKPN"S_PN:I>]'P]J=L=/I)3;Q$6]"#Y]_5FYA>,L=9X#F12?LC2" +MD#C%2Q!KB4],XI5FTEV7?`WXH2UU=;X9`;27)?*5:*IIQMQDS5X&PU"%A-WG +M7-EE"GN60RCAD\J/>G#2_,"(.0+W*>&[*/'86E4,@?][3@*7V_,NVG]%OL4& +M1#*+KMOR[UJN*@Q[&_SZ1#`:7LUMXTO"NR$7/D\:7(7^ZAN.'\&.'N77A5P5 +M&(1;)/:6EH:E;7%Y5U8@G*W#8SR",;17R_6<A9C%'MDX8%F_2J.ZXFY&VI"< +MB97AM#*RV*0YO;J,%:=[LL<ARV7\?;P_Y+BV6'\&6_\^HA#=\4(J:>6@M[8W +MB_%V"(\ZAO],-Y:W%57RQ/W_&+66X^@_^$MB-?&+K[B'@"KOA!%44B0W&3@U +MJ\7\8X:(5<MAJ97F]A[W'C['_GURLKK2RD)J%[>5'IV-QJB83M;+BW]=S+_$ +MM_CBAEA\4D=UA<QU)I;4NT;$8E./*G>(M_'92/C#%5ALF*'R0E2RHHV%H]*[ +MBO^]<?__:M-5!L;KHQZ5;(CUJVK'\WXY,>'IY,>6OI*D_97.1^;VGR5%2"=Z +M(0N'*I!/XV@PG<;5X17AIW$+2*13N2'KP98Z^1%$UJUVX#PLHR[:D=+URF'Q +M1-RTM,+$6X%E7J<"NH$;LA!'I2C$$#G;EXQ'<J/4NGJRVR4-1R8IK<NR.B1= +ML?F%6*[K!)Y);^W5!_:R.\'JUN3JQY]3=962F<C]\;>^?.5QPVE3W\C_T,HJ +M3$ZX;64?AL4VHO9^+=PC=.8,16#["`VJMY\F8VTQM>MCR(_14T,0F)J\RD/S +MXDO7F-_(BS,SSC`NL&%J3W"\04/X_$NQW^N<F9Z`R5%'^\4*[R[.N.AR[W(# +MUW<N9A\T;11FQ>F4,XDK0CP+X@H70<,$V%0W)-F.FDC=Y9//*C=0;-3P+:XG +M*<68Y\1LVOCHY6`%T-J4^DP&]`V\897I86G%$%P^><KZR80\`L)-)CM=ZCHS +MUI?+3.DR.%3#;QZ75GW0X_D[I^2&+E'^,44WH&S)?D(ZE=FEZ,0(Q\<W:>1, +MIS^*%?[N@#N#^3;R&GY\"=]]8D9$3%%&CE-A<6-%YH+?1H^)\:^$X.-I&'G4 +M>1N(1%6X(7TSXQ(^48AWHTESC?&ESO#N,FBV(%8=\-&2HTB\G*?"]*R:8?!% +M2-)=Q"<:V\;%;?=OXVN0BY`YTUR(<`E=ZM\6E:&P1@]4&9JBM0">4]"&/.*I +M`_)'IMR`^)FQ<(1GA)6_%6+@<[P8/\_8VG)*XKS(CP?O$<;Q.QY/&GBI-8N. +M3$RKH,#XKY!G*RQRY_:'#X".6V4,X,8X1:P"6N0\-UCO[?#7]`#<J9YNJLXY +M86*2W>6"4IP$[F<1<;AS'+6Q0IT8G0N8MX">_>12?L</SS.3EN"RD+B+\@[Z +M-J%O1F&P_>0^V:#TUC1MQ@Y$8/B+KG/D$U;.""Q<83Y.R/T*2SV/B/MN7F&O +M)X?LEQ-I=M\*;]!-EZ0\PM8*WZ43\V-'P3D8<MLAIF/E]D?%_8P@*UWG_FNX +M^O%CUJ^S\=5V>K&U.)6Q(]9R/*TF2YD,7A=:A<<AB&'R:4>S%5U'R;76SP+. +M5/PCTUS>B5/3CPCT+-EC\TW-X,\?T`_9V77I7T%C]+65&EXRH8FHX,O',ZJI +MW.0.:9H+3F"YM1*,6%[',JF)Q[(:C5?1(J+Q+6XP3S,00&2,IM]`V`>1I!90 +M%[U8!<.7:C.+%#]0!-[&+,Q9J0HD64-4"QV+:1M0%"I0PTJQ\[02^3R/A%%3 +MQI4NV/D&\7!;GQ6_Q#X^&^I#7548A?8,XESQCGKF576`$(-C.6K*:\-JL''& +M]4XH+RTH_%C)MZ\WSF>;?K@8!XF#3IXD%\RYY9E>EH6S8QPX.I.H:M#]%&&* +MP"\["K?QV.O;3PO"PZ7=Q2C3$9!M'%F>]BVZI?HFB-HU"I0AX&C9S<265VS! +M-[+>8ED_N`7<I>)BDRSZ(.3RJ-;5+AAWU-'D;=GV*?Z:#DFE:^9438J760W< +M?B2?1I5PG08H1CPK8L3R'Z)]@O:D8O%&R$OH<>64\3/M.S6N]Q%*+&HK[]D# +M46"RCD97L(D7HPP1U;+VNRBQ90+XL2'40-R#N0A4X50;&`YYY;K&5;Q8C+A8 +M3$C>G>,3:&$/($`%74L!BDO-2H\0.#R'>:89U./]--G/++E4,"UJW9<]K*LS +M+Y4K0RXB5G9?!-O44=/WQ2:*P0_I(9C\99?QS$E-.Y7--8H66.R;&28A#@VB +M2M&($EEWW%-['3\:G\<G2K0+AB@5X%DQ0B\X))CB0I-+B8<6:OK%X.?3/CT$ +MJP_C8.9LSL\EDS8'8E3>=H_>:42)DT@QYWQC7=CW'N_/G#BHKN33/$]I,]7@ +M%\UIY<+MJ0EFI3$@)Y.RQF2S.HGG[1'%?>">P6W0K$;O64ZXP`J"88#%J)+@ +M!#.U<MA=P$78S#D7A/T)E?<2MA\&"'@8K`R4'JBTD,1I>&SPT^CCTM>)Z&O# +M?3KQ,QKQJTI<_$#AM!K9)-?0T$FF4+:,9L:?IJ[@&S$*"IJAQOXU$`*5JPRJ +M.P@;87<3>AQ>QIV6K-1ZX3W-<-7Q4D/`X_/KA/*UP;B#6\#+QKFX<<)4:DP^ +M@&LP&WUV$RPXWP:O(>Y#5G#9@:\L<:<-.8>?EQ/:EQJP)/HX\R7$\>7#<`:W +M0;IPPG[,,.&H&M(D;#CM_J)%AZ9AU2^1NV_7*[8\>VB6"0RIPAG%*6S3!%*X +MSV;Z]:["[.IZK;=O7.*177+>94IC$2^/+-H44&ZY\71UVHF3@1)ZHEG#`988 +M^3]ZCHZ;0Z1@0%`^(\DA:@/`IE=]`.B4U#-\(3R6YBM?1%*/%^"B*,9K;MPC +M^>ES\V"6>LR\Y>E.(1X-3"/7Z>1@Y4QP]''^[1T:HEG:DMCEJFM%$]GN)T<? +M+>4>,[=%&)O;?2!9DLG6_6,T>.V3R'!D'E&J^MC"&U=.BGZWYEF&,\Q5TY`W +MA$UHF]69)Y5<:9^<09[AEYC?CE%S=>>1_F"/I>%P/\X(90AB%>M@GB&V:$YP +MVN"3\`=GH@&*/SZVF4]/%DG'@_"*>EA%O!]BZG?H/U5]-Y0*X1U1]YU1KJBW +M5%>J%U4NJEU165811;G>2GG+0U=6D/D+XI;J#RM$5G6!2DZ\;ME4?)BR=%J: +MVA;;UL1DNHT.]QO4_[-B.S,5WPD;7J"NWZ@IN>H(.&D&-Z@Y-9F6A7V^K?%G +M-'U*,$_13RS'C;D%.B,Z0:"KQS$'>(F.5*?<4</J.^?ZE&`?Y7,K6V-HY +M6DLK16TR3741Q$1K`#D]2FB6I$7%J!RVR6%[SA^HT$KLD`4JF7"Z!/*?RW>0 +M_2YZ%01MZ.W00S:JEO'DJ6EG));ZJ@/':TZ-KZDCN=+F52;0!#ISY3)9\<\D +MWQ@CYER%VF"I3PO:K*ZZ/I<$*'2\^TS''YIJQ_=)CJ(I9H#2OHQF,P0JKX5P +MUL5PSH(YCAY:J7#G<:Z@RQZ1/QZ(J;5L),KY\Y]5HK+>VSR'=:+H0_N8%MBL +M<,X"WQ6^S@1&->5P/GWX95#=-FG,_D,*PN\1<A12GC/X(`V?_BG-5%^`ZH*\ +M+Z@"OF]KE.<$OC[R:MPK'`MJ<S8'8Y;D1BS716&[@.:91P@J4Z<(XA*J!)?3 +M/&R/*3]E6P,E-74I&F3EG!^Z:!MSY]&PZE5B9$:Q[7JCYA2Y5K0ORWMQNB;+ +MBEJR[[,`(SP61B1*8RII7Q2756^9IHG[,+SDJH-J55<_J&N@&$*CX\(1ZA\) +M$JCYXT\^'LNS<^I"]Q1M9+]TS$E[5C.R7#]G?^6(TH5^OO]I24>I!6U('<V= +M6E=DFD/0E.6.<L/VJH%J4O<O@^`KH;8CG]E&=;L*$U2GCK%TF_&`S^5W)DLF +MII;W3CI+^.SSGD8)LC<1QNE_'=A>17HC;U[\+]$<?3OPC;!1%[#=$+_)(4@# +MNU^<(8)?#K)8\A1M*:!ML8"WG9PRJ)C'F;\V1M;686.:O&>9QIP<3(H?I1L] +M8W-Y4<04[O(U"S#7B1A-J:\\G:Y&I/G<R-O\-ZI.,KQY9_92GCLC4C%;U1&\ +M2X!WI,&Q@J%GD?;3QI3)Z12G\7VZ$NM]MDRC.;E6%MMYL0[1LG4L:6V3F1-[ +M;ZIQ<>%KRPF9QV-(M]V6.9\(['V'Q6YR09HG!D%J.)LW\WI&XXSB$GP##M2% +MA,`+RXQQ0"^S>MB%\YN[EP]`=BF4+Z\1:^Q3NQ$)^SOM#$MU#]@1LXJW4'Q` +MO3D9*>OJ"Z1;%4"'P_N\M;Y+H427Z304#&PI9J6B.6PWI@H_YP-';EZ/)&Z3 +M$>8DS?9P*SV7K(%Q0\IP]KVSXN^7[;AQ/EA^UM**2DGN#419?5$;E+F@%;6Q +MTQ?ZTE,FM_E9-!&<?<:15#JUI-;`J3DF!H3^W#2=0]GMH>&\<3?G@QOW[^*( +MA('4XPAQ/M>D+[IX<ML&>1E:[*8W]2V'(NR0"RT+,7^F>>U>.0J[#)L:*F2/ +M3I2$LI1:H(F6'NF0#QQ;_2T#)4KTH),7UP23QP][(@SG"BQR<Z;HIQ0^CB#. +M,/BS09>E@410SLV89B3<S5*Y(W3?]I/1./R0TFY7D#,:P$OD0C"\G"C4W6"K +M`*K:'ZOIDG+PJ%#UM^:=S4NQ2XKJB8P9J)K[J>D]T9W5'R:'UY%>_6LX+H7Z +M0-Y;#U=,BP6VCIC7!"JQS">"BKP+>[:Q3MQ(\&'OF"K(>QI*<;QR3O`!O;^4 +MF@0W(]_OLQX$IN)A4/O'L;Y"UA&COF6W!F[B+QA%V`1E7SY1_Q6I(TG,K&`, +M'L1A+N-,L'XXGW$`S;D0F9^^K=.]4?^11?N*^.*4[94)%_8W<-KDL]E?5L`, +MV$6OH'SX!$N8#]Q*=2J<2&@@^$2SB6Y2WB722GDH&_!JZ)4N*+B#2S"NG9$0 +M!T_73?AB6Q9S1^95@;*/V\LG/\!5X5LW7U'G79NO1&9H]OM;F#T>9C38$VN+ +ML9A2KP;2?W)_5@\G$C*PTG(ITT3TR1P*"-/?)&4'&UI'X^SPU?/=4;O`IJ'9 +MH8%JN*]NA=GHI9[HSZ(05G$+`7FE/)KS^>_,9.^L&OD@"-Z"XY\W/8B[J=@* +M,_MX`]*?1:[+@O(!AJ$L+RVG/-(NQ>#)Z>*^B&)`(87,SE66>QG%!R93T#ZF +M*$WG73+F%]C\MK`;3<!TH;X)JUX'E$N@^NU]L#4HE^?O@Z7X:REW'EZCF/KN +MM"CH7<?/N/H2)TVY]['3S[V)^"[#RG'(?760>$(-5@=>K$":"&'E;1]>RM8I +M#S/`=T:(;I8@5D\HO3ISY`=L=!NMM'1Y55."'GD%X^NV]J%J43/3WH=,+>A+ +M*ZCRWJX?7=F$#&QE19GF^4!+7-SO2VY95W8ZKMT^68A`#W7JL;.7G'PO^>TG +MA)V24S^'1I3SXM9YQ^IM!<[YXCHM>_&Z\`P^U]+7\Q]&)3AW+^#@^]@_X;_2 +MT_+DX@TX=)2R8D:P"6$&8AIC;K)4NELQEPC:R>Y-0GS;QY#;&A3FDXWWC:=$ +M<3A&F(,$V;9D]&B2GT+VY((D-2$W:Z!_`7\`FO3JO8PGX/]4..$KLE"YJ1!\ +M]WM2\$QO:A^/PA^GK>W%,ZR,IH(A%Y4[6)0[:"SR*5?)(FUZP:TTPS]N53`L +M?,M3FHR#4M38QTS!>XLRE.0H!JS*_HE:.Y-R=:NF&'/5B'#CWD<6XQ2V&7N- +M72]J"RSTL/OX&L'2G.F_GP=*IT6S1+;E:V8_AN6"I@*58M:#63SI+92`N5X_ +MC-I%FK`-%QOK^:8?E@')R!ASL:+C(6%T;`A^`[MX%IS$&G.L-*`OU#:U@<8; +M;Q*GC##UP%.\P%Z38)EWZCUK"Y+DV^:MLHL&:8\Y:3MFAE>S38S$EJ9*OC,P +MY*L,Q83Z"WGWDLJ-$.6A?EEJ`ICO@"X*WK"DPOIIXKRYK,+OV*YR3MY3LW&X +MH8QDW1R63A])EV3=:.3?5[#XF.G[$]5-/*1[>%D\,>>*B&<&9+AGF)!D]IR, +MR4SRBY4>/Z>L?%;=!Q6<Q:R`27Q!PKWU^L!E[V2"U+0N<N[=F7ED!KOEN$IR +M`II1LXB<8>8@@(.<JA+Y*;C9*>J#'4%]`%2DPI]4;%"8XKH!LK47Z'-PYI97 +ME:.:Y;#\*^BL<["B]W.%#'M!FE&$,S<U)HJ]GJ?9Z`JD^]7T?2*GLFD3D>L# +M?\'[\44`U0,P!I`;ZJ-W88D6M%E`8,F&$+7UC%]'=AZ+6Z,9.X%\:!6MH+-= +MA36L&$FR<R*=7.,!0J!.ZR+S+A2XUZM>'#"PPY:D*7%FLSR^,?5)93CHX$U] +MW\[LW@BJ=]<F"+YG(<M=:/]X3*)8Z1C611F&=(S,\J&=51Z48:N1/HR$F?HL +M6]S#[Q--&A,>JXD_85`HB:44?%(BE[PGQ;P:KBPBL*N<I\N3F`$-#1*4;WTB +MUNEOU.V$I2(X3?RN*]M`4"P#;Z+6QI`K@"#">-3K4CS-T/O=LQVT_"'[^7"[ +M\2!3S5G"1'3D'"Z.;+Y!?R%2"K=0%2]UB+F;`:9HSC6GK@4$'\5T'"6X:"/* +M[U%\WLD13I.:/.279=R[PL:8P)O.')T+IW2EM.RDN2^*"[73J/<IXC808TSO +M.DX9RA^I<J'H3:6;U:V!+;*:"UUT'>2.TY?V*QRC?4P;#]:VC2;ZM\9VX[=" +M>I])1A\IJ3BE^VP)O%(T.?)70942)&)0T-T%%@@4NL@"I;G-$8T:`0<.Q(J: +MBZT@YC.1%BZW(X!?0@5=97-W>TJ->7=&W2I[G7;FHE<Y`F[;FX$B6%405"K_ +MO@M]2*#23Z/DK"XN&7M7UBY*:K)D&`PIO15IIR2X9_E=G8I4441SF7-N/J;8 +M%,9I)ZEN[EL0(_C+<]S3V/4[!,Y>)(^,*7IX9G9RNF411#@)]P#MW^3Z?4^R +M1\96725?SK1]0:\M-P),;N*$XS_O-D5=D[J7N[=%N[9?,6F'I()!>W[`$]>< +M\>IVY6]Q1W&A:G8+ES:ZYOKD,RJ%<.SC=7(4E4*4B@]T685.D!(W8OWZR,^\ +M+S0G>"_(`,D&F_H;>J)5J)[%YYIT6/W4OI]W]51/5G&6-\<#<X%Z<O'`6X`1 +MLD\0HP2M"JE:[#XBNVV]'8QU9MOF;%$66MI^XCI.6<NH5U@^&S9O"R>65*S5 +MQ\:^=+/W4-3\1^8G9IT[(GK.RI[+9S.EO#-66GNTU*^MRBS<\UXN4:?<-Y)8 +M>W'J6_>7<FSG5;#-'HD]SE5W-Z(V9^=/Q,L]F<GO9L)R]\(TD]T1Q+(B._[Y +MJY\AC41C$]CVND>(S<`ES+D/`F*@JBWS"I_0>\E-7MOY\)O[D(M29_A`=BKL +MN7'RHB?JZ6Z\>>_/RHDZP+.6[,HTZ?JTWM#:',:<,%@507U&U0%4OE+BHS*] +M!:*XJ)EXW>D3;PL5/]P"41VYUDLN$6:RFW,3TP5=2TXE&@W<;@/"R^0/:8(6 +MM;OHI>[<@$!E>"N1**<F&P*#F\H1M^SX'$@DPY[!WDNBFC0OT,^]8B+^#KQ^ +MNC&)NO>FGMH10?DW$1=#D:S!<HAC-<,;^A/X$38CTD&%[8.8UBPB&WJQZN2> +M]1U@TAMWUA-->/Q+@F/90&>:L;;;;9JM]^?#G%.=E.G%T"A0>!JFP4Y0L\(" +M'[P7`@A@EP+SJ137"I=2SY9@]J-NYSA=PN3<`*LR%(H6<@M.#>0M:<4K6H%( +M&EU:^4AB`L0"2TY<!RV(-\"KY"0F4+/AX<X'?0EY):I5@P8D+KV\3+/=QN!W +M`.%;P+\%\EOI1RC:6\0_'(V!"VP/U2S8GEG%DW0)LY<B@LD"PE$3[F<F>8%@ +M`3.,R]+\B!/[,1FX7G.2,35%IB[^"0FW@_(@2IA,WTE&?ZBI4Q8YT=VMO;/' +MO:`PF^""@Z8#ZPT=/S_8*BEJ@ZW-;>6OMY_$&XU-!=?;FVU3-GH\@%F@47*S +M]BS,)R86,MR?C[I<TOD$(+T0KS2J3Y)M`<$3Q[]N#_O;@O-2_>VBA4/L8+(+ +MZ;:))C)VX!F%\5M<*F7Q$5'/I;(X`PUYD,^_Z$XDB(?)B1SSG^6A?H1TN?+. +MN6*^I`KP3RZOSCK\U#/:"]E+=A_6$J('OB_^<O8MKJT4$O;;W.;`**:`$_N< +MYA\N,/I;F56S7$"Q`?X`>7)E]F3F_@WQWZ!]6@Z-$GBS/,+IM1^R(X'R7_L\ +MD_^/F;.M$<;]W-;A!W(_0W98BJK*?,6?DIB,.K^RFD:`J@@E`-2;%='EKVLW +M<4'G,^DU[S9L*4-[/(Y6F8''&@EIE!_^CYT_PEG$\RT1!TH3"T&IV*"<7063 +MDVG,=/[:-");RV8L%R__&[#3'_+-^/S5S:FOC3;D3'([\%BM;QR_!(F3S?D2 +M,WM)Y2Z++V;9!0+AN:)9G)%+"><+N#][E"ZND]R%L180TB7FVP55'4.(<9JD +M[7BBNCQ1L#@75FY)%"OB-(A4S/'L=/,T),&P*TV-FS$0P;D-YN3^QK%N9USB +M:]-'.?"@<+$HET8"+>-WQBL5F>A0-D%[,*I$)I,30.?.>%8"_VPJF!HZ<*IA +M$_/"RL*1YO/&0N4D^D92VIFW8/HA742UI-@#Z05<&V<!V@3`;8L':A3=K`J? +MQK#G=P=L%S2$A+:+H4:-GV';\#8J8_<>(B_PHJB@6_<*'+Q#F?A%;ABTG*%$ +M>J%%VL9I4AR0@W%=9JAHP?QM8WV2=$@!O<I]5V-R(_?T:>B0[A,R^&U(\8#) +MQK`:=HA&>'@@!)@Y:W(7I@[R7'/CX<;5X?'N@KP)3>J8Z;X%U+F?$!DV4<:U +M"]*BM><4=ER;$"=$F5SU]2-J%'`!0G_P!24(GBVN4BDC6TC78711(>-,0=\% +M=@3/$R02:BW$]BUCJX]"UW-?:G&S[.P@F+A$N"%VK2'\=RR>0<EP.SH1N>UJ +M8WETA@Z"<N3W*EBASZ:-#:H6R&/OL*WU0OD(+M10JNG-^;P+5EO'XG.33FU` +MVN1)I3Z3%XS?8&F3BLR%0P:>*;I1%:X&3<!T5I)U+Y[I;T(SF0*4KSZ`6M@T +M\6;RD%++4N%_>%CQ+5]_VEU+)-YWF-[/.M!CJL%/*245OWR;J42EU\HK]?'/ +M\@O>M#7'"N!QY\4X)-FAV-NM:AM@5'^D]=9XG[$7E6A3'<R2'7%7'S.Y,=+Z +M"#&PJB4GO#=O8=)I!B/++]%P2?4-(Y4GU3?)UKZB;F5R(2B,PAS#J-;2/V6@ +M5DN&<!;\[YRK0(GPO5LZOHU+!EL6]CE=5"!<Q-9:B8SS(,JCH;T$HS8-011) +MS>!<%VK1BQU&V7B_,M`;A6@94)K6K=">VT6;P)#;&WT0,^IJ6Z+Q'VV8FFX; +M5KA_G!C*8#E%QX-?2LZ?HYW]K.$ZIE&2!DL@2'QJNE*)SH+./(^\B[-JYHW> +MD:<U9Q#PF<7W^PH=G'-_&JZ,O07%LH><NBI7.G#X*JHEVK*I%Q?$R'YP*B*S +M"5E1LY"')^&?HN8R?(/VK`.)1PKB2.Y2O5<Q-M^=2-*\AI*:F#;Y%F`KR:%] +MNR*X;;W+,.&VLPFP*J-7POALA'I,,+SAE-,,SUF<<R#8%:79I..8]XUD#Z>S +M!69,WWD5)C)G4:#"@K(1L0>?M(3X-%0'<843=Z51_3JTM])XUL4_6RA6Y+<6 +M,6@0;B%J;&&J(-R"D*2>*;'A3>8_!$[=;(XU$6>R"=M8TKJ%9&P\+,Y,5]WW +MT)$C.)-<"9?TQ;O6(F5-/;;SCG[*)L@UY86_L3;7U>_,$X6RBW>`LBM+*)$7 +M>#\JQ)2MD"PJ5[;3?+/V;LA!B`K-8E:XN-%"8NR4H@_KJTN22)PN@HYC./"X +MT$+7,'(!>Q!-&@SS^1"EA/%C2/[HX^H-<""$Y0*(@AP3`,PE803Z(+:RX'F; +MLQ;OF;K'6:_Q`N5PXQAP)WOE<@B5*;T#7T77M]LBGHAEAF\(HRMG9'&Q9AU: +M65LA/#3"F=3:38TS7U6E\4T*>PK<AH]_:&RIS_N"6U^.Y60,IXIP5(]Z>.Q% +M)Z@U:&U15J26QJW3)V037$S?B6Z#@=:U-<</:B1B>WN1.@!:;,K&E0(/.9H4 +M++@V`)W6BWF!10-A"[!UA[>M/JU&!:&""^I8Q&[@V(+?CI8TO7P0I6!5'KH! +MD]S?S)XGO^1##+MHH[TRT9B-7=)-A=K)?(+5P?R/?PK\M7?PV,C7LC_E8R-: +M0CV<DW7..M%K*L=8_PE6$M>)G*YQ+.G-:(%/0_)^QBC:VJJ#I;L"*/`ZU'U! +M5S;13OV,G6@L8FT#:MB^##L$KB%<`_ZI6Q+Z4JR%6`_O)55+T$GA+1#A'AYL +M>+H.GT>6*>"QCIBA;9DKUB=NP-0`VIXO=0_\K&9V$*P$?[$JXEP4B$@IP?:I +M,$M,E_5C#1XX8</]H\3KN3CCK^*=(=?$+6:DKRR=OI&EXV[K=<5U\C_<D]A/ +M0??).Z6W2G;&([=C#:0/.6,-DP_22P(X70/P!X]`=/!$BGRCK]NW%>.TK\). +MW!&OXL8O-)/H?DI>%#,YZQD;V`_>L8:6#D)!^(?+I?<EYB7,2N@X60/[0\>" +M.FKOHINQUO`MA6E?1)VVXU]@V^07\%C#>V'ZH74#ZI+\$LREQPN,'P:7#2N* +M6[2KHX/@?5CQVXZ5N^"FP'6L^J*]F]BFA':3&M\-O\"_3#ZQ+Y`N2'S"4PEA +M4MR%[0>W)>NE`I;%)W'#OV(-G1XRPZ?%$"FC'7(BVD)7*D[9D:]@;>@+_*'\ +MY+_(6\#XI+=)7E)H2#8!Z^EK4GM+1I=^Q#?K!\8/',CI?;T*1PZ[P6J;2N`) +MVPHUJAMGQ?W0^-2V06Q#W9*72L26<"S8=X2D4OYL0:-#_@.'+#W@>.%'2:AQ +M2^#KJVV-7[C2L*3M<AK,#:,%]B'ATL^%YP>P)9M*GI186,#]NQ!L0'^YH]]2 +MXHX;H/!CD9<XA)/0$-P%;#E2M!0EC)DP3&C?!`P*V%_K4*:;25R"W@UL+L`S +MVT-]CR5B\J:!W7:9J)NXUHDD\Z!ZBW2"3\WX*:L2LJ.T+72U2S]X65#Y"Q*< +M7[8>E>&J!00[74:H+$)3J:@"4*%,'0W?OV"*-^GH)6JKO02>TT&`[`'JS0*5 +M;3+1W=+>'(]F"W0DT_^QQM.M_8K-)PZ-(;0%GP_R@P84:"FP'9W<3N[$.OR6 +M(3XH)*%"JT%2E0G0.:K8%X;"1N)2&VA?D"3+\J@7KCMP!K-I6\+T+"2VBL(: +M1L(%P"S%A#>JM`]D#<0KZ)I!)`W(*U`^U(B,NT'$N9%5P4VP19#=`G,/@`;J +M%.6!OXF$L]_#S2WZ>\L*/I[-'EI2S^"^$>K$X$W\"-J?P&*;WY;-@O#/D;YL +M^FO7#F!/J0PG;03;$\ZY_Y)Z4;WZYJ9KZSC@D:=XG6]KVW5!KGP()MWKM^^P +MZ^VX*.5>.-Z_%Y$%2GOD8H/PVXB'7V2GF#=M47!@EX*=4#Q!-_O*GVG`BF+4 +M+S$SE-[_P+-F6X"9*3J[XH)&3Y\DPS%U49?[`]#.Z$UDK"%>DL=81;/#;6@W +ML*%5=%N>D;PA[TYRP4/UP-]"8`^&00EO&N@G1#T^2P!^!8`O+2^&P"V*&V:@ +MFO)A=18"-E1MT:0DQHP<&%A:0D/C]JK@W#W&_?H(1-&E8@*;4L>)X!SD7-9R +M4S%P5,058V"$^@-5X*4;M??W\$KJZ66@E;[#U8(0:Q&I=,7^"::>Y=.FTP*= +MTM:"/YH6*!3NG7PA_71JP4D\!+/$V3N-YJPJ(8;G5Q??F4M"P=+66#_53\ZV +M?>I+=Q()%@I.Y7TQ.7CZKG'W4=U+"3/+AYOWZ`^!"_"PC;F6%7`V?)84IYQ" +M?U!)G:$DM>?.N*C^/T6$43^L-55C.AY`G@D,,312T[&:O7`H9JV]IAD-?R-F +MUGSF%74J&P$T9YTO*6;)!*[!QU#TU]T*##4!I]@AYD)`F\3M"<+"1\^1]Y<! +M-/'I6@DWK;>3A=B/5B3X]Q5K@&JA!*U>'0=I#6DN@*=2W<4P&Y7`[%!#:J+* +MJ.6L<M=W$)_HA3J/VS1_V<'5_M!3J:D6C\H;_""G4#>R2U43;V%7'=659@_- +M382-4B._V\3E[".LM81/RV%).W[\S9&A*3?FMPG;CM[PUYR5G6.7K,*5QK"` +M[KA&XL"N)7PE@(WKK0/:`IXF.#)+028-I"?U;B9^S1Y^$"7!\B#:@INO@,8M +M/R=LNT*GI$\/WS2%-L$*LP]?P5\C?';1-8':Y#62L`E/$(Y.ODMDU2;=;`.M +M_L`FK#2F(O)1H,;8`UXKZN(_[M>(UW6@=P!3Q)?.)+05ZP-?"</CKQ&?CS]V +M"]0.Z@W<+4`F96TG/'I$\%?E"%IG''GX@+!5XC>9;!,2V,21]C3-T%[(6`1? +M`GBO#3]@[`K@ROYKH$_F!']0HGYZ]3#<OQKPGVJ\E?@MS76V_([5>`OX6KKJ +MN/6.0E,'NR6S_R@X`+%`TF>`0IX/J\D?W`<$%906QK1JO\*$QKI':'#!>"N$ +MT_3EK`E6'>M:C`;O7QUP-?$^Q74L2%[-<;7PO95)N?KHZRM=$X4:Q86&%"#; +M5T-HZX!C`H.N++?]=`BUP5<#GG\:3)'R(,83-;!Q(8[8,@N(JVJT/84AR+3) +M"TS[5J$;RU"<U3+HLL-1E<$Y0+'5LEL<J3;=7!UO5<$U$:CPJD*$&'K@:Y5L +M#+!=F!#78S6\N%SX$C0AY_,!<(/709`+<`K7A_XKK7PU;40)&Z#0YH+,0)&Q +M\((CX03P*[Y.W3GZX(SH4#`ALF=&\\$[@DR]*E_K0).O<@1/#@4L^%Q*T+,3 +M-)T`7K5I5C*X\_H0M4'.6N)HB+,@K68T1TRTP456B-^K0R85SK1-,+M:6JE< +MZN>395@:V(U`7?K(:Z'2S4A=.LDDF+R#*!?)61?5`ZP+<UD-F0=:%+UD-L8, +M3B!\)G32#7A1`?7'138!09']"M`;$)_K+;H@6#+6U$4Q_(.,LP7UP^0\YAI5 +MA"F0W1,G?,M`*OHJ\TZM]%-*^J0"_5MY4,.('S%ROI(P_T`RM]'KF^O3YIP\ +M$X3P@>^K9,J>0N5M7!^;2MJXKWGUMNXK3RJVKA#O-K9&>T(R;Z6R1]Q->Y6V +MVH[X3`O[6<;;T:/Q7DF"-PZV']^MMFC>=^!);95M73G_O602M0>?MP7&#%_C +M+:%U\"XYFH_\BD-SFL2A^)/"$9Z!5YH]@#^NE"DZYF_J`]MT>>M)BZ>#TNY* +M5<)3[`8?J@8+P648&7;NF!RQ6.\='4^V(3^[U2Y9>M-GUJ`4@,#??AS4C=*! +M!<P.0$^I<$93PG'Q$XN@?AB'<"6"]%+:#-X"S`XNH?-#7E!8)+&C-Y"@A13U +MS],+<]K3?C!J?B^5A4RSAURFVF;]`BG8[;!6#3AX%70V.HLB+7:!5S$?*;XI +M=A/26(+VR,]L4*P_/,"KE0=56D>&4&7[P5IORQ'Z5I7*IXVM*Y;+H.(3R04\ +MIG;"28Y;VM"/A/368*J$D@]@+<`IY2.>K)&RX6L!3@+?>1\^%H04X#'`(S]' +MUI6`-ZS?'"P1Z2UA29-2K#L6-2-5;:U3%Y%C*T).GQ$G;QN-9%NS60U:67"$ +MDJ9<F.V<&KJDGEE?MK!*O=MK)V#VJLJY:#WZPGX186FM(4&"GE==@1ZV%`@W +M()D'_>L"'@%."Y%$>>"\585RKEL(S]-GGTX+=9(5M0?SUE7*2KZP1HZQ"?@K +M(Z_A61)T^(D[5'QP!+9`&'"VD`&HX(3^E8'7O5@3P:PV^B7<"W&5[^"`:1[T +M`KEP[/`$;W4Z;=`WL)B'VP6U!3RW,[5R-D`M."GEP/J([(+-`Q(7OAGZ-//I +MY:WTB%;4&=>U,K]H*NT;\K")YU,L==2:.GQ$GEF+55R6T585UI>J5<C><J98 +MR`'60@!-M&HH+Z*L'XIU0F[5AS^-*/U@:!/T#E[%64]!%/9T9-30@*>8HTY" +MFTI@1.@*>8OR))XNX;3#/58##A7@'@:I!"_6K)3;0X@*O-&?N@>?3S'+T0F8 +M53%Q(]5@-$5@5<W4-A*PE]\`E<FA)GC0`O7*P&W$`D\(MH.M8(TG`)?S`#:: +M@`V)@$OJ<0GB@DS:220;Q98[)FH0`;;D7J0!&[M72R9%*0!&YZVFS86=!)G> +MD9^R,`1MLWV'+]`$;1D?DUX3"4R]MAQK;I-,VQI?]JN1JL1\8J98T=I$:N"3 +M3,RTH00B'V;/5R-[JQ_BRA62KD;6+::`"JX),Y@C_HA_-@0M,X`C]T+OU8C6 +MDC/WYU8C56K"_+JX:@JJ4-71.[JXZ_;5Q)T^)7WZJ+1E7#>?54OPK@F:JPZ] +MNK"?BJPO$U6FX4'L556XIKU5)EN@Q;:JJW%RZJD;6541+54C?D_TO"ES-55N +M,^&_K"%C0L=52-Z9)(,!50VG?VZI+ZJL1LF_I>[6Q/!IEEG\C4I527K3^+96 +MK!G-_2O2IEOU5'7%54371HF=_5!X5`@).NJE)T>']6XXRU45:?/U01XJH1K_ +M5!TZM4#6-:0OH"YU4(SR22#AU0-W:F*F7)?5F^+;VZJKL]O=JJL9?IU5P">: +M"TS\I)*VGIUH3/CLY-:S[*U?\KH6B%%'.G>K*[9[C&MLTL_.U56["\I99_Q" +MJ!=$=NVUKL]M).[7H']MU`?I/[7A2TR_JW<'/?U=@.XBT#]\%.[:WA):#A55 +M6[(V;^1O=JJMV#HUL_Z8*=UUDF^R;IJJK=`WTFJ3$>#"!6I:__61,4.S(:\] +M_$IW8W8)0QE^6J)0H1G@%->6^,\^G=8;TDFVK)8QZ6JBMUP>Q>TS[+^KH9^= +MJA&]`\^G=/1A"M8,[556Y:O-4(W;?U;E.RM11H(:L">@_CKVG\3K:HDG<S=: +MIDMQZFKL\'*J9&WE3(V[J9&X%4:^KCN6_JW4.JJ;1O4,QZ\!9FID:7//IW0^ +M(J;2\F_J[0Y<ZFEEB$F:_4PUO@!.%)VRXUJ:F)3N-?Q?B5>^#S3P@NE4U;C3 +M?'`H3.-(^BIJW%NW?EBH\2ID;4OQ+VA_(V5?B-5`<"%@WX-D:N)H:H.M2&OB +M?A*=Q33B6?GTZ-80+M5)5,GON?,A:9]^:^LL?IJ1&[+\1OBJ5+\94/]J5\ZJ +M"J/IHQ'UUD^K/7YK9_&T+6(F=P].!KJE'^3:;_1.ZK1??JBL$*.;`3I`%8EL +MZHWQU=15%<8A:JH3)Q'W0L@-\*"GC(UY*:$*UC>R`IPN^=4R/Y83D-Z.IJPU +M=L2D"%,U,;=`&U!944[CL(],;^Z"G#OMY*<<*/&^F!3B"NQ*;``TWE@:>7-W +MFXZ!"Y$W<:=QX/C/9%]]J:\%/&G[M^6:JV4S-?9&[D'KE3$J4CL'=QM3@_=? +MA=W#^N+)^R787;/R%)XS\/72/PCR@NO4@^:=:8.3\X(>O#X@:4MIWQ^2\Q^` +M7K(4K.I$I2IJX52'CVZD-NK4A,Y4DDX:KP2AO[8_RM+'#%CRT(WRXUGDO+"] +M&HTQ[/ZE6&+J:GH2BI.//?FWBNT74A"<+2[5%>3434E<5G8JBK&VNE25Q5CZ +MUGVDV2I*XF[O5!9!PE'1".3#\)IXJ8:A@<8%OP5#?:@4]ZF]5;/V`''!2@-K +M1>^5,AQX7FAW@&-"PX*=]915$"."NQ'[X.0"L2TC]DA3WM%]:/^8.2"\+ZH' +MG<,?S4O/!R@7X@H%95A[U248A\E1%^\<2D`MR"3/ZGG_-"EQ*E0'V'I&04B" +M27ES$754W[T;?>#FPK<'YH.<"@:1^&"IO%[[2-[K0^<%.O@;U0<^%T029V0. +M@"F%H?JP4]X1W-(\D"3,N1\\#HPLX)I-94'2A8AK2J,UQ8.G"N;X'Z*\13JB +M)NHV\T&4"<GP-&@ZH`_&^*8.`P;E``#E``"```$"44_B?0VW8`#==EPH3"7! +M5P(;"X'V``3HJ!;M@P)=?Y*E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U +M;G)A<C4O;&EB87)C:&EV92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-XM' +/428#!00!```````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu new file mode 100644 index 000000000000..4dc97d65ea1e --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu @@ -0,0 +1,345 @@ +begin 644 rar5_multiarchive.part05.rar +M4F%R(1H'`0#UY[V;#0$%"`,$!P$![_:`@`"(]4(L5P(;"X'V``3HJ!;M@P+] +MF?Z`@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV +M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-[]V(;"@ZL+ZZ0DS>@98+@$> +MX@ZP+U@29M`*>\:ZIH]@!EPLRM(]8!UP6(#U(%IF[L:39@#L0J\U%23X*@!Z +M`3LQ;>0;31Z39A?O3Q?Z`?1"^@;<$%'L#'>$DL0^<I[??`>D<)V@6G!(9R"E +MYROE_U<2K24`E54JFE47'ZH(^59Z-ZQE0<"[$@P(414&WD*&<J"N<GLE06)) +MCW$C8&H-&7DD@WKX)N-0'6^5`3FZ@+_&^CC@Z@KB$_/?2,<P*8@;0OK3)B_8 +MG%+,,^J\A/?224)AC2S4QT_4P]<*T.\ET;7^Q$_L^CK1/HGW'U)/#HSCXVYW +M#['P-RWQ7#C\A\(V;?6O#G,<^JX;GU'PC<U]5PS^H66FN$^JYJ7,+9_W04\T +MSA2%;DD-@>D3PR=P?&C>=2%/-`UQ\5:W]#X-J!BKFDYYB1NNQ$>P^*ZG/][$ +MC2U/$U<=H0:\M\$IYI;6L26S;$-E6*N:FR+$C5=\2=7PC7ABD9FY)LBR&]C7 +MPC5%;/X$&'"GZ>FR93UZ/@%F2S]DX2G@Y_JIZK:-8^*YA'?T]NJ=S;XKF%MJ +ML%'N+?#M;^:GM>/_:"GJ:^/*L+2]M)NKYY+AL1FN$&$"A:>-/<\BL+'T]7,+ +MU.GJZ<)?Z>1J)[5B]V-BKA8OU>TJNQ2^E[:\.Q>CS^'"^(%:P+?'I,4%Z()$ +M_;=H<6%I'`4NH*>%TC2,]V%-4->]JX7N'>U6;^%Y$ZBGTP\GZ=/$\%[2C`I] +MZ#I^\]["]JX<[\'I/51BO&5![#O:N':^)Z(W6>R-Z;TJT?['LC:=;/\D$F<N +M0M*9JGM?=PF!>B-C&A3PX-O<!3P'*.5"@",]]6D!J:^/24>%0O*K1_\O`EV' +M:P#4B]"<N%\#RVZ,/F4S9TWEKR'N7>4WA2M)YCR&X3RKB6X]Y(VS>B-A'DC2 +MAY_,A7(/G@9$*O`DIO7MKR+=V>2-MFA3Q-';>&E_=>E<3;];P1ME2`"(\W]> +M8`9453(D:'!&AN0"!"""-VC;;BXQL0%)AY)#"D$$!040$Q*@H3$$2$@3`$!P +MBC@,"**VMN`5%L?0-MC:.`3'#')#T%`0)#'#T'UONM\JJW6]U6]\YR8`?/WG +ME]?WP']_C@2<WNL&JUK5:JJU6+=<Y4^):]`56NZUW7==Z[UJJK?,!)=]#=]/ +MP(D.CCUB@?OA2-@JV$9*DG,R:"&R5P)"U1+0I+6-$'O6A4K6?=0J[>3"K34* +ME:_PT*1KK7"-"PI&[BN$;AULC15<(VPK;@RW%`QH/ZUM=MD=G\T'XGQ[:NMM +M8D&QQ$4Q)CQMZ)OXNF2M_>)6R-DF#$>F<%>@#W%;2?7B5H*"K@Z^!TP67K:R +M%R]QH0CN+CO=?6TKG[30A-%/U!UL-RC,^9R)#\T(FB_ZXD9BMD.<KB5V]YT( +M1ONK9&PKT+Z^$@7U>R/ZP!-1Y`J>G]:XE=#=PB8GWQ/1ZP,(^/:T0B5UK>UI +MZU?7@EH0X(]<'-UHC4T*,\.M"/8!^&M!KY60HV%'6\PH75PBR%[/P*T3PQE: +M2O?HJM$;!UI:_UI*^+TU:(W;PJUAA4KW^EK(C;6T]`7U,(UK?S0UEZT&=G]T +M'\0_'/!OO`Y4@7#E?>[&%6KL*UE(6MPL$)MCZZ[*`36UK8;K";P@!-9<C\BM +MC;<UM-UJ9$B+%Q[]8"TU;'7<5L+KH59&A'-;?E07Y-;2OJNU)C]1UM*^>A"( +MD=<D1-&*L_$TEH2M8)]9J6^C`?Q%#*\>KA3QX]F$2L_>C")7B,<I+"_55R_< +M`A>4DR/[X%9!]8"T`VT/YBV(`M(/7*3!5@K;6`VJP1ZS6TK]_?5HC<B$(VJK +M1+[,[9W`/_*T1L^=G0O`]^M)J$GWKP2WRPB5Y.=K24%\?5@O\0@ZYF$"K+4L +M\RO()0T#_SK25Z7IZTFZGKA6DGZM%:2O0WM9(W:5I;K#N7N@9\/6UN=64W4W +M_DB)&4K0;(J2SV2`N8,VJS^2!W@-^K+@_5?A$W27;*R1N2=[74'M`B1NGL$M +M$UI-1VYL&1J_!!=A6AUN-:"R59614B_]09+>W!IJ1'L0::@3I#L]Y!\D(IRL +MQ!AOJ.Y45'SPB!![V4(^3`14<68B.3^LKMV!,O2[K*[5E5GZ@`FN!6%[_@=L +MOP-$`37O/0]UF*PNWHKP2V<@TU)/TZP1O\]"K#7W08ZZZ#"=P:S-216"6AZP +MUE,BR5@C>)6"-U#3.O%TK`:VUA-2/;^KD:)5<O9@+ZT1$<G]87;[JNM]]86] +MI5GRP!->60$I?H,-)U=:WD!-72KI/>[%>"6O=834FX:KD:S<\*L#MVPG[ZN% +MA0==5A;-59K*A/Z58C<)Z%]98B7C:U8-J:LFI&XRK*'*>A?6#5"LA5R-=R`F +MKPN":M!'MX$X"[`5/%E*PNU7JQ&\U<(J1&]@EVS-7&W%JR:DGFX(C:OFA6^L +M#K-5@*\58E\3!$M@()-2,OT$1LG!)J/UO@B-Y,$M-02[=C!$:0@B-6E0JZJQ +M&X+I=N$=P\L'6JL^W`\P']@%Z;NKIJ0_PNB-1+A%1UR#I=OV&_K02:C]@71& +MG.8%YD$.OS007"=$OU3HEN?T'351TY9NMDY42Z32+=FO#U:P[E0<KJ'2:C1F +M3LZZ(%]?&1_?`)KTB`FLF0$UB"/Y8&3!\0!4\7N59=K<=L7UC7H148[(T]B1 +MAUX)9XZ#=#GNGL_SY879.AUN3H+)F@0A_PMES@M3-2AN]DY7J<]-1LR7/)HS +MES@?\`$5&B6(^6`0FW[)`OJXD?T%O&`)KLB(D=8]@BK?/2>]7#LZ^N%SB-S3 +M@E?6O7!-G&ALQ3/5N"<GMY0"*COQ%$SWR<D+KQVLHGP8()&I0"7M4$UC<7)) +ME5FP3W8X)^Z)$&T?.JPO"04$!VP-O=!%Z^0Z<Z/DHRHY78)&Y2HY1$@[MN2. +MU<(N*+C&25?FXS)[B#]KD,F/S\!1[TXGO73BX0>YT".O&N=)N$7RCM:[Z!T/ +M@-,,-9>ICC@M[K=FZR=2^.'2'<]`Z3IW;<D=KT(J75)SR>&1XX5D':T"8]J4 +M3'J24+OW8%L!P_/%HX>/3"_5NCH.HJ5^Q<]=JXOX0[H#IA%9!Z=;6\\AM[UR +M=?(XP7[M'W)?>&:"&)YX5R!\KG"W%-+OHJ,)(C+YV_0=#O6!?-,(.W1;^O.# +M?2/#0#-8$98'[5M%SED5+S2<TGA,\4+R%^W]Q/9<X*]`X?FBWT`(J(5[YI+> +MT/%S(KH>:,HJ(E<YI&P`\-7S0OSYHS^W-6/VD'A`_KS!X2'$"L[WM=1/\^:% +M(`R7,%I(!%0'[OF$MWX\5]N`0H7_>=RR-MN:.]7YP"XV1#N5OJYBV"6^SECP +MO/#"^[GCK0\\*#YBV%!O?+%M[STW#W:>62VOY]3T'?]\L90OM<'E$;_/+'?, +M<L+W^6,G=MR1VKA"_Q\'*)UI[20K#%]O(^4OY.Y7'WO*.=+*[W^)]Z.QL]#< +MTWQ&&SS\W&S&4+2,5Z9Y0]'#,UM&"I$2W^(!V:LTF7<RL?Y)\EVH/S0^_1;* +MCV)P>,Z*>*-8L'`CI6A&1*7103^EISB-][)9+A@U^)8TISIF/>$Z<NT79CX< +MZE$]OCY_/4I1>K10&2]G%3;1RW%ZNQG..@OC@=$S,9J"I.'V;\Y56#*9^F+T +MO-)>F&VM8E'(7H>(N_5(V7T>#7&-M%6[YT$T6YOA\U2FW9.4Q85M.<G>K8,/ +M.O'#/.0S0'_F(.RHW*/,')^B":V8O<*%<.,L>6N41O_I=QW[+FCP\WF!\4B8 +MAEP9GF$Y]5!#-&'IV'V6Y@\*T*<U$I[,`\/EDYF7YI^XZ$_Q*^TM7`+VEAS- +M;W$%SY9[*?&KWEF`1O&!J-Z,_7&%4KKH7QT^")HQ358WR*'H3E9+^]47X&%' +M^3^97)0]N5HG$8U[QI07!&!\K%I?'\RHMYUR-\[A0GQ8(X9XM6WM=1B8Z7$9 +M/)J_%CW\2S,OVN)F(I9YX\$-;5"Z6VEDKIW0U4I=\@1,?BSN=ZO[,FKLZP*Y +MP[G8BB['EU#)AUK$\/D((9\$(C82"1(_L0_^T;/DGT@^T'X.54,H3Z.4,Y0A +MV/))QUE:"VSIJ0U2]8;Q8Z9N\<VZGW0E#NAZ!?FX#/'DN91TTF/3'VXOTNO2 +MC&E6P(UO9UC5</7&T.N-JN-\G=P3"$FJ@IR$7QJBI^[VZM0SZMV%DP/!#;0P +M4Z5`K2E`ONK:$J)$Y6VH5@LFT3O+K+>7P:2'3R-!9+/G\D!6LF8@S#F:)@XG +ML\AFO<%FTS'.NF6.(#_+1ZQ9G5(<\T`QG!NV$@C[P^*'G>\94-.ZY(H^7/Z[ +M4U6LL'(8ET;!$$5P!.DS&DW;06M(]&DXX?-<<':+?AQP[-A^QIC";8'U^.31 +M9.&(/?T$4M&7:[P41+D)KP]%R%(\:W`,8*%4]^PY+#-P`*X65L^@]6SQ:P1# +M3<9;=+;KC/T@;#D"-V#G^,+_KR`T]2A?AR!YSWב-\#)"A(_3D#/8#OV +MR]'8UP`>J)RG@.$#QN*+WX/\M(%?!Z/EXH?W>*#Q5O6XHM,`W7C#M?B4NXUQ +MP>Z%"+M0.4#81M70^NW059'HUW$#Z;B`\U;.\06ZD'R>*.V1)3/!Q`HVF +M6]5QQMG..UXUFS/'(W#-UJ:I2SEB9OQCV>.];F\<5_8'0;FK*;-V.H#%\`C6 +M#Y#MS7Q13RB-JP*?V;AG^4$/R=P\.;ZP[+EF)R/G2_5CL9UEIG;E"-;"??2X +M\`J@GU<<+@\=:(!SC>1%'ZCCJT;68-O$/9*P<PQK\4#DSHVXYAGI@(L&>`9M +MRX@>`X$2D:M,.VX$]TM:`?ZB];Y`M8QGKS)?[40TG%#?R7';@T`#@4JQR!U[ +M/D!9?C.+)VQS:1_9A%P`M@."#VD#N`;L.']AVMXF.6MP,(+=2,R8'<@TG$#> +M"!;P:#B#>X#M)"<OQ0KB#CN(*L(58T@[H'!!SSD_=D-V'"3';&B8Y:Y@P@LZ +MMH'QK=X#2<,-[@'>@T'#%6*Y_IVVY)CD.9C_XAP<OKP&E)G(P>>VQ%D($2?S +M"=WR`KFRBLBUOW(J?8/!R_)MLPRB^.LZ-K!G^OD`&G%?)Y!,G&HD?W0IH +MLI#C>/`[%UVM&%*0(IO-$UA9$P=9..3AMN./@S?'&8X'8\8<M%QPO:XXS\7' +M6^Q"G>LQ#[W&Z*L4PX9WKY0I:_CNF<BF:LB,ZX5\0_<D@[('Z`B1Z&U"V=1S +MB*\2448T@_5C]O#P99`;:1&9]0!VH-C`8PHS6$B)^0[40G(M3TB$-MH2A3[Z +M#C)NNS\N,(AP?PXSH3O57+M0$43/JD1F?WCC?B0<6I0S^FI1+R+U\81^\`5O +M$V5.V1H,/QB-=7H0BO8.,DRG"V85G':^"9YJ>FLX.D%"1]_%#?)Q4T;__/%4 +M*[7'9[2#D0$7JI_CC)HW9OBD;'+A?5^(^*`M8-O`7I2\9-$EVG%(U"N+:#7N +M*DQ&\V07X\8=31?$.':GK4;,0$H:!_IXB:([Y>(F^B]GQ$F>HCN6X`^:`363 +M`11"R_$4*[R^*FA\O2K/-`$U:P%3$>,`B@AV/$(TD`35:XA&_?8A7,5?V13] +M_XQYJWO@?VX8T8JOHX8;WS=;-R$^YPUVH3L]V!QH"$":Z`C0#E=\3Q'1&X:[ +M8-<7@'MP&,BV>"0,864[,@7I]9C;WP&L\-)FO8>B^@\#A$;1[`+&<6`((]_B +MA=_PUO!!RW";R*/1X0;&<(1X0/C\(-]ST7X&3`)K#&-PQA::Z/0]U($'A@QH +M>\`>(#UW")>S\5-R>]"F(W8KB1!I`":SNO"K<!,1:!/><(*3!]VF)8NVQ#-R +MJ^73*%)^!V>5!E@\Z8RF"![\@7U*D&#!M(>^@2P/94SDO-UQ&M:.:P1].N$: +MT4\%=M#K@OPX@Z[GB!7:F6F0?AX+=`/(<$-Y/!$88'%\$-]CT8<&1`)K?')B +M:![Q=[X]AFY2'BX08CNR!C"G_K"/:`)T&K<%P9Z9`7UN>`1KZ!B@=,N":^;6 +MA=P*O^8[AN$,^,#YW`&C!&'X#6M/6%X"A/OA.S^0#>P^U(/)!CR/<S&_,84; +ML*X9+:U$"^JZ0(F+_;$"^N-OU[^Z:2+YH.NWY&\YZ'NLUOUVRFL"\7AU&8]8 +M*89]`&>WX:3WXC'`X%Z":]<@QX-R#ZC@M84#BB/:S&_9$'JR![J'(/1!=`$U +MV!!D@:7?"*3F\_H,VX46W()\]Z4O*^!C4+VV`YKA.A/%X3:P2<>(+X1/<-\6 +M-.$FDAC.$1%9Z,!%'K@R#4^P9@0]H_.D'TGVV^]MJVKTIX5/6->T?"=!OVX0 +M**,*L\(E"A;6:H+*#T3HIXHTBBK^ZF?BUSDN$F_PLFF9]CS@JEZF2/9./`3# +M^8'HY%,'WU,"BC$C"42YL=PF!'\PTCSP`84@\'^Z4])Q2A^W_!),??U1DR^I +M"OP]%Z%+F->(#D^"*P0.$6VO!:Q@_P7!)?P0$44W>$>W+?R$VT>C[N"'^/@@ +MRBV_X`Y2(-K`117L]P"7NZE$'\G`(UH#S.H"CAZ*\*5<:EP>\'/O@?:X":-3 +MLB*!6`FQ1<HJX1IZHVPO8T(,>#?R4CA)JT7)IDU>S*43\)1C;8>\M+5$\*`U +M&'""]_A.+!$]95,#*I^16`L2I3]G2_KZP"C.;X:S2?"?:\?I3"W24(6,IG([ +M:5+4\)VQ0G>-4_J*M+M."O;].$FP+LXI3`^U<1@/S\$6RHXTS'P__SC5@-?Y +MX0$(R)Q(\GA#.,X0KWW!&T'9().NC?F,`B%$7H&_+8`:15_U9)NFQ1O;H`HS +M@N#GO*2U=>3M>A/N\$)%"]ZG`);TN$FKU3JE/3YG"(WA\!>TT.I;&MN4X^'6 +MNM,%;V!8T(B)IE<-WN;OZ?.E%TP57IADT[<2*\R"$5@C+DW;[LS<MN>>,9&# +MC].R</6;]P=]#):OEIB==K3!6W@+70&-WXM_7A->'X*J'-=7%U(Y'YU-4E*O +ME<`*@X`SJN`MK.`P9-%7Q_G?+^C*G.U!"/3!R2V79!"*PQ?R;]$^/=6-B)\J +MG;V8/]J8-X%,*W&"&?%IAMX5,F;.W'!3.:X/2A6R`Q=WL3Z34S+#@^V+'M'C +M"&,;`?(5]C=ITHC,A[VZFJ?:5[LF%KN-6ZK@DY=K3(PX/RN"JG[7QJ.!U_`' +MA4^*,T#YK@N3Y_;P6O)/WSD?CZ,+5<%O2];A!C:/@U$<,OT/]SGD,;'U"H-V +M4'N>"&^/@BO-0X_Q;3C+;RA[]JM/7\0U%`TH&?X7/Z!HZ]W]CIS&,Q4RT1*? +MGP&V'Y[]P1\';\$91/WL/P'[&^/!I\5_?S7)_8D=0R.MH!C2=J<DX,%=7P', +M9FAX";B:G^`MVVB"WW`'6FX`7\FJ%6P@^0*&=G$?89NX%B!NP?[]"%GAVT(G +MVVIVY"EG!KWT0W_0!'G)G?D;MQ/O#ME1,,LB8O9+?DM\`WP._3;2F`(^=GPM +M5OQUUV_"^??N%0JP$O$#?2@(5!*3?$;O1/UCM]HEXLB9=]W?/RK"_AOTWG;X +M^^)-@][?I4;TGOE+'QH`O/@0B>Z)^S?!(4A.L)1>.AO5JPZ&8;?IO/?A[U-P +M>_MOE'+5P.Y!TX1(\4[.A2'_`@7U?B!"BQ[Q'N@%Q!\\!>AC=(Q[/+;U=NL> +MBY@]_O2-E\^%5X"93K!.4WH3-L\[TEM]O`VQWB5);:[PC?2H;CW-ZE2??GO% +MVOJ\+K_.\7:Y'9[L#D0]I`0HPFR!>AD/&;9&OF\7;SGH17P[8T]C%";>PWRA +M=O&L?)=3O$W9U=7UU[W=IMI7>;M=KKG@NFWHZ]GO0H[>+(K[>5W;<]'G;L-\ +MN\3;4L]NR-<5(C,>!X0-ZW9&ICL]^!M>[(VV(+^#_8/J`$6TCIB!>G=&C-P( +M/!I1&_ZLVA)40]$@#K0/$WG/Z#V#&*);U=VFP#WU'==T_KT%J3>#;S:41)`X +MT"&$+Q29P(QQ2<[IO`M/2_VQ'YC,H#:3@N(WC%,PO'84H:2WB;`DZ@[I_+G' +M(>#VBKEM0&"!W](D]&/W:;;=U=(MBSL\L#^H?"`>*#\0#?<>U<LE![K=NG.P +M_IF(K?[M*I;P-VE.&KW::2[6;LC=2^'>K)!V@/TJ)CX[-U9.Q"0R:"<^5NV3 +MR1.\<5_]XCA,O*!ZQO$TK%F42GX6[38!78$?;[M-*U62/J3L]E!X!TBJ3G]! +M=9C=II%Z(@[OJAGX'H0K/9@@_&D7SR*4;;NE32'_3(/C.`\C!X3-*F?>&.WC +MB?Y;L)%)?MQP?^ND:1QY5*(JX,S2I6$_ZD%JYAG3DK!JJ5-)+!'9^KXPSGP+ +M,#NU$7?P(+.#1$X/E4NY8O8-V&N>['*_;L;=[NPVK.,LY8#FSM/[+J)@)K_= +M"?*6)K(D&,W0)-7_=CZGF['P&BV:W:N5HXB]J>OIJ+J=:W8$&(WE*,F2')&_ +MI041D:.D_A*I=[3XE+CZ5*[*><15NI6G_U"^JE[+QLP]XYNE'M]/YN$@F=A' +M7M(>K/SR":JH<(>'(RC,DE'^C2^JS"3W.=4?WSB\4QLY'*CLA-K-4A&]&EV# +M8$^,&UH\$+!L\1[A2PWCK1@;W!X(5=XHC^/2^**<AJKGC'GS]+Z#+8^UB+/4 +MH?,(0<[P&@W2DY1N_\+[GBL]`='\EQ@J490J28;=/VL%25*%W"Y[U:YTK:Y# +M\9NB?B\ND&V\I$T7>XI$T/-?_-=5ZEUWD#EV8][T70GF4@V1,MRRD;W&I&TW +M+3(<?5TN`\F`QL]2*5L:>`]/2#V=;2#X/^4@RBO2_:3G]-(!5Q'IT@SZ](MZ +MM(#:5IL?C=R-W@>RK6C,!7RD?]C?\)2#WL%\`MGMT&M#>,;<`W.D)X7&D#VJ +MD%?%J3*?0B_PTNZ4SVG7"<W0S6Q&=W0S^^Z6W1_9-CR:?<U7L:=E4<^'=".P +M!][=.F=/#VFW3F,'YG=?8@S@"FLROR';(8&^[I*S]Z>Z31*]QNDUH.,_X%BM +MT.N3W06@W3BQ^>-N5(CS4/T+7FOW*5/GUUQ8@<VEG)C+_@%XP[9`3<EF;J@2 +M_L;I*U9?B/YH!-6\B+&--&ZT:?7I4D,I?NQW*5OZZ[I*GK6MRXJNT;NDK7&\ +MW"3WNNW25J;4;@C:#+A5@=NM$^#N7"U%CMP2UJW*5I:7W!&L>Y(UZ2SY&#N2 +M8?U[<CKU^Y"V.X;XBJA27LFY:Q$^X'[D;^@!-:QZF_C"[\"0SY5@=RO0]C;` +M=N#[8"-@=>X:Q%5YBX57.'[OA`S%'U.Y2E>K^Y(W-W"4JN21-/;M@$)7]BS& +MPTV5\!"Z=F2(IO#A-Q2@W"4K/[[@BR1_H1?$SH3LK??&9^FX9B$GQ*$U;L2K +M'T>*0OQ,0]E!OD`$)IV`G/!CC@!-R60G]0_N3PMHW>`(J]GL?NFQMX9]=?:@ +M(DCRY$O'L_Z"ZK<#K<4C?,A<VM+2&7M!]XD'\,.WH";HLA/_JMN+>WN`WX[= +MPAC&;A*9'N;=*.V#(^-VZ9AC[/N"NT"%RZ"?NV[?)-%I)?,;=-J_=>0,>`_V +M=.S]P#!AY$"V@[_;)D[=L06X'5A_?_=-JE?J0-B\TIVQ"]3E2!?7^WH[H''; +M8C?[^T+X?W'7-_N%^&V6[L&V;86S.V3:OT-MB-H5POJ%(^"`0O[<.C>M%+CO +M0=@'RVW3:JV<(.33V^R9K"[CL&X_N&Q7[BO]P<=^XVQ'[I5OH-225)OKKO`" +M)N]L=N1K:-X@!$W]]Q$9GKX")OOVB#4^P>*BN_8%S-N.L*)M#4C\BEUNVW?E +MP?^I_=,T]$*2)N;MTS.?5$?(?6%1P(1.1MPLN2430>EVS>R^^RV[6*/]@VZ9 +MG&6VR;7%JZKEY&V33IXPC[G;!M>`BHV7\B,S^]MTTXMP($9"?D"*;%E(^,`) +MKJ5)%N.^H*5@)@_($_>244QNCHWY$-Z6W33%?-1D;$;<C>I1D:#2(E^'::$Q +M2R)JONR47C*48;)T:9K?L:-)OWDT9&K5&UD`J75?N!HTS8?[[4C6';$;2;5= +MNJVQ&^]5GK0%O!]P`Y;U)49\SMDR3OR4F]_CVQ&^%S.6:O;)42O.VSA1G.!V +M5#W![9=CA,EO[[9*A%;-LF7MYKZZ_1`[91%E\4$KEMAPD=L%A=LWR>=049/# +MN7V'CSJT0#Z]&3E7AQ@Q/`HW$M6[D\=U1C;74:98?5$1G7H1O0@(ED[[:I4@ +M0GSA9FC'7?T85M2-^T`_#M26_+Y@NKVPZQ*2]X>U"1*6O3<'\E8#'N947+1M +M7"-=CVR9(O6[5*3U?VR9'-7VJ9<_8I%SD0(JN*)OI)1)KS&T);`;5,F_[NT3 +M2GI;:D;SE6>$`N`.%#_1M$J+E[($4XV7(%]1Y'B:-*A582!4RE_HTT_<)M"- +M<%POJFV:[=-\H3P=N_$W#:!74'X]F+73:)O4K(;,C7QZ+N#-!^-LVLG=>$1_ +M9`O`/<@+Z^$@O(/:A^NVJ;UU_ELZC4L(NNZ?VHX(G5%<.>4GQJW,+1;4=:;: +MA6=J1,A31#T;<U4A1I4T^HHTD57;G1L$"Y4:9WDTB1C:U^8C'>ZV&U4?%E![ +M:C3.]_F1[%1IG=O\J4#/5T:9V3(M,[;7URL/DR/R-JH]N.1\Y\076CMV(FW4 +M;B=T^G:ML$!0S[#/E`(\5TD?O!/$@,37($Z)J6LA49C7M^3M1MO0$3F]9#ZC +M+!:8G:@$]^LOK]-H2U"-_3VB;ML]+:$;PA-7':M"=?M'$]?N!+^&-^8`A4\Z +MHC[?_(6SV@Z[7:!2`E$][I=F_%:?<[1,XG]&S(VF(_K*35[`)$3+BI=XC);. +M9VBLKAMCR+;)%N?V;?/I]X2AM\_)ZEE!]/LTWR+S]DFJ(JVS(WH[1K!-6\V1 +M&\C:$;4*L\PI.(_(@5GO+UM$S>WN[))C]K`)KSMD1N_^$*Q0&)+NA-#L@KV# +MV^R;K6KO9*%=\0%\!_GLDU!:C5<M`!?0>#L2-BMFU@F+6[$C>*=G\$']@]^` +M\('Y`%3*41VSPP<@`3687'B`S6Q(UL^`++;,==)LPOUV*V!!L>Q%J[L0WJ[% +MK!-SK8D;3*N7]`)$'9;`C2NR:P2QGM@1KZ=GDP?I#W("4!_N`2F`V;6!]\3L +M"-W8!-8#8$;MLJ%%CM=Q/S[`+"`V#8"W+UX;K]BUF2C?O877Y;`-S]@UDE&B +MUY&O)W[,`_<`35P>B9!]H/'`88'RP'&LR+:+E^1-_\2Z&!OGR*'I<][1=6G] +M=^#9.9OSUMDFB2R.R(U)[P67V3>9YSQFW1"=:L^:>>;79.@VJV2NT-KL=DW4 +M'__-DFBBJZDQ]\VR2OV;U,D4NF6<=_C9/MT-L?'<YMF%7%[)30DC+;$:--]T +M$(?Z#V'[M`7[Y#YLZTN*>V#KKD16?9,W@[V6R&;3L5NKV0K8MB+:XEZ;8M`B +MEV(SP-@M1[$%%%/1[`G!>E&3,((^T']$"?S)-=N#[0XKT]HDRP,ZMC1I%'7> +M"7HTZ2'C_4-<XB2[[8C**E#^>P)I#L\VW%B+8VG.[VWTO-+J'9F_RNV^SUUQ +M^AY&\S?+J^/T.;Y/8V3.8^APF:ZRR9O'Z$OT#;R6C-M*K@M&5'!;"Z++>Z?\ +M*Q"8ZK%U#P<4[3<<UX_^S]#Y\D#;GC\VX5>->FHW\3KR-J?<"^#8/LA7+I;< +MZL3AI->'S6O5P%;7->2WO[!-3"X.N(WJ;!-,YK=<2V-UXX4K\U$ROFP4P&3D +M]<N^>@QFCN4&;:B983?2#2C)7.2R;J%1(TM.<Z?V&X5KH**;JUD2+YG:D6UV +MMF=/?X,R613)\=8^_OS@H,<BFNYNM;HKTKA.7/ZYF19]FN&9_6K?:R"$4U>7 +M)Q>@R%S0I>QKQ'0G:,P-\=(G8D:13MX4ESF,K*QOH/?M"Q*#)I&L<0V[7#-K +M&D4_78/X'0@X=4)W6M&>&@IZX-7X&@UCF66KE2_<=<8]>N<S__<:Y-/)DM81 +MMW[(4_KAPTB6W=K$X;;6!]9K`44_G9:PEC1F,T_T'K%V_X=GE0=_JR6]K65, +M3KE]:,^*#\>K#[.K(P6+DW5>@*:YDR6LTNRNK4P"MDL<P@(W3BCK$9Z7SOUX +M_KK643_\M:"A0#['5D]RCU;*<V^8C^BUN`@Z2%"*AU52T3_J)!WN@[?6#/ZC +M6'!\L<H4<,4,F2?7/5C-[U:UQ9*\C07#WETPX=J)Y>J&:R#U(U.`_OJ7,M,J +M=OL?5SV?A:>JVM:T&N_#4K;S6+>]J5N7ZX5#K'U.[9);=NL3AP]2'I-2#XZS +MS4BWYZQK0;[JM21OLUA&Y^H(D_*JXVK2]"4S6R,VG^#C/EK4&H0LUM_."K?Y +M,):ZH\%CT_;B+-K&LZ`>:QQ;=E_.V0P-@")'>:P;6L[K[,'>ZMT28@F[L#^P +M.;"1\3K;F9Z5L;N@.T!]((L3&UU;#=3:M-DJ3)`QM'7W6K?`5^^K39(]Q(^D +M!U0':@]H`QYKD^?UF4,]#JU40-K<C-+;)MK-6$>&R5T&J%B_6GO.1;*XY\NJ +M9O(]D8.RIA_\*Q[R8EJ\F*O\-6FZ3L)JB:,_W!]4+W7`^9&#U26KZ14J1W_- +M6UC5'B:I-B"=1JF:G@OT-2M/[W'P-XL3\HV^\/6`$>0@:DFFB2]L"X`^WJ0W +M8"?)&U7$^6-O\!\EJ4K!UMU)&SWJ!8L;?,EJR`L6YY=6FQ*>&S+E:(;R0$*G +MVKU!&\%(!@B;6Q+5.$\M#J$V%+XVH36N\:JY?]`>"#?0FA<\4#Q`;4&L&9R8 +MC(P?_,FT)'?.1CL&40X_7$WE\&K$!^QU";`[U%$1I$/6]0FP1_K:<K/G7]=( +M)0=[6`BOM>;1$:$!@A/8O@JQ^K:PRE\E$FO>6Q=XE5RXT!%?(ZPB)BNX2B82 +M]U::^?YE"(HLDH,_-U36D8NTH2-(^F,W[TPMMJA?H:H-!`3H/LT(;A*N79T( +MC$`S@1(S]",FF9D>./][73^.U]QW7Y0/;*CI]GI#/R^D%[`VT(>ZG$[S`=S0 +M$;.!^U`QH.;H`WWZIAN_P0>:#\)`J=K*@>>#YU`&K:!GJPG&#;_0?Y:!K2&+ +MN"/]*WFG<N0!ZTCUT'RP,B#S=.+XH#U0=KIQ,')9)H7O$%3-5R';)5V<1"?F +M@>N#D`-UC%)FD@_P#A0_"]$DDVUB\S)-L6#D`/;!ZL;,"=E0>9IB-Y0F6&TF +M)\4;>P#\X&6!^/3"_T@?&#CP]=$^H-N'D0LF-OV!UH'S@QHVH@/I!_H']Q(8 +MS!-L8)UHVVX/'`^T'.:47Y('^@?BTH:R"=J-J\)YPVKC"FOV>K$?@#=R)J8& +M_N'KYW7^H/::4C?/D!G_.0"X0V[52<[N>E$9H&CTA&ZM6?S.Y<V#^@>N+;G2 +M",X#[(1B8W>D&:,QK<Z#BM(XE":\#/@W_2*$71X\9U^/"_8;<E28&\HXAZ$' +MJEWW6J#=P=RZ('AZ,,N"+K0-&#IPEX[$'ZP-(#]FC&G]%%[9W7J0?.`)JMH) +MBK"7R;Q\JHG>CHQ&L)I4=/8)0[EUI-$?'J@FX`:X'D:)0F++HTK'6O!UVB<1 +M17T#8@_GH@W<8X9M&."LPV\-40\YHA&T!G0B1WJI%_D=R[4'OP]L(^+(*,&' +M(\CHAG^8&V!KP3*X<IFF+J3NK>`[G0DTI\B;>86+\3/$-T7+(UV[^@<J<XOC +M3FG2=2Y*RU!];H1&_!R&A#1`%>!XQW+P`94/UQ'],@X(/<A$CDZD9G]2(I@> +MST*)B\2.TU(O1G=7.!Y<^3C7PH0&4\\/]HVX>I4&3?3XAU!#/OSY&/"A%"@0 +M2'+XP?5*@G+`58&^A+Q]H/E`5=#=:`%9XO+';(4'K9\C>_YP62U(OYJ6KVWP +MG_Z!Z\!TX.;T`;YE7+R=`U\3[_ND1H$[(3T[Y#^LB9P;>N'R9PWU0-O(_;+8 +ML#^@/8AH%8**?TUGLNI#26I&U_U+H35M2Z6LWFA=QJ1?K4M5I;E8I7>L#J0C +M'85SK5[NH7H53HU*;`5\MFKA&553L_:@RP8VE!$QJ7]IK/Y>-"R&H%Y5+5:X +M$.V-$\74+WI35(/ZOG1F]2P:+4NEYTM$&_74NA/^Z(6^I[QIB:E[D$:0^(?/ +MU(SD=2MDM2*WVB&];%/3U+H:D$`C!K2XU9P:^-R-&^8%'T0O_5+5$P$YZ5$_ +M)1+W]RA%O;U+H3Y5"&]+4NA."H1;R2>W):@*TZ@9MFH6MI_9K=@K"T*_H[(9 +M@A%?!KRW8L@BX`YV@)X4F,"IJ`7TJ6K.:@G7E:@+PJ%OHG5=:`EHS4INL\\H +M"-8@.^!ZR@%OZ#J73K27?#K5ZB"I=01<&A5TU;S&GI\Z7"H5UG:$9T="MIV0 +M1WX,T-R7X7L<_H9.JF:![AJ!M&ZA-J?HC4$9YY06!@,3?E"<SJ'$W5N*)\TT +MW]S45.S+^\;4*>"D_8HARG=017EA.+P%K]J%Z^#3DNCOO)"[:!%-W@G7T2]^ +MA0DX?A1#X#DQCUY^ZA'+)T2ZF*(9FZ);$41*SE"/K??@%9\-$Z"^E'47Z@M_ +MF)#=#GVJ)-%X<BE],).SOK\\_SF%8^?JAOGYK<J)AWL"!6,LQDP*'!O5$&QU +M$*\H_B27X?'9BLRM$*8^XZH_U8:-7XO1"E$KH.^W[:+,L>$A;W!Z,0*80:M" +MEF(<8>=]ZB:QLMB4V6K!['QFH3]0>BL"G*1,.QX/:-T>D;T##A?XQ%+??\J( +M\EB.W7K<]CY\*G^TIUJ!<>(8O%/UF2411%Y]6=:*NJW`^]&'?4JJ3L=X@B^7 +M@RA^H&9PV[L@E%%WY$!H%V346,!%")=Z`C?[Q876#T;.@#ZB@![I;H:<=["* +MF\C#MMM_O5,2G;DME].--#S6@$40_LZ<C<W%!<NA'G813K!I%%)W9/#^@]7B +M4(S=@>=IA?=T+6))J/3$:X"=@/0:SXR3(Z<&]+>GIAW/)Z)Y?'0#-\!N(55: +M-&4H1MZ-"F[]//H2->)X+[:%_:!SYVAJMH5_]RA'6N4(;TZ%^:!]*"03A\]" +M']^A7K]U`3V<+0CX.^H24O%`.5Y.IC5D180;2M::$E;!0?P.K#QH(WM`YC:V +M-`&U=`MBL0%T*`=*X/<G/(8^,O;6A7V%H%J*@'+;T`\-@K+UH!J*!_G4F,?W +M:"IWGW;R*![3_>G'+%4"-&7;W0#,A0+8"@)7$Z=[^-71OSM.E9^Y&G6^^<"[ +M(G6S4%5M)%:]0#KX^G3&U""Q'L3E_15+Z)+QM.`DCWHG@36^TP;-:<E2/U9/ +M"X@Y8/R18ENYIQ+GN12ST!*V_3#V8,GB3;<Z<4W&E'+;:<+]=.,Z+3K3^G%? +MDTH^@_UWOWU<8FV`XQ]UI4'BD=MR6\I:[K><M@17!@3YOJ"+05,=Y#`Z1\\( +M8W,4L?8>.?[!#S?#/-[TZLL_?`R'LUN3C\;#LR.</IQ4WU]R9%C]J1N8I6G. +MF-.VGOU,2N1@W:0Y=1Q,S>4),B+C?U('PBOU!M:V2TP:VC3'PT2_UAB1D?70 +MRG7(5*('S:8/[VF!1(-=DJC!GQ=$>933M9@LY9D-F-U6M]T[I>=OI6<*BL1\ +MJ#96@;D)B!Q?YCOKTPRA++R6D[Y;ZLTZ5:N53#N2L'7'9[V#=0&/@47YDRY$ +M:"'OV0'P5N5I`W/TS627^V>A?5,07X'1`$USI@7U6F'O9;2C.!!G`^HTS6*6 +MK^1\\!(@W`//#;Y!Q?$.YG2!Y/2*[$2MUHR5L'LZ9K)(VCT:@IY#3$;_2K/X +MX'B@^V`;,/+'V.1I1)_;"C-W$WRIQO\KI!F<!LVC#=[IFL#E]@J*MK`Q`-9T +M:^C_=S_-\P_3?2()^,YA<-$EXA9RSA/H2L_<?3\#P-!<?499YN4FL1<ORE)J +M)F\'(31W'FC?6[G^+#R\#P#X^R;NN_A48BEN7XW\-3`Q$1$RINWU9^X^V=J- +M"GO>`Z),1<ORB&0_,YLJ8#?+H+C]KIB,W&TO3XWDV'$W=7Y<ZX$J*Y%>C=9# +MDCC8;[!>C_=[-U;H_VI0.++XS=4(]`5K@C)Y$WV)-_E@I65E3Y!+JPG)7**R +M+#J/"]WYR/L'D@J''Z/'5^G7RQ]Z?-DS>/T;X!N>+LEE!XWDQ?3^AV#CY>U5 +M=4MN1I`F0&U\TE*_H6,X9L(J5F<_DCHZR<K:W;3O]#?:HJV+]U`C>V`S-ZHK +M7A'_M&45)[\`8N?&M[URK9^0/4@&E#Y/&L)Z(+.S=/Z4)3_RZ-\O?14(_5"+ +MPM(U]NL;7VX=GEMG^W'C\BXU%9V"]E^G=6?\[<<AA0!NR_-!>?\ZC9[M[Y!> +MO9!1K+PC%W/Y%RB^+]=O#+-DH[E:-TS])#[&L/HQ'']JWY.=J-_I\5HP,BP+ +M/;L=G3Y+#GIWU0@?&BNX0(A!5^G](OUWS:"X\$TW'L\&,L&?D%ZT<`M7B_:, +M+TM&WTSAC&\\?9$2N_.,M6?9X6C:SN%[)NME>C[EF<%JG:C:NZ&*^:--XK^9 +MHQ*/%\6C>M9=&$5UW\^`G+Z=N1\?Z2`_T$\QUN)F/M9V*RWJ!9"$_MHQF)!T +MFB2N14KC>'Y"G!OTD+ZV4VB%9^EQGE&\."VG!!:W1-ZKWLB_;1&F*38Z)2DS +MH=$KE@]&Z(EOOT36+RNKT1&^$[/'@NA);/Q*A9"H!&O@IWHU;@?LT(K'X+1* +MK2#0_TX%P!\S0AK,)_V/1KM"'TVA!N:T6+^HM'_*X8"T^)1J&/U'HD!2^#2% +MD7\I\E;``RLD^]/B2E!\A_;A/ICT?O/A]=/JY3:M9+RH"%EIV1[^-L[)A8<> +MB4%/"&L`#F=`+74!"RG\.@3&B^)@]:QZ.3H`^_T"OCKWOR7KX$J#'"2LY?GW +M$RLE=>J(U%)!4FA'G-BF#&L(#I<^+%PQFC*+_[<^I!Z3$_./1613F9]7)Y>` +M)8]Z?8S0CI1JQ:'2NJY-$TA:LKC<*JU^:)T*,HO1&A&>KSZW:,@)"VKH\\][ +MP<Q(M%OQ9\>=?SX>#&D;F\9XE;!1&!B,G'N^SU1T)YF@8^8[Y[`'XF<'KEE1 +M'9^Q!R0"F>KOV.V.P<,T]B+X@.R!O(V]("&!LP1BL\J?<V<),3X;II]-%"^3 +MXSX!V[^P)I`B^J[9US:P+"#IPD86-MB\=.AT]8!8@?C`8^")^#0W5@"Q@^@& +ML'#T#6#"YG0(,_:#UW+'+D,"%0Z"`:&LZ`(Y/*X+=ZY66,7[/^X.U)`-L.U( +M)_30-]$F6TH#,1E+H&M$C/HSZ;EVH,`%IH%!F^$]^M:`9!O*/Q_43[BC?P\^ +MF\A(W/H7#R)XENZNX`CU)0":LXVO8"-^\,\1KJ-IX"W@Y@)3Z)%>GS[#INX% +MQ!]0`F2JTS<)(W:$7.?38QTEGF=6'H_N'R'O#GTV!G:E1IO@V\@"2!ZA5U3H +MV]\!$_U2YT1M/9Y_052(J_B!>7/CKE9\+SL\LB>L]?.DV^_PPLQ`@#7"8Y:9 +M!N(H1<,Y"HGS/[9U=KDF#-<.VS$Z/.A30.PSA+;P;=-H4V$%]6<(T%H1?M-" +MUDC+S575]N>%]/GFLR^7XB9B/11F3@.1%KN5SC#ZKIX#1NR`0(1N=:$<JR=W +M\8#Q<V1B6)'`SS62&])FR-2/@]5[/M>:=_A5=59SXO%`9`'%!*_.3Q$\E],^ +MBI%LXY_3[68KO34G^-"&9=?XJ3R4HNEX^D;^ZI/.]N1--F2`14[_8.:(;Q@$ +M3W^"(^&?8%D9]/C8&@)>\`64'\M`+VX"'!]W0!K0-^V`B`9L;=>`BJK7PFW3 +M`10-I#U<;\C0)H7W3DVW9VQX#P\^H"-GH!MJ-`FMPT.?33*G+^2,_H$T.GS` +M$SD8/R/!9EF?G`:%/8">KGQ=NKH*#\2)XP[<T3H]`WTJTZA^TAAD!F:L]39Y +MP>?>:!-!OJ6FPBMHC7(+_L-`1OH`0HF:5#=0`(H*/1(M[#,U9G%9Y-V*9?0" +MAB!><^YB+S(%T!MF>&E:,SZ40O]8%U!ZH(P3^!\C=_P!=P=]G27,J9^>0X_0 +M)JW>>SJA4>.#C`+T#\26XM]XOH7BP&+>8$]3GPF,"]W[.MY\Z;T#]G'/`SZ; +M@9LF=(WD/]W[8!X8/,S@;$CG*`(JVVF(^*'.3`13A^^0'^$_D?XQ.=T`15I< +M.1,Q,SV@:S.B]9QPD[(`84&SYP7,@1:\\,W+0)IA^GSB(EVSIL0/:@(I1*3- +MI0NZ\;]2`BJ7_US;\2"[9`3YF?3;Z7KD?@/B:FZ.ZYX'"+\H,'3@8L&WA-G3 +MP\Z,_<`BE8ZTB+G?%Z"]S/P!(O*9\+(9Q;R0:+-!VT+ZABG/9,@\P'XLT&Q0 +MG%#MY(GJ5L:#?AROPB_@X,U/;Z`,3FFE$2NQZ&[F`(IXZ^1,H_^O.V8\'B?L +MA-LBZPY'9('6$VK8'I`Y@`Z7*,E:'#'I@Y0`^SKR/ILX_9`GW9UK-$4Q^R9+ +MV\?[O_&!ZX-M#^;GAR]T#V@?Y?LF4>\\G/%@90'<9D37?081_FJ`,S[Y#G\R +MQDR1&F6>1@_5O!OIDJ\?/,?8+F:&&-AG[,]R?)'V#4GZO8SPH9U)X0L6Z^W/ +M'ZVW7POZX]NO=NQ_.MUZNF2L)=J)Q0;DH<_O>;I9#6PG"8*EYMV,#V;YU7G. +MPB]B?A$)NF/Y9?_Q[AC^#;NAU.R*YL[!7*T[.=WB^,]"7[P[=?[<7\\2W8!3 +MA#E/`$\(?V3/WE'3AE__/-],\70L/Y\DO[?C>ENRPK*OQXDN2VX7:6>%UO__ +M0GJ"I_C'#L,W:K#)VIVZA73LF+A*3<E-2QN15,K$5I+\4'SOM2^G<K,S4E+3 +M&"=R1?>4=EY(8G<W,NV.3&XK)(3#N1,S2DC.X+!2DF=Y%?5Y[VYW>[W.Z]V< +M$.K<CD7D8>I7(PR&Y*J;'#%Z8:R&$9WV4>]!H`QZ+U1]AEY<H-L<5/&]YZRN +MXHWM,V2%:;NU*\BN#JZWNZ70K%#.K_(%_\BM,+3109)%_97K%//`*[+&6#"C +MK.8,KOR98#=WXO_*UQ4:5F\,S04B9V8G#,[JRE]\),3.)F#=92%Q4X4OG5D: +M@1B`[',3I89*Q7^=8?E_O9?:T+0T*RSE]S,T\:%#0`_L5[NHAE_%Y+NT`4H; +M:'>X&-U,RK!VC-=C0YBB_=E$0HGS\CRSO$RQQS*))G"[3$OBDBT5HE#'MF9H +MO[DIPIT3DA.*G/]T;I+"V#*3)3;%B/&Y'K]J9!+M#8:#UJ2)^WL<E/=J+W34 +MBPPWN8D)$SHG)DHR88K2P,S#Y4!A^Z;8&V6DS/V6DI"7,^S#S*1<>:,F%9[7 +MBS853<DIY]&LX-<M*.2Q1W)EZ+$5MPI2HDL&R&60PCTR2[`O[*H]VC"')I`3 +M*"BCN<&*05;X!`I7$4NI(K04T9W+(':B\I4S$.H?+#&;E,I*])1[@W)*?<0, +MP#292--Q9#!16G9Q@L\,4+S9H>8DQE;[NCN2W-"0]-S/R7O.YL9=E_#,K8(8 +MB6*B?*+LFQ[%0G.!T<E3)03`'2I$&5""KOH*8O*8:B$76]7&\76W70L*]R4Q +MA>5`TK-)&F$CF8*P2V%E$A!PR4%F@>2.S$P66'96/V4'%).9+#)H?8*9A75/ +M.$188JTL/ADP[9E?'R7E*%+US+9WID[E?0@K0<GTVV=4F_72Q*`YA^]Q<):: +M?4R#/268D'I!V6;*8<S((Q,T4K<$P+Y2/^5[15AC#%^*P]T69_)[FT/*OECE +M'4?D,*),3;+E80-:!216:;BRTF9+J_$L@UE`B2,%RIKF(\8<BIM'?#ZVN&/! +MF&\X8C<J[YF%7U_F49S3,+K*8D\2S,@=W=CNV0PLHA@?7ZD8',$?DU60ZV&! +MJ:U1W8*4G'9N4TEAC:,A#$U,2IFR3PM'V'LXJ+BIY3IIQ\R<M*FY0/TX3HB2 +M(813\H9B1&-ZNLR5HPTA)%`L@7E$F=L<I?103@<"5S6*Q.BP/;'9KC/.HDL' +MBE'$E!17-A(DHSXB)G9B:D)J.+SJ3E]I+!RQ7S$FY,_BF*EYM'47E;LB))UV +MN'=Q\>[L1?\S3H=P\.S`Y0ZST1!^6!5V\;,!>5]1#A?7=4'DF@XFIU?$H6B_ +MRAY!2D+3*.](6=$P88HITY!;B"SF*+RA^8`M.,[[9@RI_5\9"^%G9L\U/-3C +M%)I8BF^:./(EY7(L.Z:>$'YP,/8BQ?IS$RA@F=JFI#"G1S/.*,P]-I`L-#NX +M9T7\1QWQ%>"P5+FE(*_Q1>P6#/.!IB//^,DX[71]<KZ/F!4!*A"0RC(825>Q +MT8,&#^/091DP"FUPQ8HF`Z49$*)-_.?_?YHJHY#%_"@@KTD$\K&41%-NPK7; +M#HU&4VRQTIZW4B7D]O.X<H4A[X:6N;E$%:ZU.HL<AOW+JMDOBXUGIQ;V$LBK +M?A9!/5,M,L]BV>@PN`_&^*8.`P;E``#E``"```$"44\WL#A.8`#==ER(]4(L +M5P(;"X'V``3HJ!;M@P+]F?Z`@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U +M;G)A<C4O;&EB87)C:&EV92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-XM' +/428#!00!```````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu new file mode 100644 index 000000000000..1e2ad0cf9833 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu @@ -0,0 +1,345 @@ +begin 644 rar5_multiarchive.part06.rar +M4F%R(1H'`0"V\\:,#0$%"`,%!P$![_:`@``2\>%K5P(;"X'V``3HJ!;M@P(] +M(D2J@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV +M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-\2/YDWQ,%)DI56J+M4UB8>R +ME$,I7L,7KCB]D//65AG,S3PTQU3)DAR09O+RB+DR4O)*7P$J5RX4W*V18[([ +M-RT7S2PCM)EG!EDYU;\*BEZ4I"3T=:)8KA0%L,NRK(F95"@D>0:RH<J@QPQX +MECG?64FOF6LZ+AITDM/!I^L3K"7^+^1)?_$3IK_E/.5)`C/*FLT[74M,))R1 +ME,$;M=%0?NKY;KI<[A@+W>[A<;?=B_ECPU^BO#LC\9(L0Q!CJXL&M/RW>PJO +M*WR?E&6;\LJ5.\KA[PG]RG"0+E'Y?G+*&_>6B^WY2^H%RK7/[E-T<<K*D!Y9 +M2G]RON.>6M#7*C<VY7]Z>Y5$6]]Y3/GYRIU/SE-HNC]8WYRU4OSEQXO:_'P% +MI"GN56Z1?_*Q_?G*=??>7/=_<K3;YRK#0+E86PE3^6]5]!CCE?22@^@'+@1, +M5(Y5KF)LN`<LR[_Y=XWWETE;<L1;/;3O*R^<<NC$`Y7KFN7`Q]Y8P*<JXSVS +M\Y:"G'+((_N6593EY=5Y<!5>7$:XNIG".['>;)"F]RKE^W7.Z0K:PN;S.X7" +MR$T6M([H]<-,OV'6'"SDL89NL,/9HV;9ZF)[%QO%XNUX+VL3K!["%-/0+_\, +M[+RWUF6_Z)V.(*0,$ZQ)NB%IU\MWK;VSI9GF%($+.*I=DUA7</-&L`L_2=?" +MO<W(8(ZWZ[OS![\WX;NUF,9;&O:(+Z*^KA*2L@4-EKP<VRJZ%HC'9W$4<CF9 +MNQJ/S$E;I2RE6:922EI7%.S,+N8G<+(E.@U%.?N8>3O%%&8JA3-X-D&%`5V1 +M#=J/6N8>3186A['W86KBE_Q3-C\V4]%2Q8^Y9LDUA]0^$&.]+)@R*IGX>3HP +M+2+$$0/UJ5;6`1-SIN8<V5G62-,&2M1:INP%RNJUF19MA:Y8;V.-Z4GBDW.S +MC*SU(H(!W??8)PS#SD,(:E>+3^N^YO-PO5NO`Q,8B6+5;^%-7><1(34L<&,0 +M;AR_G?SLL6'(A->Q#E%ZUEBY-#R80:,ACEN%-7EF]+N_RA;YV:FCP>:JK^(4 +M")U!MRQ",`YB+DHC3:#&ELJTH8=ED>G/Y-L#3B!@JOW(S,V8>+=B#,QR#0X6 +MHS?84)Y)7G[BPMX5O+)P#R(+1FF44["Q43YOK\9*PG[B(@B9V;FHF9D?%57^ +M60RQ9I+XI!)L:%OP928+8,18X&$PLM&":,>,5EJA679>RDF8^;$@4X>93'*@ +M[+HC.F58(:.DS)[NT[.)5C8ATQ'DZO7?7>X7-CV+^7%G]'8"DYA<,RY<!<+C +MW-[[MU@+X4%=S=KS<[UX.`NEQ+UW1IM*\[S>L!W5S*QWEB32@8H<MB'BB%AY +MTPCFL7W!3ID5"RJ2F0869G!3!;!4DVB/V(KO6(LRYX)7MA2_^3O5AN418>^6 +M0`,C_O1I#*:\(<H'J4A>TQZIC!,J_KW!0'%1DFE\IB.17(3C@%-1%7.580G. +MB::H/RN!5)2REDY%3/RY;"&+:1!ZXY,&1)4?-X;1M*.EA;7+)<81RO"$Q40* +MS;)%QGBOV2EC*=Q;9K5K#Y+@Z-;-%SNIUH0IAIMBR?UZF2BM+G32.Q39I$=J +M=M>K#:#VF;>DD?-8LS9I:MG@K=),(^VI[P:?1-7G"2V&-!,IAIDK>R`+Y-0O +M'&EQ)C=V.PR;,XE-EHIB^K@@Y)[,C;O9BA9DT&<-3TE@*REL"-+P5MB(AU]/ +MY\_H1OZ0#\_-^M>C,Q[->.2N\((_JL>W\?^[ZZ7N,.K$\ZN+U@!5_^X9_&;, +M"-:U2;9Y[CLG1JO'8U.96_97?:#%D=11W_J58Q)>@\Y$Q^L!%%L80_J%@$)= +MN[D)$J+C*"\051?)LY=-&P86;&9M,`'M.7M'<5%E]60U7+9%A0(</HG1-C'E +M*^RVL99LT,>DS*2:9V7Q3"CG,8IE1):GS;5"NW?:MK'Y2P)@4TAXU;Y/4\Y5 +MJM,=%GI/6>"GMBWD9&QUFL]HM+'-2U8X9+##65W%F_\452KLA73%%L4:8PC$ +M.LVB:99\.P.VFEJU-B<#L)5:J(9IN21)%(6'.49O_;"SR[-C1/#]A;/DPD0: +MRV#USLLZ?Q$SA#1+,O@J+\K4ERL@$\,-`4X4G9AAQ,6;PSV-.^Z?H9;OYTV> +M1Z\RQOB61OB4.QX!'4CT6R'7CJ6+(.FBV9G8Y&=E2FVZ(B9.&2Q,(LE=B=Z* +M)\M/*58FD)=F[]VN\MW^Q3J5=%9\*6&G1[>4N9H+FC-+N;+"LM.8I`":GIY8 +M]VI'B<-2,3=^EO#:1)E36%5+G_6%6FUBZ!OS^YR./='SL_2Q=42C(:-=D6B] +M)A4DSO23E9?"E_;B[%S.4]HUE;4PP@V6&LD>86D]CNUE0\PI2"5&Q+7X;K#/ +MQU'M.5F6K-X-FH?&N9TM+R4S-#S^AGJ(OY5Q&>'$[>TY2;'>N&ERK5YHIV.R +M&LB4R64.H>WEJ-$2S$_=E:"W)V[PI1`[MBB1L!3=AF`;#*IMM/=RFB!)OJ=3 +M85354>'3"8R";-TEM_RR/PF6R?ZJI4/V3"&IX(,BE$JHJQ)T6&/79GL<IA=^ +MBXACLZ*F\*6;&>AS0($!<Y26U6`BDPCL03*.N`S3IYIM+N=*.\SZ5LO!ZAKX +M2;AI+%8;V8@)6#4/^QS7MV.&J!U%GM6:8VRF7YS2/E\U6,A6T<BFC."HMTU? +M%):+##"5>L/[O'UI>"&A0Z:%^_BP:TO":G!X__9,@Q"?PQH[F:Z^BD45SL7! +MPA3;FYW#,+J9:@H50Z,REFA)PTC6!(LFM?__WAV3$(3]`]I_$_BQ;H?W_\.= +M@CD]Q\."7_[]*F7'Z4N/Y9<?X"7'Z4N/NQ<:3_`1I/T<7&U)2G7XX60']^4A +M/X8Z3/I0[.%D.BTJ9D?X"9'Z4ST5+YGO^_G29X?I%"U29?#Z<!;T&)_?&(23 +M_\:7R</B>RB'W1!$IP+,R0CQC]QB;.9AVJX5)8:6F6J\Z[.]4%(@CG;9\MH@ +M53`2D4AHFV'TU'@M?]5!;]CC?T(J6^F\,OL3*+2K5(YX/2_!)J:^GT2WCX6' +M@^Y?Q)5B`0Y<&Y%=I_VUB+)KM/!AK#=Z,MF#`(+8M3,#,8H-P4I,%#)KMN*G +M?P9K%%-;D&(-B'3:&E149A%R.!V,/;-8I:3B&,H"PQ<1^6R/=V9;NI::+=BQ +M>?*LTH[!OQ_T7T!W8F+V[L1L-MHZW4M,8"5.\8!:QX:RNX9#0?(OA23*;50V +M30[,>C-E2BM2]600H2DV:\OC78?,"RXEJ8.$ZP;<QR+B/L1A7UO&'?53EM.: +MI(K-WS3HLLA-47U]?8H/F%R#4!\UZ,X69Q!X:9:W=BB;$>]`&OH,L$31L4QS +M?_SZ`#@C"SI<S,FU?J/T0K':SC:^_I_4MMA&_]C-VG>[6/,\`9APLW@K(XN= +MYG()+L]]9-3_U5QY4PYPU0!)FZ67L:)UM/5O+8P@2SC$F*+C(9L?:I3_MIG5 +MN$ZA`9_W&)!+P\([(?`Y?]^B.\?PA-/*,=5)@"7>?H?QD#)$8,QJ7_C6#'U_ +M=7W?L.LA.3B^BY[EMB58J&<F\,#8DYW[709A>!$+QFG(?Q<L7!_DV(GT6UW/ +M%*49S1@JD`G"B<B8.;/Y^S#+Y,8J)Y-X(07K$//]1+13K4X8!_VX),@29=[Z +MZ@`3XHR,JW,".]X!?3^.@IA3WQ4P3DTQ?JBC`<.1M.!DM[MM#+4N.E5Y-I[Q +M/\"+B"!'#S.1Y_P]44(?CZJ`2+,ZJ4)*J7]4YQP'9X&\,/>):B5?'U:*FOF& +MAF[\9]%O>J9F39:1'G=;LV+!(\I3%J0^"4ZBX%/Q\59XZ.A73"I_/3C1/?7& +M]6ZZ7;NV+LO]*3-+-W*&=+J0D6/<XN.#LG]BD89K*1UM-?3!9P*4PS-W1HZT +M$^?;NE</XS_G6V$O#I=L-%)OJ<RR4\BHVT.H8YJX9@V1W)VQ9`4<5F,-L,CN +MCHMXZC"L%_BG'^AFL&K,.B+BGD:ZM#/7'1EFZ2-S<FIY#/H^+:CN1&!EIMJL +MC&CB83Y*MMFH&Y<WX^SZR>X[_L3;W@+HO0?]M4!G@O<KX1-V1;>LDQ+B0.5= +MGB$7JK$R2(M6NTQ^8%6055!3B@,8]/V?>:?DE3E5!3CR?M6_MZQRX'BY.![> +M"KP&`5DGH@%5#/\L,4`#!4%C4*1XZ6/WX-.P2_QA_!!IN071\A%T'^T70?C7 +M0?J70?K+_6395:,Z0D0NPVI^JQT^JDJNI_V?>=*V7"H5WLG>J2]I4"]0@079 +M]#*",J=9Q-4@$_TC(""%^52X14NIFIJ9D:I'B<Z-B1.#[(YJ&>CBQ.#Z6?6) +M-/\]'R,7H26@#+7-'4J?HE2%XAD)B,74:M'+69:%*)G;'B6+"DW.)Q?Q*UU` +M3KL*D#0J729,9&+P7^*8Q>4?%Y*LL!?^IAO2'O3MIX=VQV2C/8Q5\X\!^8;C +M3+/,I<TX$0]O0T-05(MX+D5`![ET^,I2O,^YS"*];P,P>)OW1HM'+69:%21, +MT+PY<;T-B.>,D0\;$.\2-SQ)"J,<93AJ6#.Q@U&-@M&*`(DJL:#,Q@>,6C!: +M,6C%HQ9/="H(NJ4=+1HB5>!GBS9E)IX'>+/'!`>+/%GBSQ:-1^\`T(['2B<$ +M,ZT]#-:-Z-NW#;.%X\PA*RY3M+2V<SFPN:?>3^I=&&DMU$M*%?_TJ7%[Z-H^ +M;WT8*487^&XB7N$M-0$P&3JP`2468?2B=',@F[U5!3Z0*J@)])JS,B3>ZJ`D +MG![\KZ)5G.>-JJ=J=CB">E8'M'2TI'@"5+\DD&/:-D*FW%"0)E#@W)%3GU`E +MR_5*5":IV3>8AV%=&T!3-HN%3X1#^`[4==.KA#@H=%`I^2GR!M/^WC,]LJQ, +MR<ZH#A![:E7`#HX%/R495,41=/C.ZZ(&F+JF-^SG/'VLA"L/Q2V:2R#>D:RB +M09K+9QXD%,B]Q'A%&)7(L[\1!3[R?LC9@%*O,VD*#T-=ZP<HS*-4OM\706]- +M/<%_ASVAK_/1<J7\M,G#.NQ]UUAG3Q^#R\$*",\?4,4ZZFXWW*QP9WU4P-`B +M,00T1.SJ0;&/Z@YJ)Y/L/E5EYIZ'-;%LEQ`#01H8\4UQ]')[-&QI8>+I)HKW +M0KJ+>-R)C8@N+C6A3C8&;E^NHF\:)8=]@=XV`C<9OPS$;D=%#$;(E_(J,$1K +MW%W[VKUAU&N#PC@2K_314I$V.IX_-1/I]K>;`.5?E1)(*`Y;!3$R;4-U6!V) +M,[E#FS1$\7T_A/6:`*[-3'T3=`.7EK34F0G9R9AVA]:LPBSN)8]G@5"35(!/ +MLV8P&%7!@(@C?E66K"Q=*XS?Q$XD,$O@MV%JZ5S&NB;I";@4.3<1))@/#SL@ +M5YRLL4/V\"'92NMJOQL=TB):?I5)C"S<HYTN#8:S3T[9H=V,OY9&&V0;@E4+ +MHGR5-+*;=;[HBW#THK;AJM@<P\Q,P^%*"R_A86D"_Q%VFB=,4AJP4?W84V'= +ML8ZV*&1CJ-$'40),PM`PO4V!YGM0#F>PX2/T'/$I6@6]VEE0%"X2NAS&\EIM +MBD-?HY6Q+U5'7`/R"2UI>+1VH$=^0RAG+HKXQ#Z`P6W))LPI@^CO-`$="2G7 +M=5IJ,JU#@MBKY;'44*"O>H(:/9^0B`EF_83?D9#8N6[#$RJ"O]++X)%E1A), +M:=`9LGO`&8&1-4[U)G%Z-="1VA.B5#O`F<V!1J(*_;<1%J+[+_S1^?LVBJ0" +M(Y\]$L7.(?$336@F^&D)-H*S9Y;Q7M,,:)LR[&GMF"G9=F#9MTVAY_6?,R-$ +M.S@+^TI:N_'=F.^MC($>,$&^DBISZ?I/,>GM'^3IB4PTMAE",>"7BI^4B=#R +M);_9;BM&#C&((^Z?I`JD`GZ2[9O45A6P>BQ:-'&-I\45/`1/"-$QHX-P_CAQ +MCFA>7ZO?=7\(X2A63>TM$7:7C>`[,.-F@*4*J`*G!DLPE15NZ5JI+.H"&9M" +M@\/<0\.EN-289!2)DIKM?JUBJP"<5715THJM3%07*#\A-RA0D:H'X9T^,):J +MY%V9L.*HC^)T)]72M#2QJ,VU9'/_Z=Z<U7O3BHA9)\T!$F'AT115&*=0B"I0 +M*?:U)4!D'Q>I3MLN,.-M9=51`$`%RIAX52MF-U5`_/2R`*H!)]K!-3QIC!^< +MOY/VVQE^].(5GZ+35&(F,'GT9.$GU:/Q$DIA6EC7<\=I?F%;&*0MFL,H`1JB +M(CI9K`S/:0L]BF4G%*RRH!'N'`&3WLU(94%(ZF2"4J=+=G@55K?X\6QN_6X^ +MX"!0W$RK7>T+]Q5^7+:U5>Z?$-R73XRJB.TQGJ_;<6WRLXJJ9MM$?MCEX<1* +M*F0Y8VPMM=#^%FG#1P$2X`@\W-2^LL3*](2(,ZS6*:;*,3\'YI#0WTF1%N-) +MHCOEW;#Y6"+5S9Z<9R1(QVN)KGI`%.%)A5TNFT'-!^XTI9>+P8NX^+LY^@Y? +M1Y;]>1_Z>$MX*L=K]G@?^'!3<M%7.Z;">:AAU#11O3R+=EQO\SU$P>RZNV=Q +M95N%H*XTB4=RI[$N=Y:;.73W\W(Z-JH0\:*L=L`-3_`!I^&>C0\:*1KIK5HE +M@QSA!$8.%/"=&"L93I4_P`:)QC`\8*&R`>+C_Z+Z/F$%T8/FJ\M3-(OF:RRI +M5#D/RG:H9`*J34A].)@EL%'Y6#W=WCPB@%SN9;ES+<O^*>+1MJLD,Z99G56K +M!>TU8/O/X"N(\56N,^*E`)@A)5R7]MUU,TM^*%D:Q/S,LB4L824F#J1K]+CN +M?"P=I*4Y_V8GZ,2LEDQQ9_UTHJPPABI?M9#2&G,;+ESN(PC,+%W6352P":'H +M,/D6?]/X)G9JB`#.4E3!$80//^NKA,/A.C;_)PE3!4.9D\6(I7%WSJG/`ZJ+ +ML.2<]T@D2^!R2=(PS.Y,S8:=P2$_#`JGG=29EY.%J**AP((>'..(<9AUJEX6 +M154!0`=.D3\R[-`B7'\$N/NEQ^;=+QX1Z!]#.C])?Y?@1W2M`2?2OQR4"L=0 +M%?;==[F$G/,WT$8-,70AGQ=8OA%Q(Q,A-L.B61Y*5.'YX29`Z*XS+R!1P6!3 +MBS`03.S9KIR*PRD\QJ^P<"HNGICR'F8*%`B6,P'D&?`8&8]V(MHA6]YD5%<O +M\B9):BL_X0;1#O^,$)@^SFDR:OU#\0-,H/B8>%4)HV3+^1=HAG58AN^ZM-*% +MTL@SA3X2,)4K'TN@TSZJF@@T-,H1,B34U1?7^>CI._E50&D;EV)=X9U&?P9D +M3.&'"9PP^!GU4O2WYD/ZFEN]@Q=6BTE0?20Q'2!O>50LKR8@W?%R"XAG6/NG +MA79U787K(4IFK3TOH("8/D=MK#B[-)U`<_/%=]^Y=*<SH*DOIQ.GF&MTT%'Y +MEXZ>&IZG*5%./)O!S#2ZGG_H&S,5+'#]+F8Z(+I139BY:8Z.C)9\4P+@Y^7_ +M1,B90Y15RI"<*+S/;#,^`U\++2<G+RBKC48&G,93S-^'8C^[%9,*,KLP-:\( +MJ'@V):<[!L(TH1AI">.@:QI.*SDG<ZBN<;7:D*N^U8_<@_;#Q4`2AB_ZH0J_ +M3PIT,/!GHD0-WTWA9&;(&1V/KF:V(1\"'+<^8E<;:20GG(A-C'V@5+3$2DS4 +M#@%3@$^G3Z-2Y/;IK^MU#\MUQ3-"S&FVRF<.']CH9^18J!Y/Z\I7&FQU/U9> +M!Z;DD_@)P1%>8-"`%T]Z5`^B>UT:6%_!O"W2TX!KQZN3<WO3DV7_Z<YO4J<Y +M8)4GYM/A4G_GJ&/D^RH@$3@_O(^IL;]E!RC`^K):A$MW2?JBZ<TX[<1,NX:J +MX#@-A5=(T!*D(_B]4DOX2TF<./_J0^'.)ZG4:>Z+<_^7/C<HL!S6*8U&<+7C +MYWZP=]3V5VF?5/PB1-U=&6D"H`$_+29J`00\K(%<T.?QX>IT,U(%FIH*?N#G +M:<%%/`RI6$L5.$TNE>DKT?=%,TI<<'$D^YNM$7`M+-G[I9RYE/HLG=5T/_2T +M4K_,:66E`D8XTL\JMI9T7Q44XU,@8<IJI98>!W@\IH;I?SI1_L-%N2A'68XT +MG&0W\I1V`*&)V8+E2HKJ,0;I@C3/5DESNAGN:)IA[J,<!!IF8QVW^VRKRI1@ +M/`8P/&#XGCI+^=*/\<PT9'6B-'.!DG#%!T,R3$#.$9FC(JSO'^VL:W02I0;6 +M'$]TR5C7;4'BT(Z:2K\=-GT5,8L,RN"*Z?%PDOA9B9PV'FIN<G<1B9[%'UXQ +M+(4>^C);,V(*J)R;%,JQTQ(!J*A':N$9U.98G/<CQ]PUL:O*MC3)%N>]FA*3 +M9^"]!X;/`(EVD2G=L,GJ4YI_'.1S)J=+"_HGO34&&`R;'YJEH,G@1!</[7YZ +M+<:Y4X`ZUQ`1;9GTV[K8T1_H!T2DX3D,O!)]"+8$%WBSQAVL4R3Y62E`>30\ +MJ-K<C[(<1H7NJ.2H7C&GS94ANRV5R.DYB&SMMAFV(EU\.F?92D*5#,:X&^[5 +MA^W'F-'$O9Y!N@WYB_(:(9C0VLCN._%OS4\##%4T28X>!F`DQR())=KO9BYL +MT@X3PPW._'=LPE#JH/,ALSU1[(0%:E$MV5F4<PR2+I^R:60P_(49@F19?XG. +M1'&SR`W?Y`:!:>@JJF7!D\FDI3`M'LP:#ZZG#:T(L`<\BV$%0P]`3&V<&SR* +M_G(BZXM$@U#Y':E&=PBRRU/L<+1(,@HFDSGK_9HL&15B)0POZ9N;B)(JS-=H +MD607`(9D1SM+<KK2+MH/6E0H)`BG2^()VF09"(E^T(;_:HMM$_M,BW%N16;" +MS(C=4O2<)%,(D7P7"7?!>0S23B*DK!4LS+Y%_:?5O9[60]`S0DAZ)-R+,G4L +MS).$F*R:\R8]$F.<7%2%3YE!IZ.\M3UJ69JE-BI!H*N)YE1A:>SEF5ER%97_ +M.HJ,2(#,WSA)GW?19D1TD1RBZJSP#B]-WA(D1<@T"2;1;_,]%CG%R-.&9O$# +M,/%C46-XL=(L<DK<J<)$O"F;:R%?</9Q-4N7AQ*:.0ER:C<49V-:!6H/,^[_ +M332SI)#ZZW@,8>-*JPHO&#?HQ&9%1DC!J,?1,C(".T8OUC548(8:<56E5NE* +MO$4:<7$X)CI,YS?F+3*SC68':&C%XMPP&=YU3X9J:&)GI*J@9V/S__FX]@8N +MX^S%L6DN-!)WI''A=/X]A_$055/'ND79[/%QL8,L]1&BK0/:*/!`^V:3&.28 +MJACC*G<A(Z2#71F.BWZ2(TXD?^)D%F='_6+'KTKA0E&C?;.LB3;.E#3=46<J +MU3(JL`JEYUH3G5#&=6K2V&%41O$Z$^D^TG$0D\\0?9(H;]8B0EVHGW1\2#[- +MC(B23M8]/"9L1<&M`#L[>4"E&:4?NN]%.:-`0'"Y8N1THS",SVH+IGL:S$73 +MNC:%`HOAP%D]Z,L^*AI'4R5C:Y0&I)V[;`<O#O\CUL;OUN2>`@4(B95&P85$ +M8UD-)L='MJ\:Y?YHV&7DT0S_&SEY_3XQN#//C*J,[3&8:61.=QZ+>9::F +MQRTY@Y)\S:,6V.7AQ&4J<#EC-F,#D?[^%FG#9P$2X`BLW-R^LIA!TO.<F\H^ +M-\:\E8^E\6OU_B-"36+5S=E3L6J]U<"_D99UK/;EHZT"#>Y<6Q\ZSXOP/"+B +MV9&>^.E34XM3*5.+'PU+\Z\0]32WC4:APM!=/%K0@K_8Y&$=(QKGTL5)_*GC +M9`!V/_T<:P8AI_X^2J9CX#`%7_17]_I00D'_U2Q\F\*@S(QQO<J%,K)PSJQY +M>)YSU/NT1ARQQ@XQHR7:">:M[5QVFK&^)/=?KB]ZZJI$M0HVORG$.S.8M4\P +M6+/@9ACND$)%,]B:=QI\SV(4H'TSB9B4/KQ2V!9[_T88I%L#\BE5C-W(U'9F +MI2<G2BV6+$Q#XLK>9_I22D"X'R/K`?.F)@C$DB[%S:D#%_G4`?RFL5@*35B8 +MF")9#<R6$:(>*#R?S+PJ=Y`RO&Q9O`4LSI1C26'\7QPA\#48*1@F,6C`U.AE +M4<\6OI4Z\8"EF=*,=0!F(?3&1DDV#4D)DEGI>^^T.4F*28F367TH^CBM4$$F +ML20K@B`HU4(C6@]&M!^AA=?=&=#H;5G\;=9/NT).I/B.^:]&D,+'#W&SM7Y? +MPP!58"F1@^[9VD6F]%-;/=(EU"JKY,Y4SRVB<'_`<CY)0#$%55@R;;6R8'&P +MG2ZEW6)9\):IZ&O"<D*5Q0K]L*DJA?ERE\7O9+\;H9GGZ&-TRPLOG$/CZQ"7 +MWB&G58B]5B8IBF*PT;S#PUYD/V5OYDB._K'>;W><0\LD+=2M+$[AWW91X-)Z +M:!*-5,.V"74?4CBG<F?;&U$.F1-:&F'2,<.H,D.I7DD.9%!FQ!*2=3`4!=+X +M)A@LT0K-`RT#+9.,FCG
C1J9RQ&\D#N`X56&,1^;5$0X!B&P2Q"0F@^K7 +MNCT4,XBI@:4HR6"DM;>!8=2!F#;SC<WSC9Z3/-"O/($\I[,P:=PQ#9Y)(F>Q +M#+MQ"7>:<+LW>5V4>=V:>B&-U&.K&6319)M&'!67AR3,\&G@FF,BDXKHV4!M +MMY?,^$DY-'B*>3&&>F5*T2[#7+C$V?R_:QW38PC(M"MPLDR462N_%G_<V,R< +M`\)8IQY.++W@;@@.5(#+D)GVAZ)KM*.\M+8<S<.&=O$>&Z$8]%?8!48"+D#U +M0"OS(%)AB/MZ?%3RP9<*'C*\:=V-XX<+(6*WE_4FR/I23BF'R6(OHA^1:D,E +M/E59_383,(FWAP(KNL_394@(G.S3DF)F6-IS#&'/50:\9`TF,,PP_G1)O&H! +M+]$#"7%Y<:9NR0XY,+MXH)*N]FH!CKO*8&2"GC<$GD&=&@QB209#Y_(Z*X8T +M?)#YODBFHP$5(*GY,551):0P3^%_2DGCF4FU)_L`)Q`(&Z&X:J5)1@Y`L[G( +MEW5R(G(,H>O#R:$1PZ/`E49$"_A[[_%"TLD%I!3_D7GY`'@>H)$'Z/'1-"!K +M<DP6A,*1Z=*YRCO(,]!]@D<A(MNYXUV&>:O4]P=8D58)57L>-NLY3F=LFW8Y +M5LY(QMUFHTCNZ4;LDJV<L:AQ2K9B8&]&/K"ID#E6AN*DDAV&VQZG%0_ZC&)A +M1'BW:G:*%2`$XI&H!F.EL"8U_P!_.IN'TF;%;$FL7`Z1HW[I/0AG;,3Q1C92 +M"8VUI-;S8J<M*\A_BV(2<&QCI/0D+(C"E<$V%4Z+JG2AI<,CQ5E>*8"$9,$P +M53]R.!]<[B9<4EAFB@:?K/MW?&M&&#+)6EIQ7;4PS*9[D]FP:F`C/D^[.TIC +MTDC>V<8[EY4"#61$S`L`=JAX'W+WRK^IIE*5;;VYFGT=W/@14;U,85XC]Q+9 +M`MX,IZ7C./&F6-M&?>+8.699&\8[P%3J1%Y=WV)=XXBY?SD;1=)$:-;A5XW> +M;]\;`?CH@`:B9-7KE:EQ,E_HF>DW1/D0]4P8S-/W+!&,:^A5.GV<ES>IIH7! +MWOINKS5'3WK948^O<4>N5>'Z!M=54)?C2O<<W^>ZK64GMEJKOQMM7M[Z-<EJ +M/];EUO,3_/A+__;[U7?'6^?,=-?\#<)#U/\7",OU%F_Z;B\]?5W3W^J^OO:U +M5^.7_[^$W']JOZ-?YG*YMI[=T3^KY,)!<&OP68T'B0T%[G'@JVZY4Y35JM[O +M52,=TVTT=?SGUY3U8Z^WVL\B+WT?UU@JV?R62[WW:3/?`7VO&7_4O^@WN.IK +M/>Y#`2.`P-VO^EH_/^'UY[PO^/<?1_P'X;S^/<ZO@87!?ZQ?G9_/V_8VBAM. +M9_:5\?C=_G^YK_7ZKMN!ZXG'>WW7?[S;XO8S_J_I]'9>UW4_J\]\=%M-IQH_ +M=%%7ZLMXESL=JS4G9H79WKXLKNMIW-BM5SVO6_?]O-_>AR=-1T=C==##SF_B +M=+_:K5YUEBRL?S@J:8D.67^I!8K05&4O+2X7_\_G=`WZYYNTS,7LY:\,.(W^ +M.VG<Q?PO3SQ',=,,C"497FP__0+]WF.?S>ARN&8!'?G-*`V'!C_'_10>YQ7[ +MQRLW+YG0Y'%XO)YIG(5Z\=US>85EY7.)@P#+Z*U<KC\$K!S#._R>?R^5R&)` +M]K=8[$E\3+\S?Z_N'N/1@JQ6>-.?QR>.A_Y`*Z"/Z3XOPBNL&/@B_^=1*NO^ +MH_I%(-_2_`@X6J-*XMU>K_GU:WUVLU;A]-6H0_]8,/'$0GQ\[H?TJRK?5_Y5 +M8[B(,H<#_(3%E("+!,/XF?T$5SY1CWA2K>TD(V0C'DC2"N@$\T1&_,,<45X( +MGKC#B$^<F(84\-2$6LD0JUF%,.&OXAVM3038D;V""\<D4WT#%L)3%!LH2*]] +M(Q>&[QWPG]!%M^H8DUZX`3LB1YJ\3`K+">:(U"T!,CKBQ,^1]9,?,VB1EA-K +M>Q6?N'A?Q'I_>,<LE>,)\<D2W^QBMKUK`G*$B\9<8H%ZZ,3^A(@OP&.I;PCI +MQ.R$<;_@QG6X1F1/-$>SF!C<"NU$]<68NO_Y$QO6[QNA-K,WV+]!CGDKRA-_ +M$0?ZC';MQ19A/CDAW^PQ-BLP)R@B;7\?T$:!;+KU^T3LA%^S8Q)-X1X@R[$< +MU;WLZ,?UK(>Y8VKU?IJRF!7=8&/6T2UK%;.)MKV/LT8Q@!7PA.!$<#24X0N, +M)%NTH\,J(_NM]9*_,T<7-+Q#4`QWI*]T)HR1WRUO%/)3)E+_6E>PU.O#M['N +M$\;:(S*W,%>.)P(CVJ&G`C&",\O!.V5$4A(WQ*T@G-"/OHH')EHR1DM1`T)2 +M_2I=#:HF,0W;\.)=B)[5C'P"N4$VT1RM9`YX7`DC$ZTSP2N4$XP1R5LJW"/< +M$Y4\(UXQ]Q*_2)S0BM[`8RPK[XFC$9)>(T4F5(\5H8^`D.VR*.M$NR#9#&+% +M9T3;1',V@QXC<<>")P)(M-&,805E1.,$>;MAC'5@4QM8"RHC?;D8^->OP/67 +MB:W0Q<Q6X$8D>X/$ORF=SQ/%V(WZU[%;N)MHB&I*<>,"([TGCC!$X/'*B/=' +MCFA&@'C1B."/$O]%%W5TI/!V(MRT!C1;21Y6[&/J>U^43@1'3;P8N1*V\3C! +M$:MF17,"<J(U"W;"DJE+&:)&S6_DW%%=$T8B@WHQZR]?2$EP!WW/`)CVEZ_W +M$NWL?FM=6R2+F)MI(W?#&//;PCRQ.!)%VXHQXR]<0)QA(^=;MQ3$*3>"1GP& +MX19A.:$4?&&/U;BC\1GJWH)'D<L8L(HR'>:(\_F#&AK(IG3T?[^QW+7!B(JW +M/Z$57G%(CLZ\@8F03<#.FS5\8GVXRYP3)KQL^H&.Y;M\>)\T1T/Y#`"(6=U6 +M4`E55$(C9F!)>*[WM=JNUBO!57E+R`7867=F=`3`F%2W`,LR*!8"F%"[`04% +M,,'%`45(Q0L</K%!18R1AA@L5@*QBQ8C@C(Q@,'#(J$CA,&JWOM;WSG>U=W1 +M@5\\\^^^/4\]]FI]]K7VO?P"BJ[OG-\W@YS?-\P]P5?;ZO\0W_PG^P[WOO.\ +MLZ4(&M5=V_GS1^=\LU$=X#.\$STH`[>SR_M`SR@/;RH#36:>/1AF]$\1DO@T +MP#,.X#N7X#WF3X:H]^Z5#+48G73`"[V:>>Y1F!\"<?^"<`;A<-/T+A>4`VVA +M`<AOA>I$\.B`?T#7^(-"1]^!W-(`X[@"VZ!_/9.Z,3_>&BOHV*A_"!ZFT\3D +M52M_``9FU".0OJ[8<?M+6'AA0*],'AE@-7;`\.O`_BMH>&Q`^[3AX>>!J:@/ +M#X0/45(>#\FY_UU0^%L`R=P#PPH'&7$!GU@TSBP7E@/Y;H`K6=>B#.O$_5$V +MEFJ#_E#-B)[2[@/#'7P`SSQ-%>0$K9Y?)!GP@9F]`+0]#28>MU[W\@`E\%$U +M%F3^_B>H6#6X&+YW"@*.S.-YX&RN@./T//`+J&MP#*X#K*P!F+-4KRH9K!/N +M8P!?K+-/H[%XGXS)=8T!AW@Z5;P+]03=\F`_D^#3V'P7P0/TYL!DWX:=&_"X +M<B<-HQ&T=V:@=V%W`3[.H-7W(:QG!?0,G@]:`Y#99UPGBQ+Q9J)[F&:P3-=@ +M`Q-G+^'#/&`X?5@+<.M*&>H!R/:`*`=9P,X(&M[82]#5[8K_)`,IL./O+Q;) +MY^)^JS-S[@,Z`3_GO`$S9J7Y0,KA/Q_C`=U9FQ^Y#-8)S?@@/XAKZX9XP&HV +M0#G[-0_S@9Z@G(>,`Q=G7_[P=!.O_-R0_PY,!/^/$_/%U\4,N#)\?:`/6L\O +M],,Z`#FML`\P=?(#*X#*[@!>[--_=PS6";EY`#N+-2_VP9XPGQ?+`>;%U\L, +M]0#B]V`_R&OR!G!`U7H`*&SH_:`R'"`7']L38V:M__X#+A%/D?O`8JS,?]"& +M=`)X7\@&/D0TQ4B%UP&\?'R-A_6";E_CD;7_C";I\P#<6=7_T!GJ"?5^H!ZX +MZ^H&<$#^#A\CH?APP%QXO)*?XI\]3B\6?8#2;8'!/['@#?#K[8=!/9/@'-V: +M=_`AFL$_ID@%6&N$#/&`_WE@#FS._^*P&"?3G@$Y9:W]8'3@B?1B6L-,B$OS +MADR@#VQ.2!8`!^!6_P9?L5B]I[L',2U=>O@8-1J'42Z:5WS4&]Y@ODB'4%ZM +M7,E'B)>)(Q&&0<JQ9D=B?`63RQ_$0]<!<1)0._7MC\,.ILA=X)D0[__V+^?[ +MQ?SVR['?DWZ[_@=[AL1WL+^W/;&'"^);]]+!_M+_UX"TIPUN)I,M`^.T^]VV +M4U.>^2<^I7B*<.3]"UYS4<:1ZCT7'F_&S_,I'%9U--[_D8=UKL7PNYR?H_IZ +M;ZM+I/>TG::+UO`A4_Z>_T_IWGV=_^ZJX63U,EPO:M.KM]XI.MJ]K_*M]K8Y +MZAQ?5UWSZS&\+OKVZVFTS_H=IUGN8OPO\^!A7N'["T9VLJI#P<!^7YN@Q5[R +M5LZ+./<OUGM:CN9FY;-Q=O,QOF^MU7;^[;?Y<'TK1)6[PJ'/X>WV$W?O8]+# +M]NMD.)J=!<+UV',6CO)JEVN9W6[ARF\\;)[[M^E^K/Y^1VE#0_S^*JFN]O?( +M9W_`41FW.SJYC^M#[3AP?^5^I;W+1]#O@GA_'$][?T%@1/,NWIVW@0"\L>;] +MU/Q5/4MG&ZT8B4;.S!\8)#_Q)&+1O_IN'H\*G]7A3>_1ZFO>X4S[_"F/@X4O +M\/"E?[<*4_OPH7R<*3^3AR/`X<AP>'!_QPW_S<-CZN&ZX?#<\7AJJ</YWW#X +M,AP_[2G#W\UP_<GN)Z]KXG[+CQ/(OG$\6KXGA=!Q/`K.)W^)XG<Y+B=OE.)K +M,QQ.SS/$U?3<3K<_Q/OZ#BZC0\72Z+B]7U7%T>DXO4:?BY[K>+7=AQ<SV7%S +M'9\7)]OQ<9WG%POY>+S6TXM_VKB][EQS'DN+S]?^4)/%/R^6S_UE\D@7B63\ +M?]>2>21/9QC_IOX?F+B_\CT23#_=XJH8S^AJ\SR.)R?X<SJT_UQ__Q_\[A&6 +MV".=L_Y0#[?T&H?'!W[KT0F<#O_?U0FB#O>O:":P.]]]T)WH=\>%>+Q_\HE] +MG5#/S57VR/YJ^WV[3UJYKG,/:YZZ4]53U#BV-^35XP#M?0A(/']YBVA^55"[ +MGB`G\LV'EZ%U"VO*N(_6H/EG;T%^U^P)L%P\LA?@O1>F$\61#RT&$"ZC>A/W +MN'`>.OPP6OO@DGR=/_,Y\+EO="=*/G]/W@O2?U#TJ?%A?Q;\/2Z/'A=9[X>E +MVN1"_U?`'I>;E`NG^(/2XF6"_P_V#TJKI@MS\8>E6UX7F?D#TNWZ<+]CY0]+ +MT.I"T>+KF(S_)JE^^ZL+V_S!)X?/-Z@+]KZ0GACY^9UH7U_""2JH>7#[$+[K +MB!+0]#RH.S"]RPTA&HY.G_B]L%X!_%E&Z#RW?X@OI6JK%U'S]O7A?>2X3,<F +M</V_O`N3M`S\+R+Y]^%^#:0G\GP>6\V(7UMO"9-^'EPMF%_)>@FT=AY4_Y;% +M#^:"?3R:B_"[8+[WG@EN<AY9S<A?J="$H.3,?][Y07_FL;'Q\_-W07+Y`)Z` +M><Y^P+]VM"3/)J7\?Z06XRP3NN35+^R_>%]UEQG\8OG_/UPOJLR$Y_DU%_S^ +MT%^GG0F+Y-.?.^X%V[I_L2?\[[H7Z6@"?G9\[#WPO4]2$];DY?_O_8+Q^C"> +M9%\^8X`72=6$O?)J7\/\P76Z8)W')FG^'P@M7K`GFQ?.&HHV/^?UX3_(^>V= +M#?DZL)0\G6_^CT;WW9!-CR9U>Q(#>K_"$Q7)JE_=PAOX>["8_DUS/PDP-X7Q +MF?2[&<&ZW]'V&O?N9\;U.U";CDTY\_2!>`W(3UP\\U2A<[Y/V%F_]-.-[[]7 +MV%O^#;QMN_T3[`^7/W0+;P`&^B^?F7AFV\`QS?)F#X=\"V\!A5\G'Z:_A;>! +M(<\FLO^9P3-MX&"<<.!\<1S86W@>+6/X9-5KSB_&%.[$OS>#\#D&`X5+P%$) +M=6T,='%*W4(@9YZ?+Y%;MY(P)^0RJ"0L7[:?E:!WH63(N'*Z1XO?.@72CK[P +MEV>89,%$EY=H;IAWUPIA?^+7QZZ1=CG!2KO(1'+O5-2RK3"+R2B!EWJ`+R^, +ME3"KH-D]]YI)Y9ICQ3N-88P]OZ1&61MJZO`O>Y2%1HD`B_/>K!W1"<K:OQ]& +M]0DRG-RO;J(#V>C?9A^!PSIH>Z!^7Y4CD%`"5C_*Y'/@*MN-Q<#LFT!GVF7L +MV?R_SN:(2Q")FA&/<0=Q6-1>*<18^.;M3.R+0@5]Y7803B][:!+O09E&4:FA +MLE"7S.(RO/?23&S#4JP+2ET=.T%>WV+!6EM'*Q\F1VJ,E;\T5M<$*?UQ`4H4 +M:`^-<S85]P.D&`$C\0]-*B4T5JQ%8BJ:554T9*Q%DTXN3FD7YXRDK:Y6[HVZ +M]Z!IIA*,I8'7W##)_!,<R"FGX'53"1K6`M6,SBX'LFA.J=`=9,@\<L![2:3# +M]%!`]JDM+^G(">VFHKRR"_K9A*%;]X![>+%4#^NF0>]0D5A.Z%+2Y;M0*[&< +M3$_$@5\2;!OD([^EJ6RZ"3Y,_$=L8-1$P"#$Y1MKW`TC6O\GXH+(01.'DO-! +M0'X'+0K8@3<G#N7<G]()R!7]:62H^>-=W4U"14XZIVN\+@F%Y-G".W<HC;)N +M=`OY9[3Y&P2U+YIRA!5M<<$_W9352+!?POTN</-`978>OT8(IYX)HHP^+]8- +MQ.,G]^*O_(O'C$^JV+O'T2&!>/Y2Z`U4U?%4UK7J%=O2K9YG2(NQ,VZI[3L2 +M*P(U1>U$#2"YLI]GMQ@=\A1GA<$FO;S(;AP@Y]V@#F()S.2[SG42.]P.Q`S; +MS3HB;Y`[<#//.Y7B7UX<ZE$\HY`3?TEJU/*&*L&79CJ<5#SW51/.24,T8NCS +MZG(FKD9XP+V\I7\3%2AS$8%Y?WPG%@ZQX7<1K>XP7E'AWP![TDLA0<^6PA=9 +MY9M8"+4#AF-/K;!OT2`7Z>.WU.G;7Z`F,7\S#.H0O_,TI@6J:JSDT'R3'\0> +MP]RI^V5C$@J)??-`)<HSOC@I$OV0O%M'O\U(^R[C;;F1\UR"/"D,2/Z7XW(D +M:/P'+/6D*EBVF:7G;F8I"WNT.@'FN.72%R>(1-AY1&+2%S2!(O,\Z`W0'+O, +M.P!NH.>>:2`!NP.U/,FJ!NX,IS)`3>`8A1$3>0=[>;-!`O8/`O*M<#?`=61- +M<@>9!UCSH5@-^E<`8ACWDH*P$/"F!E'G>(D>!2FN:>8%$3@HKKGG:OP.#?'2 +M=GWF?97-R=P`]4\H4*%SA##)TCP[Z_(89CGC(^E>5R)'SLAT9@:EYVX+$0/5 +M$ZIYV`K%2V7.)UI'0YD,7,9^*;!YL4*?C$H=W[PDJ$XUX<[^S>?S0!CGNH`^ +M.\^\RL>E&]R\]H5T;&B.1^4X7[,R=(NY@Z0Y+RUF3309,OV8_.V+XNCW1$(J +M1(1=JG@H6ZF!)]:_1M92)L'T3.+MC?8A<(#SIP#E$"OOS]I*X2]^,I0.Y*8> +M2ZR#XB3(;`<#0E/I)=:F!@7"6/;ZX)TACTG,OT)X]U@GW5T%=S[*(O\T$#-3 +M*(*`;3,G:$B\#\J(>=!P_G*:-?`J2Z(AS(.D&^TG[RDJ[<FU%:+<I]\PI:;* +M99PI+=^3)#A66_8>,R<RU*=S98EN@=`9&6PR`9Z6J3LC+W+52!+JI?IC-1%P +MNZ6LK+S1Q+F7?'`D$]-CWMG34Q!;<#&&686O@H-D#,.V38-)7<'(G826A!8Y +M`GWP3-`O""7(%X8.8]A4#+J)B)CS#.,.=5D/H2JZ#E,;I$%/A"-!."92B37K +M_F:1RE4T4/P`92YM;9WVZ4NXM?]YG25M4U@4,`\X?O)^B9.F"_4N?+:92&=( +MTQ.G*Y;\C8%"N!_,$?HNL4O:&/#.4/!4O//=F[<,D5+S\@@58>"I>@0T=(N) +MEVD>?H6)B8N#'\42OSC1*8N3Q+@^\H56YI`(3(=_,!FD"J&:OH=M3PWH279] +MRFWIK-.)E-H]HISF)F7=U!P4[ZI47S,RDZSM65-DS-(J5$N=V-89FT2J).PQ +M-714N&AWE"8[-7:#[B4!^<Q&:N\'L1;$C-7I75H$\FZ`WQZTDK^1$\R]%O/8 +M,\35]DD'=A$@YI7R;$J8(-,&$&80+GIK#*P'D3G0TYX*\A4#SZ3<P\A/0/00 +MO[(LB[T:MS6'2!+H/?1+5*"5-H2S(0$KD\_%+"<BD`C=/$)XUUSX&=@(*F2= +MH/4[\*"GDX)V!J$0Q"NFB>F@BXI^$[Q8#C)&K2@?TH4'*/4&N10=LLKW\2B. +MBW,2&ABMA`GF6DT%5ROKQ"XNXFLZV5"XH]FL\VK&C!9^$=:=^23YJ:MZ]]>@ +M:YB)<72=O$H,%X=7@Z8B\[DZ:OSHZ0)_'9NN`85T=%$[U9SC="Z.@.=)"Q.5 +M:6_UG@'-.M,"T"-OIW2$T<)/O/O6F69HKEI-43S7/8E85=N:I&FF,P<QEJ>" +MWDTB)I0;"+>B:J(C]YWR$MT+Q"U2+A?NCGCZA=!=7-[%-X&1-L.>8G)U?UD* +MAX(&<H)+P$;9>"'[.$>N`!(8^)ZTVQ.)V437.V$(L7NB4OSR^[6SDTQ=R8H> +M8DUGG*1?\R)4\YMR!IY'RT6J6M-*9RI!ZEY+$UM.7!^=:75)>OX1\VN][)54 +M$F806YNT*3*(B8]=`$Z$H#RGA3\4!XMZ-T3AAZ`N*PU-<<#N@O+@M@!]L*H? +MC=`?J0YO*%O?O*A/27`\,*OP7MG('BA6!B45O>`2_C<-A0LW*ZCP;JXET>@7 +MP7T$3\SX#`"ZRQ(BH&12[0$8\+70A$H-Y2)Z*"W*J(LJ1&:"D.F=83.E&*XL +M@0OS:#9;R-VE?BNJ"J3+YS)@+@%]5]`5@H+A$-,A-2%J"N<C#NJB22$:PP7K +M1JTS,4L*=(I(515=;4=P\4Z5-_0(%<%E@A"SUV8C?8#:72%I`;-8#EU'*)4( +ML&RE:[^39*F8)18L]9JE"BTJ";X[$6FO,<&>Z`J>=;`:9,Y@I:C%.=L_AZE) +M4:\QQ6EV:%L\6`HA"_=V[A/\J(+>(EW!-C4UO>I$D5EEM7L<73>A()@);Z'0 +M*PQ=$C&+^-`A8U$P;EX$HD8SW\L!T@BEC$,9295D?F@.FB/X^+I.D0%`";8B +M+,FU64!#";D!TSX'0A/*`>&$N,3=$0<QF<\(_/`>:!&-R]$A$N.)5/'@,7Z* +M]5C*(N0G2GZ($$YG61ZQ".Z0GFT*1#._)%"_,-!3:QA'VP!YM`<!#";\C*F/ +MGPGQ@+6"V\!V;)IG3',C/%CV/(9O6@)!"3^1`@M0'SLC(J"YL)U1"/R*BZ4) +MJ0'QG2+Y)%2W*@MGCK9])U9?[023O=IH,MMX3YXQ/6.`G5&I%%MT*]H8+QHC +MV&,(6\L*OD3O@-)G.B(5U4&']#U-!#@M7N.6>H=/>\@L)G.\_%M/>CI>:8UM +MQY(>I?H"B"_:/SM%'=.FV'NK)U]49%`A+IF=\?1T4D;4N`@/-0HC('J+M7*0 +MY0)5T56<S?-)FL9%917UX#D`F43.8(E@E[.?P@:()@;9=SR5+OB0^P::JMA< +MC\E.Y*`YH*<5,H@2M0#Z/RA*-2,EWJ@:;KW28Z$A,$']#7=*%N`HVJJ8(0IE +MG%NUJ$UV[]%2:\>($V[D+S)<+SY5`A!3.7U^.IDL2OYQ,S'58ZB+]IX2FY?M +M,;>V4!U9S_>4(]YV"L`'@(4ORW[52#6,C\B$K\P;UH#''.9^L;[C'$MNP01- +M>2,*;-F7<,V\D!SSY,=#:4C%TV[=)#G@E8A9M@_D+N%576JH1)\1S\-LFN`O +MX@79228ZD0`R,H5GRA7:6](17PGR)G,(W*="&8*3`XAZD2FFF)M%29PLHV_0 +M^@WI#=WHD'E<QF1&T?/>R0V1NM$2%\(V2-8(\O9!-19%904>W911T^S6>2RQ +MVKYVB-*=_/&4HH[9\QXB1#=$&7.SPX"`$]$I#S)S=ZU\AJID>MGDV'/H286L +M2"<TA-ZP1GOQA.<C4P_&^*8.`P;E``#E``"```$"44_K.`[@8`#==EP2\>%K +M5P(;"X'V``3HJ!;M@P(](D2J@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U +M;G)A<C4O;&EB87)C:&EV92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-XM' +/428#!00!```````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu new file mode 100644 index 000000000000..de1044e30589 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu @@ -0,0 +1,345 @@ +begin 644 rar5_multiarchive.part07.rar +M4F%R(1H'`0!SSTNU#0$%"`,&!P$![_:`@`#=K"Q/5P(;"X'V``3HJ!;M@P*V +M0J=E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV +M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-YY^$-E'40]L2'?%!?HA6*"R +M.9\[1C;DS+YJN(24T5]0C&:?.VGA.>M_S>`T=L>UF3U(95SP!J/\HNSTC5?K +M0E-]`?Q[\)^&-0![HK"L)CI5IO:F\!\D.DDTUEJC+9+,"K>FM-@:+@*`;^^> +MYAFJTJXC2C",>XI<.=.4@^0X7PG?!.S5"^]AB2'4B4-`#DEIVVCJ*W+UR(&T +MH0,1Z,2X4246DHH\%(IL]QHT,,280H"PV\3HBF<A,C\*9)J8I,.&^0X_$?.1 +M$HO*-_G*-)44#U1B)I9*A!'QQ*3-EB6GR;6[5_"09-;H69%-NVAA<Z2JZ5"Z +M?2]0V1=>]LVX[PBDE(C2AD)2@S4[@"BG/A/1ZH3+AO0K6[A*`<1Z%:S<`*KN +MCLA?@(TP6S+31J+>@%5R(R7T"9^R1?FH`&Y!*OO(FXL9#^8#3>#+)$I=-+^! +M0<;J$*OL2(9#+"+N]8O#M)1HH1NB[X]@]BW2?C#>:>R\286`K`ADS*A9"33( +M.42WV0=J;(=-VRXN[3[I+,,LP+P+3_@C&>`D4_&(.='%=V,V09V,3\876!/Q +MA=6EE,@[D*-J5)S\%XPEL7'T0O9/&VM1']#JDX]I5^'L(F-C4H_W$T0/IGC< +MQ=)6E8_YMXU-U6'.00+T:HOQ()Y!P`G0$8/:!<Z$\8*P5BJE\EA.^.LSS[4C +M>+9^J2Y":3LH:8"=0%$47<5<R,Z4-^S#+\%YH-60-5P9W1TN6\)0#OO@RXA> +M4#5D#66#)I$/1#/7L`VN<N%TD3'AJR!K(AF/!2@35!OU@9+!=8&H@:Q89J@3 +MH)S0;^R&,!=6&H@:Z`,YA`]\S`OB:\-K;,!?T,!6!#5D#6%##R4U3X!GXPK# +MAGX`-1D,OD4"4TU5V:,/Q,08E[#4H:9"7X<WP+^`3'\:F?\PS^(7=`U9`U>` +MSISJQ_L&2W&E&WS(7^V)4!K%`U<`SS`6X">AK@VTX9N0NU!J(&K8&*(N<PRU +M!7?!F\!)E7=#=%$2:"AI<)/,W5?$Y`WQAU8-6J^IC7`CHIH#:5TQT\-:.FZI +MTF`J@FS18!7UAIRK?CLP[\P#-SETR`7X3`TF<`7]AXW?+]8@D8",'6.*FVG8 +M=3A)Q<=:,Z6,[.VLT)Z;ID1M)]"7PM1G,X@*J2\PJT&F=LAW$SP63RSP#<3^ +MT[![SM1VO,VW=QR$J!F8&FF7*0[8VJ]-;'8OF&YAT/3?B=A6/!$"-9$)%`UB +MP%";!.C:0'&:R)H(UQ6^,<(2I!U(.H&^$_%\R-TRIVGG5.Y)N@FFRSQ,!-M2 +M&]I2+N0U[D.A>%N>8;-5E%<QDI8IEHC?72PR\]E$G@SQYP+(2M#2`ZW1-)F4 +M!:FK_0(1-M+QDCU.BJ.BKD!SVA2(=4`D7@.UM0'S]349<7<PGQ]33%Y:(`F] +M@B1=PA19EI4RQV2;[=@7891=8A-<$1P0CXC9Z)P]+];16ZG(V>84N5,-1^TJ +M[P*N$:J%-V@;(2G&G332K$':6INZ:K&5,0KC+3'3?_ET+R6K"=X&=58E,A*B +M'4@Z<;^4Z3?F=23=PAAP8KI!HC'XB'6PSQM5$\0,X,0A*CC$-ED';AG01/Y! +M>!""!J]T7/&P'_-U&Q#M+V)UDM:T<X?X(EA&J<>!.A9"4^SJ0=,-HN0OX1Z5 +MC]ES34?5TUY>`Z-MN;7P!=TGW5DJT>/&1/(V]ZVO6EB47[39B_6Z?-W1HJMA +MW@32-)KG.QB;"--3!G@LA*>LU!I!THWH5Q=X&TIJR,%&IQMD5=,$_?V$37!F +M;L3&0E0#J0=L&T3,YNQIQ2O)!T+-VZY`K^$N'7MJ/&G]FI\+(2EVJK_4-&0H +M"@34@TPA%8'`.@KY]"T9F1:0GQZ%-_FYUT[04&1L^I153YYT%6'4461-UYS[ +MI%Y\9&MZ@ZP?0.@K6=0G`WVR?"J8JL>!4B432<GVK3!.=#/R1"$FG'?CQ"@! +MKQH@B[#._$(H$$8%H1V::_E(Z#$(O:0OS]$2#>"@I<1<6\ZP)^4,NU`%D)#W +M*`'N('N('LXB*!IXASX_S&2&IB?3&8KWHX0E/CV*`IA["+R.2S`O"I>4V&BH +ML:=JA_1>-D-*$'WJX5Y6BM^*;/5+$2F_]UY`+.)ZY&7G-)30_?B?"&=+0A9" +M5"/8H"VCV\E>2#.W4%SMFFP])>)^Y<.M:"V@3V]1$OH9^FQ08A*UV:JX0=O& +MTH(R+^S1%/RP7BA.T"L(&5-$%D)6>M@08Y%?Y%QNHKD`SVA:=D0@1!VH)@2O +MJIO3>T:./;Z>)]09[,3M(^G;M(G:!UPS],!A&YS*)#1W;6,WQSFZT+W6BM^^ +M;/519:=N[#6Y&\P[`9][3Q\]]NHPLA*VCJ0=S'7L8TS8C@'8=:<8_TX;;"Q* +M9"5(.I!U`ZZB+KJ`[L@>F'-V/HAF[TW&*+_@,T4<QKHHFB#K[)U4\Z,T6F#; +M)T@7G0[YV)G@USP=\\'2W>4B`?C/1ZN)X4:Z[9"TA;\;[\*9`UWD2`W6"UNB +M0=(`0M`\T31U@1!&I*`^])`[?@U$N3*;I'PN\M**6D=HD,@N_M2&-?'T5%B% +M$P$()N4,[2(7XR:\=S#I;[<U;8>`VT,C0XNC7>A"S1@K].@R<1R+QC:]YR-/ +M;^L<(2M+.I!U(W?3J&\5R-TV"9E%&NHW^#F:^5HQ^_U0;4UJ"R$J$=2#MHZ\ +M`.X@<MW%!>6$Z[1Q,=&L=_*'(HF&9W_4Q"@*$9W@A)E\P((UL3!!**)JCMIZ +MD1[3EJ>/<BJJ)"LKUC^+D*VW4@.X0=?_#2,8;11+P&8"UA9"5TLUW/(/F1M# +M+7?N1S]+UEVE.>=7M-Q-\!RUABLH>?$>"Y;NWK(TATQ502Y9^),.@O,TL0A* +MXM7+%IMXH"]#."%6]N9K?LC\ZP-*""/;T32"W$+P*=&LN3EK/$=5HZ+3H,ES +M<QL4;`=I#F&A#6Z-";D%:0E@`Z0%2A._*7>L=KY=!"=-LV:,V[NK1N1I%F20 +MLQ0$!.*MO=)D"!NSEVFJ[]\H[W%`-W;H9U)0%Q=@YL)U^C<4OWT*EP5D34>G +M7A,A&<#U%,WG?1"5+&Q",5E`709XPA$PPC!LPDWJ*W,(#Q80E6HD7@S_*S=% +MM%\Z,#JM!"J+FW:0Y0)6%G0"GSK-YY:>?6?0LU2WA:3.(!>!"?':I!:_:TH% +MHKH^Z^?M'"$J.S8O(@[>-I3YD7]O`%U&<0%AFHZ]I4QD8T9LPKT@Q"6?N#7T +MPLL6]TZ%9V[2/>#G(]P//VP;(2L[FL@[B-$?T`\U&L*_%.SQ\%HHW0-\X&$) +M6=RR0=3%ZD#?1RO.X@Z49P\U$N\9@.\VT+(2H!K,A"@*@:S)32U+*YEFA55$ +MY\)89FBTB"'IUF]';9&I!:@,SU)6F0OOK-Z/9F2#J@3>CUB$&+4K-W'-DU0) +MZ$\_,DI-W.U'RXSBYF)Q!SNQPA*D&;IJOL4!<!GE:)D5*`\!9M-JS*P81E^4 +MZZF"&0\Q$^",SE=*<+P4::_.A,$&9UEX*--=G4N2L)9)C$';"AF=-O?FUFL( +MYNB"*D/G&YJMSG213^1UR+:$J,O$WMBO4.W-N\;:S(U0>VM+R)J,=G1-.M)# +MF=R*`VU$V8@M$$MRS]MTZ061BJ:;KRU'1LBH61AI3J;='D65,-&QBF+QSWS# +MH4Z#5(TB#75-N`<H;KFWK-Y=(;Q6X1@2Q@N<0K;L)E^EB?JC3X?X'"$I\=2# +MIAU8#KDA8]"$"9,>#??@8K&K!*^/0A7*A*]O0EBKI!T8Z/PLE/06X$8+'T7X +MCM8H,98,HXJ;8C##*J8C*M*I#C5?=>5]/J,TB,E&U:J,WDJU`;5P'O:$8(&H +M02T/G4EQD79J`V:+&+^BK<YE)TB`6U&RE)G,D9;WJKM-&F*M_L)_X/RZN(=" +M_TJL-NSBR:HVV/-5%];E`G[;&_AU(60E1CJ0=N&J@YF_.5AH&Q**"/.C*;5U +M!S5>?&C<"B@7S[%:TSS_L5?1"W8[+>!FI?G[*=T2*]7DVD)>1F'-69'(B(C& +M[%RHSR`;2T8*NW_P;D7865<?!5D6]?2$>V<Y_7C/OUL?C5N=J@OKXR2M7,P@ +MZ<:2N/8*R3=(`H@I]M4V7V+4:EIE(<^-M+G^`,IO(?,N5:+K%)E@.K5:L<LH +M054">A"4"IYX[(&K5@?Q3]#P/QQF6ZJWIF;JXQL,^9I`518GLN=4)P%S:S0@ +M0D^"+Z$[_1GGB//*MMLVVL3T^%\EPU_/<JDSHXH+JW%OZ9/4<O^[<^*-<[S* +MKUNO[7G(,TJ_NBP+`G:H],J["=`1,S!/%\W&#PL47%Z9[4^I1%$%QZ+C%D_6 +M"S6>R"!*;0!%-1G$`VUMG+,"KFWKW.403N&I#]HQMX2!,-$DCOE"P0]C/*E! +MI&,'EJ1!@DE7S29Y$FET;+TM^/4$=&<*<5PY_8>W2[\ZH7OM)?TF/B><.9NX +M-LH$)3[.I!TPZ?`2'6I4>A!3HZ"+:U&LP1>1U(/FANEQJ#9[32'\+'1,P&>9 +M$(2L^=4D&.)T+92ZQKBE_!`AZ+13UH5D0R[7$+(2M`ZD':AOMEQ=4$Q]-ICN +M>_I*1L(<E1XHH!E6XJL>RO&$8#&M&?GHS@3L+BUN#R4<U97:G.IW!X_,HU:Y +M;/.GN#O^=2((UN=<5/RH,>P(I,!7,6*A;<%7-1TK)MOQZTW%>;(?E\6$^.Q0 +M*?N3=P5S8VWH9$46L;:20H"[LW<$HG7!=AHG%R]A":U@CW,4$N09T5R;G6K( +MZBJL#'%S]$[4RK4=;EN7T`9L+%(ZN.9Z(.W1;JCW8QN1'_S\2$X(9_0"TH)1 +MTI&6-F70.M3V)W_VE$*8F/;\H[G&()1TL/:V!IV`*7`9#$!-<&5T01+MO<$2 +M\@J-$7%-%\QT2S31/-CEVP7`OMT^(V/^S8Z%2-P[9;+$KW5&6(=G+(C2M":% +M&6'=H\:"*PF+@TURXJG+?#V]+(A([DM-F)\?^*>'FG(=7,1S$<Q',1S$<A1M +MJN1I.VGAX(4NPY3P[LF)&F6GAVH4Z8X;@<=BG)<.=+!&#X;3<O&+RH%.7S_R +MPPAF4^!P/P,'PV&O3L3:H4O40,D&+W&!UD1>\R&PB+\Q![2(O>X'31%[Y`ZF +M(N&B]_26AB^#@;(,7YR2]-P%KU<C_)Q$7Q4I*!B^+2`,7Q@L8OTDLA0<^X>H +M66V*LX_!.K:7['IRVV4ZIQ;!\,JNZECSE@IV&CNY/$BHMW<T@#'=T%C'=U%C +M'=V%C'=W%C'=X%C'=Y%C'=[%C'=\%C'?,BQCN_2N]6"W>`A^^)&.PT=Q'>#? +M;(,=AH[B.\,Q\:P6[YTAMR-N\1`_0&.\5+/G(6[Q<Q*LD8[QB4.&.\:\])P% +MN\<]>!CL-'?1L3;D$YB,.YB_&2(`IW308,1TQ_)9'NB(>FW6A%T4IHA=X<7! +MZU^C:=.0.P?`I("D;M@7"`EXB8CM$"_+ADEYUD&^GMND4[OV4\ZV*WXIYUT6 +M"GH4;F?/G_B39WET19<,DO9J91!/Q3T(_!/9U,.7[*;''B1D$(_ORX71?:\D +MF1(V4^"/P3[821UW7XI]WS0F*?!'X)]X8N1%/@J1!/YU60A+H4]#4+*?S[4$ +M_%0*)+?(J`$?@H`1_0`8`21+A;J#IE(9S5R(J#^1L`5!_,,DJ$GMBE(I'O:U +M.XDSQHMJ@X11O0A/>,>+U0+QGT_>A4=RL>K*$?V>0/7UV'3&GLCR_3AWCG@Y +MN)G-M@Z-&V*<TXMX+7J6,&;0XI<*>@E[D\3(7HI>YI`D7HI>Z"Y=Z*7NHN>> +MBE[L+M3T4O=Q=0]%+W@7='HI>\B[V]%+WL7@7HI>^"ZMZ*7YD76/12]^E3S$ +M_'O12^`AY5DY1Z*7"GH)<*>@E\&^R41[$7"GH)<*>@E\,QF50+T$OSLAHQ.I +M>BE\0A_YJGHI?%2Q;[+ZUZ*7Q<QVD4V#T4OC$H=W[T4OC7G4Q'L1?'/=6)\= +MZ*7"GH)?HV/Q*ACIW,%S<R?"EZ:"_"8U4$B(@'3$A%X,6^A,!^,TZ-H9JA*1 +MOP0ME'KQCM$"PRG?60?)26,&RF4[ZT6P*=]<UMBF`D#Q#@/F5%_"B+%,34S\ +MT5"F`C`)B=3#P$4]+-H(H4,;B9YKX)<;!,"G@1@$\",`GG?-"8IX$8!/`ZO` +MT>@>R0]/T8V]`H@F!3ZB2WR*?!&`3X(P"?!U?@3FK%OP*0!3\"*DLJ*SZGT_ +MN"::-=W:4Y%)ZU$;H(*!D[^9"U2`\2H7*1%E=O&<J=D8[#UR8V4&5D/2I"M8 +M2KA]6"Q4D$P,/6@[:$O<H6B7XQO<OV%7(C+HI.M9*-?(V*ZW-B9[I,QD5E<: +M"G"R**Q=9<S8HS*%E#,ZQY+8V1:*@LB'TCJ,[L<R02.Y?M]M1C^S9;SAR1WQ +MJPZZL/R>\:+2ZCF5*%.\;XN2`S#5X!ZI`$RBNZP\P`J=E[@R\.*GH5M`R;S6 +M@I]ZB7PG"*Y4LI&QPS\NTL1!T<V7*)F![1FN";VE>VP4+5!%+TZ=N0%NJEC] +M:K5V0=!HZN3SK@QU<T@#'5T%C'5U%C'5V%C'5W%C'5X%C'5Y%C'5[%C'5\%C +M'7,BQCJ_2OMLH6ZP$/W10MT&CJ(ZP;[I@QT&CJ(ZPS'PBA;KG9#A"A;K$0.I +M#'6*ECK$C'6+F).*1CK&)0X8ZQKSK`QUCCY,+#'0:.NC8EU@QV[F+V:$R(IU +M308`3V4/$$1"*9.$K%Z^F8$`8J<D@#("S8W:EAZEO06[1`P64QUD&](,R*=X +M+*8ZV*X(ICKFML4\"J<2777229!O6((IY-3-=%0IX$@@GDZF'>G1SLEF<@@G +MNO)`$2-E/;`8*>A(()[WS0F*>A(()Z$DP3T*DP3X#((O,"#E)LI\!1!013^B +M2WR*?U310%/PD$$_"28*`!.:N3%0`*0!4`"*2K?6-WFS=.(78GK_&4@].)>+ +M=4G?!6'LT0N744<[V/QMTI=T15]`3_N!/Z1G<?SG+)5#Q6_J04&PG=4L3U'` +M*1M7^E/H1'3)2VI]N/R8>D-)4#LV%Y9Q+]&@U^2IG/8:%-PO&'(1,%S!\-P> +M3#1\%DR.AA89`[Y3M$65Y2(/,`O+"O;ZF9RL4>8\":T`77MID/PG?Z&:FO:: +M+C7/@B9R)9$W\L@A1RR-HH^G"OW!A1W^'E$DN;/0D"6;7?YA4J0O'`Y4U*^9 +MY4)#]`I;X@5,!9ESB/NN2?-SH40*&^D$Z;%+*$PH;QDO?\\:,O<;D/K+ETW` +M4^^I=$_\71=W;WVT.I+"1EG_66,Q*-//ZT=>N;TZP:Z]T-$ADOJ$%SI2(#5D +M7X<:SWW\7,N[WX1),S#4ZVY('I`+X)NNI:3?YPOZ'$YKP5W1N:<V7GPXXGT8 +M`.T,!FT:M%H[FV%P+6SRA\YN&I]2/KU,B3)Z50QK!1Q0H<207@9)282.YU;[ +M"F'E#G9,#-J1]>H2\1$VB-D$CBH0XFX@=.G"H[GU=SUM'E#(A(^O4.\(\N6C +M8IUIQGQ7H9Z(5'="LIZW#RAM0D?7J'U'#\,DX02.Z-;?VJ!Y0Y^$#9V'U%(` +M9U`5'=*NMK5#RADPC.P^HK!#/W!4=TZ^ZRX#RAN`C.P^HM(!EJAA([J6%T-R +M'E"%#!L[#ZCF1#.D"H[JV-170>4-D$9V'U%Y(,_4%1W6LK@74>4%Y0&SL/J. +MI,,F90)'=>SO(NX\H8H(SL/J.X09F0J.^A:78WD>4/%",[#^:$#8AAFZ"H[Z +M-K8R]#R@ZE0;.RG<'Q(&7K^MBX6EI4)'?2KVJO@\H5H*G4H?G";14+OQR(N& +M;J@*Z"3S1`5*48$8^%FD2>J>:M(58XA\X@.@4^]9'&U:XC$N4.54$TGD4-*X +MM(U2^",D\L73&5HCY015H=&4DJ&;(*COIXU<+Z/*'6@IM2/KU1^#7JY/2(&) +MV+<G7@IX*P,GW*`I]L<K&1;T.4Y66#/B"H[ZF??YOP\H7>6!Q]>I/*T^V(C; +M1((VV15N(4:@HF:D<C@I"7#.;E@D=]71?%P`\H=BEQM'UZF9:`Z=>#XMBXD_ +M@%1WULZ>X(>4-T"G5(NPG-5!8(%*$%T*BD\X61X/-6GH4=&Y/B$#WFCA;-!$ +MHVQOQR#/GVY2"U=7>X7CHCK6V%@87=`J4*JX?Z@5_)`T_7W=O1XY"9#*F7"1 +MWU^:7P@\H3DN#CZ]0E+A;^P=-0%1WV.!?\V/*&;"1=A.&!_LF@SUPJ.^SM$M +MAAY/@(]G[EM6RVY+]:'$T/A,EXML]^G-*)+T40LX%>C$DYF8`SJD78G*6A![ +M>;#+M,!([[7%R/.CR?):$W"U(IT+5>K#Q$[DFUH"U-=#^#R02UM;U-0B^F@J +ME*V%CW$.G0'.*1&W&U^<1NB(&8.,F&M7>D[-T1.3HVGP3@9WC3GZ.^W[7#Y\ +M>4-],,N/KU#NEQ)[-H#/H"H[[GG]7T(\H7:9!Q=AWIP?G3H9BYD)'?=\23Q` +M\H<X"G%&=A):N5.M;][%OXE/,!1>TR?4,K:SP9^]IQC'?>\:[XH?V>0=;4^2 +M.2>Y#KW(+M7H&]R1M\N9PW*N&DLDVYA<A^->VP>V"UZ=.V,=5+&@"W0:.KD\ +M[8,=7-(`QU=!8QU=18QU=A8QU=Q8QU>!8QU>18QU>Q8QU?!8QUS(L8ZOTKV8 +M8ZP$/\,1T&CJ(ZP;[J0QT&CJ(ZPS&O#'7.R'AQ'6(@=9$=8J6VD1UBYCRXCK +M&)0X8ZQKSM`QUCGOD1'0:.NC8\X.CMW,<`+=!G8@^`"[DM]4QTU`=/RQ-RJV +M-^R.G>.`/LA;'60?E!Z`+8ZU,"+8ZYK;L>H/L#^;)M*P.;6"GDU,VEE,]66\ +MG4P\`Z.<>SW>Z^#5A<6A8T+>]\T)L]66-"QL6*\D7VP6*\D;?T26^6>K+&A8 +MTYM,T!HY!.W=05)+'6?=EUME<E]O_8%JFCN+;I*;/V4YVQ.*(%KG[^F&P@+8 +MS('GD2ZEH<6+Z,%ZTU8]:</95B>RK$0!`G#B==8YN^[[$]N2QYD`LD\1#O%O +M;O[6;G>.B%\U10O.PG1_,2WT]$^8]F%PT1W[6NH1N4AYM`,@$RSB4Z1E0$?0 +MTB0PK1!O"H67W)&E;\T)3*$8+<P.5PC4!3Q+#1D4\D7V0X:,<4>-HX52@1D8 +MQTO<)>;/Z"GL4#E`=9"?!)")CX7[4#\PI!NHO`PN"$EXE7#Z)D3,8O>.1OZ- +M`3P)MC/PI^T:[]+=T;_[<$J,RU,>XE^L03>"IO<(I9_L>7+E4-F#^L7_!H_9 +M3E0LP?U)"X+?T*.F<\B69!$S[=@5=8T\,Q[Z8V=1`E]/;IC^Z0ZD)J@%2#N[ +M7T\/DMV*R3]=,?WXC]LR"A!-B`A"JV1JTS#R4XD*:"5<EX`+)MSJR7B"X+:\ +M27;3(J5;FEDM@F.H&YII+=(C\HQVB1ZLDI(Z`\I)-!8^:RI`9IJ>'9Z.:*=+ +M--3P>-HVNF5G14`92382._`K3FL</*$N;BBT*1]>ID]$B);OHF4;QNW.T(9F +MFG$T=^#5=/T0\H?DFV7'UZA.:LG$]^<C<3VUC>?FWRB#/::<8QWX56\#HQY0 +MW8*;4CZ]47?#`ZFC#.8G`D=^'46'R0\H4TX!NJE"S7ZEANU)Y-R7>,XHA6A` +MW/J-N%HWT&2AG]60)]OZ1RN+TAREA:0,T05'?B6+C,F/*'G`IM2/KU")/R$1 +M-H:P5=9)G][A+1#:Y6;V34/JMO([.;M(9_-IR%'?BVQ694>4)ZT,N/KU#^3" +M`[S:@R]V@)'?C6U/]*/*%4EQC%V';-@6^9VI./I\+A'R(NNJF,S(=KQ:PSK& +MG)T=^/?/`RP\H:$%-J1]>I3N$[C5S5*&>4TX6COR+@5S(\H09T'%VXWZ<L4X +M-]3!EYG0D=^3:_J9H>4*8W$TXI%V^PY%]]5BXQZ\*CORK9[G-CRAU`*;4B[# +M+1%TG8D\';GU*WJ0M+D[Z;8&>P%1WY=\;FN'E#=@IQ2/KU?;,T-NRG,:-GM] +M%M#)>>"1WYF+]GG1Y0Z&>!Q=A_5NBBW5V?17/GIPRO&H[\W-JW/CRADP4VI% +MVBE'WV&WEN#-FTX6COSL=N&@9_RCP4OEX][6S5HD`Z)NWWZZ@,?3X2.[`2MX +MZ@>4,)/@X^O4.=]4Q*]IPM'=A'R@T3/^4<:;Y><4CWM;-3L$.E"#[6J#/T!4 +M=V)]*GJAY0X82/KU<;O&'/@]1;PR@H`D=V-Z]_U8\H0Z!#B:+M'\F/>V!YVX +M!G2M.)(_LCP:8>4,8"G5(NPD_P?_GV^MU1=;]*!OK=3FJD3`:Y$#'^3NM"UR +M'Y95$#+F[+)]\@PT3]J,Q\(G/='&YR#Y4P7@39Z-'6_#2*;?NU`I.5':BXAG +MF-.FH[LLE^1J&?\H^.F\@1[VMFK0'6]`\[<@R6H0D=V;P\AUH\H*4(./KU?\ +M'EA;GKF&9EIR%'=G];%]>/*&)!3BD7:+^3&`\G=`SS6G&,=VCV)[L1Y0>T0& +M;4B["?(-R70-_6TWQ$!4(562?Z`5$QU+3E$^P*Y1M.4\">5.4@,@+\UPYCE+ +MK&<P6RB"1W:@)YG5#RA.`IQ2/KU1?U;LIPO(LW%P&3NP9G6G)T=VL*(?9#RA +ME`D?7JB_K^3^IGM6W<,\0*CNV"/O>S'E#^X*;4B[?;>4-N@\P+OBX+)7@,O- +M&$CNVC,QVH\H9^C!L[(_+>N-].A"[#UUC<HB_/@F%J*-O[9'%V0I85P0'0!7 +MC@*,%0A6Y`.P5'!05Q'HZ*'X7G-'+>M.P87:($.G887B?,4@E`6@8ET]@Q"% +M.(#T(,MT:^X0%U#%J3':0`X!=2Q=(KU0#\`+1(J["._(G4X+1NVNQZ"GZH4H +M-L$8AFR7C!O0EJ"Y8)=`N`XE`2=N1$9E%V3S]Y#/SM/1([MR]^IK1Y0[NC9< +M?7J4[C),JQX&:+L:E(WE>G7:(MD>WF865L7JWGD#T@%X$]$!TH%^$]3,N#\5 +M(24.<`NR3_@T.<NNY@,6I`D=V]OO\=N/*'SA(^O4(D[O2'N;UY*L2%9<IDA6 +M3$$59Z7E/A6%:Y(+=?>@R_-.38[N#N4G<CRA]^D!Q]>IO[2P]+>XG<M.%H[N +M+A])KQY0]D%0*1=AS!WR)]`5'=R:KZ=@/S;_]+N%OA!3JD?7J'+7S,2]VD)' +M=S9'6=V/*%OM('2*,["5)(M'XA/EH,U!DE)-W(E.@K"4()\^NQ&-]=7RD(JT +MA+*4`T%@H5T-+G,HXM,P5.\@2#G`FI-$>QS!D1D.Z1Q%3`4:A/*=2]3$:7E) +MBC4&>]R_:\S,(+;U<.JLN:LW"/@'X%@-(!(H@A(EL%K:*F@C)Q\Q(63CJPV1 +M+UK(E#EI.EY6RH`:MH60U7C+6Q"4LLS;P-GJBA;"(E]/F3K<<"_CYSX%F6*] +M3%X-)8*#H@O2%D'!4B%M%R2LB-EG7L(P$2R%/FLT-N*7:3:4*P(<2KE0E:95 +MD/<M:@,V3#<NG8,C3%PLLH:0V932_-7-$R$W**6E%%<XND.T2T>I\[99@R>L +MRUFFAGX%DH_(*@(W<TVAYTF4,?3=169#A5&B<<TQI&F"+&)M,::M=HU6J!99 +M6<U]KCE;1)*6,T<N'PTP58F.V/;&`.SNMMBSW3@,.3)=N:9YX\3:@#9TQJ;, +M.6<:JHY%K/%V]MN6X&0G%QX\<.V"7*+I9XFY\>+[-73D5:$1=8^L_]HJGV>J +M0N$%BFW%,:D3[151XVJ!`LM1F"%R`*1XUN"2CEQLJWR;3,@_V..)V\CY@GL1 +M]9E=?A<!N9B#$^W+>B62<?6!A-,B<<&H<>P9*1\ULK_T+X?[0QNN'ZDK9G14 +M!N<B#QM"=D?#C)&RT!21SSR8?!"CYRX=.XX]76$2G(G!4K'O`9:/=\2_(J(9 +M@-IF)--N3)MMZO.4[CC:,^V#^GRDM]\MM>NQ:PY=UOA<OM.'_QNS`.`_#RQ8 +M\2S4H<<Q1/(<<S*+Q=H_$B?Z*PB_'\GS05O])8_#ZQPJ]L8"24_]RV`WW<5Z +M/:BD__0ENKRVNZ_]I%OXUW;R/6!X4?I#$.)*<DUHR5C];:E@[?:=)4Y$YUFN +M7W&L_[=/9>/W'.RU[+)K#D/E]R"6%_JVXXPO_>.,L^S5SO]LZWO^O%^_^V?= +M_^HM[I/]&4G?ZYN/7)\13_];INW_LRN__J'(*?^RZ</]T<+9_RM>G:X5UE$' +M#EQW9AXRZ!IF)E&N&AO]H][@_]*J\7Z"DB]%W>=R)OU02/"?'$T/_*?:/((# +M<.+)MT^01+K*'E`3A<O9XJU^DSI:C47=<"O7@U^E7=Z9=>N7>X5=RR&,84,6 +MVOA%X$1\F$=6Y=_]XM@0\9#LO=T45+X@HVNBAC!D.YY>1."+TQA4>[["&0J@ +MHUTMF*PB&L\+V<WI>;+YGEX9+&Y4K2VT?%<)5=5AH<7R0U>:HO\QE"'<Z0^7 +MI^B*(WR:/AB\+S"/DCVLB2D;'I),Z2E,J@/2+PDDQ>0)0'FEKXH*30-\O):X +M04G<WDO?#E"UT4-2F4:&7>&2E1))!TJ%`<EL,8A"I/,)X1)U'$%T`?Q"F`F1 +MDM$?9<!KR$FE,GT(Z2#/B)DU8+R.J*0;0EFWK(MJ]$M6E#05IRG).2D4V15D +M6"B6"GF8*`DBG8V)(>0M0(EF'C*U+:E'RZK40A3,.L0JJ3!&&G38:Z%4/WC\ +M=[5/[7C;=T>5KH^!SG3\=$BE_3YK)-PYE6W9/(9"W9^Z7+'7*X6W-9!'_GFC +MR9>UN/]1MD:4V<C--`I\A)8VD$%$FBU;)M+`<J2D8ZN/;<@"'LB4GK62N#*4 +M5UM/_9AJ1X['9S*Y/.9*NL@YFZ_(&"<OSO19;C8,O'@WC0G15S1"R6;S>8S( +MEU8EZOLA?.!Z+-Y-H^7CHRB,L*/O`PME7`8+"W]HHV3901F;Z?.%XL?A?N"@ +M:*"$%:BJ_,'"9%K;R9*#F<T7CB3YO)-"W19#+-3$H\<3_+Y?,H1'CE<%LH+- +M3%FNHX7C=DUN9LH681,D2+-_^76)HVE_Y=SFHE+A!KN^MK=FHHO([)=7=KS& +MO7EB:%O*W5J4_RE`?U*M!YJZ]:NL53EC5G6!6Q)1S':,=(KB),H]B@5ML(P] +M,QVP)<`N^U\3\A"MK1$/F-L0'K+2+&J7A[)!A4U=\*2>&14]U=[O(HV91-X5 +MK$$:B7D]\0D4%,F,D#MUZ+PEZ8]J0$+9->;J"V-Z4,1QMLJQP2-12IB&A"$5 +MX*Q#C!37(2!VP1ZD=FA+9#$$7->L1]*7.EGFT:3]CW61B;XTFM$")6?ZH057 +MPE:8@)PMNAK3B:\A3?+/TH*:VL0C/ZM`7N\-1[S;SA+<<F$+D4WI&]6O3%&M +M^)N`G>)'WI!*Z]6UPE;2CT4;JXF(N)(TM+?*4=L&01?E>Z-/"51Z7J3(:=%" +MO<J0=8@*`K<I8B#I$;3PED@>J484-1I<]RQ#,_NB`V)),21L8/CPB:"V<.4` +M/R/4N4A=DE3XDTD#V"E3JV7H@-V7QL#=Y<9(?K@T%'=@R]/Q#6Q9"U37L`1P +M>YY=9;IJY:!>"52TQ"@'>=1,%>:E@B1!WRZI/Q"G86KRFI5Q);1_$YB%YHDC +MF"D$B7J"K2PRC&),MBW<=^'=00FE[\ODV#*YD4BHQ71%H.D,D5323JG\*^J? +MLY-.UT_+%O*5E/J<BTI$C@%[F..R*2Y*@Y/9*-Q"$2=EZD%M!@SC"9SS#<.Y +MR9G@I,JQ*$W'"8QY[/KHIED$LZ6A!K(Y6X"3^ZV(^&*=##136$P(;%#^\G[E +M_G1'I4DUQ!E1#"54(X!DFOLTQ4J`AQ)&G.R"D&EI-`7QBKG5M_"5WSP*M`OM +M(A%UI>GLK/R[5E+7)L:(HG4?`U7FBK%N)L9*"K/*<Y+GVD$=@"LTEBM%C)9C +M:Q`.XDTT2D5;-BO:PE(T##B/"&[87JE(.B+;<W@Y=J_LLE-EE6_IM"*Q,C63 +M;PK"%N](EIN"+`/)HM\U<"V.DF;PX(TBD2MN2'6!#O)M+LTP[0Q5]48MS`2& +M%(B\NT4%ND)EE5H546E_5.9*"QO"HMT_UM--:"L9[2KMJV!TZ$C/G';YNBNA +MJY>GL1CGV[E@AK\VLN=8102GV.0[4J#+D3?U&>V9ZU!D.&=!KPG-_JKN<0BY +MC*]#&2A?NT.9\ZK5%+<F$M[!"ZOOINIY.1%L(;M4Q1BP1=X,0:-KTJ(,E%;= +MB,%)UB$)YC;($7;&)+X5H),V"RK3^ZAVN@VXAUO773H+G]0^'.@,&3&383P! +M8R+0*TDFA$'8`S.@UHFFUQW41\WL[X+>@(&P(-6A*10,FGYR?K)GYU1-YF+% +MZ=V!PY(\MGB-[G%7TTIWV^(6)?=>QKV>R'T9'27,Y2:&\<ZV^DQ#;[_D47V@ +M&'$)E<G[,-"HRI'6!6+SV\)`2O9YT;E7,VJ:1=(42CX1,<0T4(K8)6>O7M9R +M_Y6.R7HSL/2M0V--KVJ(CV\LU/U93&^`.=HO,D68!$JB(TTI7E:\)-BX!\0O +M(;I!U=[;2HO(]N:ONCG"8C$114(VK19KU-4G\*D#2BMB0MA2/1.QB<Z+9V>7 +M8C[VFLL_)]U0'3^F!P:*D*(B.5);)E/17L;8W53'A-J<52E@E>>;\DW)NO3+ +MS93.YU#6Y?-#"0KUJ2PIW9MD3QU,:=-0:L2V,4W,D3.92R#LBF4)8G),\:\B +MP^+T]L#KLH5=9.`068K$8!]:\-A7A%`9BD^"N[2;5B*[""O(8TZHT+!H/)39 +M.N,5YV`=5[>"80TNC`)'86JXA,X7X5Z*RI7L61ER0%"3X0.TD`-!6*A=VC"! +M2!/9ER+,CAR53:$@6#0^!4P32+D0WBSTGVIH\6$F-47O9(E<$WN!`4$1@Y9+ +M7A/P[]4EH-#SV8!'22/X?5[9;M:<#W:&W;+GY$OYK0VX;(R2/J@[=$*GM,?@ +M0SND1L`,G@U7`3:9EELGM=JE@0I$;I>R%*[`')X,\FQ$?*2]^,,[P.MT:&4F +M)C(MB7=:\RP;(+=;/WR8UZ0ULX"*B:6--@`KEYHYFBPR#$\1ZQ)DF[JVJ'KT +M(FDY+:"N3AW<&TR?6K/=4EIJXH<^+3&].5Y,3O(HU;3J-U81P<#.D9B(]"7J +MUM)_<TL&T+>*M6=5A^[FN:2YUB4.8VBK6MVJ,-MR&[X_#DAMR!4P?"4[DF5P +M2*M3)VZR>Y7558YB(:T/7'9NK[)-;<E=7[Q>1*1'89.A%I:@VK61SNU<1*'? +M?7]@U!?*5SK%1[Y@I[3156GA6\]FW`[A8P8H9;U:,TUWY7KIZ:HR;)/X7\)> +M`T=7V\0L5YE`C&-X\54D%:2LB[RS4K@-6F&E00N8AQGX")W$4=1CL_`K^'8G +M/@`KU#"L8DO_!QLZI6%:Y6\M>V$4VB+CUNE[<EMJRVQE:U9FT!/75JUBO1-= +MG@ZQYDDK*H7_3&/0I:ND`[0[(I3VO.XSB7YFDZQBVO;.\CG4/.T8#?"`*^QG +M(T%E:E7KTI5*%+(UGB>"R*Q":M#7X!T?PYPAP)-'Y]`LP%+3K!*L[8A63(IS +M]G,:^NZ]K"2)LRT$TUN(-*8+E;;>&O*%@[]IE"2S5@2MO\F2>T!5R":K5SQ3 +M$F<$X4'*D[CE2NOM.2'&7.D/!SJU[&U*QYK[%#&,N:0PD/&D6X-FCCM8)]AI +MI*X*W`D(AK6_>D+E5!\(BM9KN1:W`'7<=<(+[",-%81+_DL0"B9/QEYPAB$; +M"$GG6MJU`'6>.7^P'1NK6B@,KTNJM:"0)VE,M+8S4&=22OO3I5L8(Z:OK1(I +MS9A+*$A&97N\-,3G4U]*UI+V>KSJ++=QZ=-9#CR'K@;$,LO==]I'01V[O=V0 +MEY\WV#S9%[^&0E;BO<?0A<@U\(LIL&O.)GOIP1`TT5(RXUO+R\&G'@;%.`,P +M;4F*C#"%:1XM`K""2+15G@UMH2EB%<M%<45]2I@!>UN)?'=81"Q)9#GLK[\J +M\/?EM\$U/*>8F5&-@4P/A`%:4JN^H7>FMKE@CHKIU;B<F8*1EM<R;8NU*\UD +M@!9#WMB?(6X`QM#VF*D\,2K?""?@R-=/#:@2E<`45N#4D/U!7"+\[(P;=SSD +M/L"@79DN<&O<TV.#H"6;&7Y'PQ\A8#)6VRB;U"G!D%,HA@PSEM4'M9;!>J6# +M"ND\M+E:].N;/(]CJ1>%OEY$EHF#E18?5J3N@3'JHLWL&$8=?>*-RI2_)K0" +MQ/^%;ECLF&2;#/9>6!Q=Q_X<2[VQ0`A_A#K+L%@28#(>@JKDLC'WD\W?D283 +M\-D*VM-49[DS</G4M/9+"XNM9&`5KT2^,)U]EAG]@DO\Y9K9SIRF@O)0.H+/ +M07K&Z1G3/!/*PR:<<UYW/E?3G8&/_-`%D56@*482Y&CAN@2''JSXX/0@,0MY +M;@J0]L23]04.MUQ56Z@K3@F$COYJM,C!].CR-4T._2:&F?RSZ\K^<C$(U12; +MMXA+>IEK\G++*,%(L;Y&6C'>N3?984V*2^-(D2/8GF\M100RI=-R>>``6U9C +MQ8=Z6."+!HDT%"*_N9PIHSA*,!(1("M$1#E*\VUD#N^1$FCQ/G9'7'A`Y4K/ +M8KA9>`!GC?)FKKRO"93+%4D8O;6%--39,LH@*T(AX1&*5R:<O.VMR8GD7%`Z +M+"@=J:'E\4Y9'=["*5G>L96`7<V\B-0FG982YWZZ8E]IS6?7:M&@4&IN[19_ +M(J9^J*.\.(O#;HAS?"V$8.1/NW&HJWHCT/G$FY'R2E/4?&R16_L872(M3W63 +M3![(!G>1'-J6H*L?+X(-HC:H'>0]-V#W5F/Y+L\6Z6N6SY0C!E]SXB;[$M-H +M5Q0I"LMSQW"V^$QS2SS&+.>'W@W8]@ISSPOQY"L65=%`PJ8H1#W/O$$*O`E+ +MWX1TM`WK=S&A5YL606KF8Q0)L;2)<]$6+13O!7D[-8TJ8E;UE"8>]<LNLAV- +MRDU49:B4XY@'.^J&L&TAWM6@M4G*"D36,$<D^^[7FJ$CV6CF90\$%*VY%RRN +M"7X<^CX.Y@DD=\1*%;?(IF8*S%[4MDK&MC$7TL;*Z^`L)OMS0ZJ5O,(CNMH% +M;TH=[1)9CJLG='2R=W8%F$5Z`/6*QJ]JP5>=)I8\O'WJ*T5F&H3$,]*>5*L% +MYYC%)*D_7\TK*J'92C.@(98?HL;ZK=BM^M\0N=G%0R:,7=6IRY/!Q#I36DL& +MK=".$FP5NH<C6?H0C<,5^U1_-L?]%'A3RF&63CBYD$K<Y)>1LF%WK2T!`B%+ +M;9>BTA*CIT.O&,(G*1H'=$@VRL@18EQV(6+(QC-Y,+$X?HR#H26TK/NC*N(G +M9/Y8QC%4ACC:'G,T"[G:T'E0/.'(SE"'+%$(H(AHU1"4[+&4^LCNE`TL,/QY +M4%R.6E0:6?3E2TE/;2'AE.3QQ,0:<B;/G>LMPO)K;?1ZY>26D[QS*SV\7T@[ +M]S)X`6>*?5UMP'`1BR\)5%43=?U7@$,EB#*$O3%@>JK;$\UO8_(QBT33D6I? +MU19;#!55)!:#@UWPDLI.G#JJEJ1M@>7JV!QQI^64;:YNXA-9<K`+5Q&)\A;; +M+N2U5-;/E<$#A"18Q`I;?B(1,7_?7E2K3EJ<UHNYC>T*`V!N.M@4C_HO,$+4 +M9J]O2L%I`[X-!,8FS5J^$%M$7R`LD,/`UE9A-[.$#=V<L=%GKI`0HCK8(V'^ +M)+`(%F[Y%J2*T\K4XYNL7I4WN%]BCRCE]W8@KH#H"M8C(97Z>\%)CT&2>/,V +MWFE/):X!@%EJ4@6?R>$F\Z%D$V[0L!:LE!X!SM.L0Q_A>7.K&8V5M@Y]A>45 +MN!,6%M2A95&5_[(V+^R4B-$"=N$NS^H+WWAV-Y[;%0U"5#'!*V#YPG'.NZE! +M<<D;(2W,%7R++HNR7ECP[E.F;0J#-*1=*U4.O_#6D"H[*;TEIVI4./T1$E[1 +M!;)*]FHC!VLYT8O*]$]S%H*D7SBTRHBU+E?R;RO;OZ+T1:#!@B+FG8]T"30/ +M-PS-N]+7U=JK02A,Q9<G$97J)8LS,F5H)2AX=>OV=>;ZJ1U[6F/V!_TG!QH\ +M2>>L>S`]\C.6;"^P9.MA5%]6QN]\:\;Y&97Q1!MR$/)"-Z>54%<DGE:G09RM +M24OE6/XG0<5+#\L#,5J;JS=>*:8G@V?/!"/9XR;(^\D]Z4T(TK7]--M,W!G< +M[CE$B5*QNQ%\(AS\JKCY%O+LEG`K])YP')(O,;G$'-@JQI]^3-4U[J;#_=NM +MZJ^+70/=B*N.P4_X>NI)_>Q3QNN6_\G7)^,UVZQ%/MVX_U1QFNTQM=26^S:X +MZO]BUO%</!<.JX?#9];HC:T2UWX+EJ138GH-+M%Q#PJ<A)+(M=@W`U(6^[U% +MGQ)X4LHB)MOFR@Y4[,655EBI7NY[FKYOE)IIY'3L/_!KR2_^1TVMTG.0V7#% +MPZ.0\'(=7(?H-=]0Y:<47=:@JR&3*P55YR%MRR6AT>JA5B,=8>R\+2?76)1= +MM,'$3N@U7@%=JQGF$Y/\?^5HBQZK&WC0"`MK'$M$,5J_7WPP,\<45J$3TLCB +MK<X:0^G`T$,%*'@%R_UZ/3XWIY7=V3'`VQ9&:IN%5B8LK#6DE;ZS[JL?)\DZ +M;D;'N1RI>3E>U#__CLDV*"N6V56N^!^M=U"N45!@SO_#^GVB\EOSN,TE7V3W +M*R9+*0WN)769$M9-)&/,$G]DUF9BVIL0RU6C@HN$TOIHH5IR%'E8O",(\D*( +ME3.\+5)"NF"MI+&=%$0P,$`[B3Q7!UCU3N+<H>A14Z-3.5SJ2FJQS"3FJK?R +MMZ$P!"5V%+=,6Y+S1V46DF)-CNMBC5*<4VV63N`FRH!W!U7PB;O3_45*E2=U +MX@KAY?B0RY$E%1*(]Z.(5I'1E;YEHZ.F1!GZH!"4../:1"O2@FO3E/1:>CO6 +M97+39HRH9L8RZ%R]X]3K>=F<X"V)*]CW$`YX!R98BH6:LH"+0>G/9&CQG!S7 +MH/$H%'%L(]G97G/5G(*.5#&-6V=\B%EJ<RUK+1W5BN?N++;)6)BM/4:G);B0 +MF;G9T#/=,406N@E>F"G_=%=K"UU'=&B=/#/!R7@O70P\2C9P$2H.2E<Z2#41 +MA4W*TJ19(NY4KX-0I/.?GFMX/44YED<*U#I&.D/(OM(;DM6]2Q..?-(BI<0( +M<8,;ML)C.Z]$T=[+>$`Y#L0V,?T(?"3F/"$J.*Q19,JARWX"+D)GQ^K6;R4F +MN5>R@:[X.:T^H=@(C$,-4DPDV#B*+=E$T`?5[/Y*E'*O1>UWM_EIM1%8#PMJ +MKSQU9=XU_HU&'F@^H#[$CR5N>5>C*6]T.WAKNCSGZ@A-ZHG`3N-GI;-24QV1 +M/-Z"'RVTFH\EB\?>-)_4/W]V#T(?8^5NDSXM__W36:RP>^UGOA_]66#WS]7P +M!_]>@N#/O=/\0?O^<#ZD/LF7Z+E:I._#_;_NNLYF0][<_'_W3:;Y\/?,S\G_ +M=+VDO",XY6J3O8^4/W_2^[>:TV;R;#!]XO_!L:25<*K2PC],>NKSDHC3U.<A +MEIY#,+<Q-C/<9$)A;'+W^(#Z8/JQ^3#WRLTFM=T/1:@47@<!=C@GNC\Q6EPG +MVM7KO,.NQ'<*UO,,6A]U.D(5]\]$>//7RWHH+>G[9%LJTY;[5V^6/=/!N-*G +M!`CZ\=`*,;Q&OM[C[MY\E'>3,V/O'M?3&KL:1>#OO#3GRD(&?]3ODM7%OO:L +MQLBTZPI+MD4@^/$Z</JUG\FJ7E7I`Z_A!UD-\7%CB7SRM].LH?MO`N-5]Z!7 +M[M7O"/\FC$?>.ZXEDM5].6X$!T<M^I9-J'"L]J-H./PO3GN:/7H>VTL)`A#3 +M#MQ9P&'E&I#R6":(*M'#LY"XPM66`\T'&MU_F4Y8V5^5_7&6NX_*M.EQ3=OU +MV-+LO#7G=DO<6)Y>W[1>7O"ZO`8Q#%2='^U:USA6D/<8]&N=.V,^?"G]-)GR +MI;5J"^5=,K?"C>:1Z766T"N"4Y@H.D(V[56:*FA;EB<I8$/D+7<50%.\*C=( +MP\+DKC4[O";QJ_?;QO^YYC:HKU(]MY]HA3<;G!)^$.`50+OEB8&PH?(>EDP_ +MG-6-J:<>1Q$9@K_'+%8&88?D/>2XXNKA$T[<>QT.>;@D`-0?)8'>1T=O(UP% +M][EB<!]`'R%KM]'%ON`_VI\2PERC>KT<C7JE=WJ3@]H7QI0PN'UOMWS,:8N$ +MV3Y&:'<+TWL9']/(#K/#%>M3XJ\+X+DT66RK$AH%(UY(=L9Y*%*Z5BP0R]7V +M3^IY-A&.9]$9Q@WG0^(KF-]>)JH;%3_5Z!;LM&K;%%Z.\KTA>J6\E_K;$/W6 +MOJSZ\%"K0[PM,11)EM*+3,\AW+U7+$W9AP^0M=O4A.%*BE&%+6>J\XHAU*<! +MO+.[NS_((<F-=`=I>KJ$1Z,'7O&\'YO&F/<]&M1"=^;5N41T+O`]../WV*,* +M^^>%HV-4307IN$M!]@_&^*8.`P;E``#E``"```$"44\@K5VG8`#==ES=K"Q/ +M5P(;"X'V``3HJ!;M@P*V0J=E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U +M;G)A<C4O;&EB87)C:&EV92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-XM' +/428#!00!```````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu new file mode 100644 index 000000000000..eae45fc7a2fb --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu @@ -0,0 +1,208 @@ +begin 644 rar5_multiarchive.part08.rar +M4F%R(1H'`0#"(ZNP#0$%"`,'!P$!\,:`@`#/Q#!K5P(+"X+&``3HJ!;M@P+X +M99;E@!4!-VAO;64O86YT96LO=&5M<"]B=6EL9"]U;G)A<C4O;&EB87)C:&EV +M92]B:6XO8G-D=&%R7W1E<W0*`Q.J!*M;T74"-P'V.L#Y#UMO#KJ6K6EJUOF6 +ML9J[`+KGRA+TZ:5.,M@$#IW5GDD5&C/M\2CX^SQ%DAAU:,%F:0[4)\`51@Z\ +M/KO*UN'+\EZC6_>D75]Y6EE$6MB<^R//L(18\[;_\R#E`VW`?#QX7/(-98"P +MY!=R']2/YR.\H['.0RV<Y)SE1C,CN>1\3IN@QT'\/C_.,5W&M7^:"OZ$G#%. +MNZ+DI[;V,1&Y))7,)K^/0K_7IY+#/^\+8O".0P-8CD&(0+_LU[CP%UB#=F\B +M.\6/DR&/A"Y5JEM02(#J(P"Q#7+N0^6JV2**PJ]NN\3$E#%!31!.></E^\M8 +M'+UH>T7JN/I9QV%@6!\W6>H+C.I_4%R`"(_VJ6:Y@T/CY,`OM*?+"E5:OKFN +M1';Q:DTD;DP&7)-99:18TA"-/N2>-O9Z]_+%&^*4L+2E<5\Y6_FXTB#->&,( +MD_D],;Y+K+]Z43H0.%#LCF.<7'JAV(Q<E+2`Q(=79<F12+1<OT"O?50P@UYY +MAOEEZ0D_K3OVBG9D3:/:GSD,1$7D^1RZNI):CY"<;Y/*BJ!BR$6-V9]N<HG3 +MPI1%E^(5:A4;&('^`6OTW.&BPT_HH'V+HP][:[:>2UH:X50A1N7!*\SB3Y6B +M\`J2[]+*X0]73.]3:"-M9U&QR'XT)O\CIF\C[M;G/\;Y&BH^\>IT,?<(RIRY +MR5:MJ3MNX\-NVWQO+%@<4^*_WRM4A?YK([%ZQ5SDQR/+VX^_UV6_T9ZS:?3& +MA?KI;R,2XPH)@OK(B-F(CE7[L[D01WD52#[PUVN6SXMC6AE<X9\LPXT]DT%# +M%DXW/D,TBX41]PQVK6V7'<'V@(K@K1P@?S<L5A=9/(E\'WAKM8?GN34KOV,0 +M=/&O/02:]>"BN9X<8)X#\)6_GK%VWXR%P0+:Q\-LB'(8$N88NT18R>7]VMT8 +M;/Y#JX^\.,M9+A*[W[?(MZTRS5PP+V6$%T1'5O*<_-LEPME0/H<L5_9Z0/>^ +MZR]EN]7OG?VI1C=MT<+WD\1J7(_Y#]);$L0D89_$[6R9-R7-IUJ[_ON6++X. +ME#WOJLS9+OS5JTL,[KWR#WF>37@[C,XMI87V2(C7:Q->#3!]=XWR(6>5=AUK +MM&(-\"];=ND3GH?&4KV,%&I1Y8[7O+![_;NG#]+;!\$ZA]3G@^N\KG&(/I:" +MRWSEJU]\T.I\\G:==SB"YP`N\:D"VISR1/1-%SA++%6P):@UQ8.GL>:KHHC( +MK:94JZJ+<ZRL12@7^W[M<*Q6;R)9Q]XU/4\<NT/'F(TTI,T.D,/MV9Y6WWN/ +MT?_"ONC.\LWQSE]W;[EF`][I.K#KA"W.?E+)F@MCN*9GN00T?F;W<_=3G&+Q +MSR*V__-><:M;IHU.NQ76^$Z6FN#J,%"LWP6XL1^H;=/UCG:_&0!,#YU%=7W% +M.6'.YD>1%=RM5VE>LX_OY=BF]UPBXS6A\@XSOLL1&T4]O?PI]RQ5[3\AT(?G +M_G]?&MLQ"H:\>KX2H"4#X(U?*4CM+;.OI^0'H@^NV7R(&.5>OPUV+=8W-)-B +M%Q[FDK#Y8LSTZ8/>]]V5DNP*T#2?6YGLUQ5.CIY4WO;KR?-`OK8)=9;$GO7= +M:4;UV[</L?*UOKPUV&[UIUDO/ZKN]0NOI=*WNF&GG>BG@F+DG%;)$KFI0^NZ +MA='`'GAET@SI4<^>JE/4/1'PPCKH:MNEWPR@!6U'2M'!M;P(.L2O*[U&7,<D +M0.@`0]<7T!KND,N?!QH)@2]\-$PT,NM47UB?FFYR7"-CXN%MXVXK#<AB@FL/ +MRZ-6I4YA9[>%I`O4S>"J=R\]M6\2UKE@6L^[ER>SG_G-R5^'N[)@@U=^U<D4 +ML.)O5:&)?6/D\LQ8+L%<HD==U(H5J3T?_7DP=10FOB6C!RP(^0!E@7]..3%% +MREZ/U1(+Q!B],U"I>!>M90"9K_A]:(DBOM-&Y$,GY_A$L&PQE@W'B3*?LAOQ +MA6Y$>^/"Y(#_':KR)=!=_O6/1**-TY78\U'P8R/P+/SZFON4=>+7*"&CY^WD +M=CVD^^UB6`=+$5A\=B5U#]D9>?_CEAW,%LGCZ)#[QA?&#^&G<N[CVYC>V;?- +M;G[M<R:.,\>ML?>*W]'_#WLLM'+#O&4CQWLN5O18=K9*W,'WMDNKXJ,^27=_ +MH778^5=;"F%:9>.WC%/@AM$&_`%OX=KUW*N`DTZL/?CIULT<J`+KM!]B@R?O +M4T.QW4@SH?7>5OFCW@-S]ETW\]5M^LT:WSP^Q\K=*$[Y/_3Z;[/*\L.JH<KO +M-E#??JY5]Q1]U]V\H'L?'JW'WCN/,LF?>P?Z[S>>M%"TBK:2S"UC5E1<7TRM +M+9X!,<78[8/@%7TMLL7U+(55M4,X,G!3'3ER3.2';81\!KYVQ!KP.>#XKLGE +M\W8DI,<\1*M<NQB&MY/BZ?`,;]=ZK43&R7<D`]N37Q4`YN@7EV#'KP)K%Y.G +M+ZL\RY?1E0P6X%8`Y-3[@H?54E/TU;F4=3<GVKV6V(CSE@O,`,E(P!M0!U53 +M,R-/%8:.M-R1N0A)0A)"DLK)+JEE"2QN>9H,PD80(6>`$A*!A11)IIMD3\*T +MFXW"T\;2TIJF8>&2Z`N6D(!AY4"E(!9#PAAXPRGA#(%'"X6PA"-Q^<C;C<D< +M2T^]3_;YSG?'BZDG$IHPT9\\^6?!(:[WG.\YO?/;J7-I`<W^_R&_X)^_;YO? +M._N?ESP2TOCW7?@OLO@1$G%1R:IY%4?8O^35B<Z9AIFOO!]SQ/['F>\SZ/73 +MI_L$(=S2]A3:FL[_L?5K2\">WA;6[QZ/NM.S\C\F]_UL!17_*K&'Z<ON9(4$ +MOW&G+F<N7W_V/N\DW";]E'W.(6LJ>Y.Q=;L_4=3?K82956;^V=D75QJL3-=- +M[5>@ICIF<+GT;KI1VA7D6/:P\K]6OMYP\Y_TY^?H;9M>%3?5*C&83$S>X/]O +M3&1+__P?)A,652&&,5-:KAC6SF6SMGBV);#>64OQAKQ+.JG&,)H(7^!T\XZ^ +MK7:PHW;QBK=XM_Z-OB8Y_>XCHAO)$=QN\IDB/:O+[5".S==$/QCR$<<&]"N\ +M6/XLVY5K_<X?Q!KF>3F]DT<,<(6,;N"L7.?(JP3;Z;7JK^[`_J^K>.%;;=+E +M;O"/]L.9G)&H?=0CX(ZO1"3X&]*]UI<</\Q\WZ!D&T&GIKYNZ+[DD:>QBE/V +MU9$P)H/1L]!/^]-L2RY:]S(,8R;.?XC?//XN8)+Z)J](T0V3CZ+'$DVCE2/_ +M6;/RPE?+'W#_GTZI%T&\:)+;$S/3JV_8KYPZCJXMWO5*W[&8'P:OTYCH6/I= +M6GHJ-X'MQ>I.1(_2CK0/NDP`/T)<-Q<;2%ND@BW(Z)MO3"STCAZ<4%1^&LVX +M1+4+'_FW^V#=S&41]AN#2:">SAMHT7.Y6FA!QT7-EO\K*6A)D:$'-D(YQ!C1 +MJ(SCC4I,'`:8K+I-XUA1G:^\/T5`^7CDO"TSS0HPEH?A3&"-`ZSQVN'^T0M: +M[?!M*9Q,/WT(V"1D1-HBC$#'/I![+KLYH!Z?HV[)SD'P)BZ+@T+R!`9@<[>T +M3\3XJ4=2[J'[\I=3[B]T'FGK*@.HY!.7'9*072^_Q-7("A*2L;L^]4C`?>N4 +M!0'U%.WCY]5!B7*4ZH=3\7?Z@HQ%_AHB&8D@29XC@]<`_L@E%N,&X>5$(MCJ +MJ,YE,<:(YG<`_`!S#Z3%_T<>"(_#>72@FF+#OUE*^A4A=88?$1TJQ--K1``5 +M_2BYK"HIE$)\*;152!5;$58&K+<E(5@*=910%-85*%:"F]JFH?D]0BA,(&.Z +MFH#PK9YP#_F9&'W"$Z02Q;9CD/.,8T%74%+.J<`^U60!_#!1B-,Q`$N)E%;T +M@_68\-:E$KL"HH3&9L(`9R`/BO*AN:A$'W1F-L&H$PS)`,8FH?YU2"#1*1O3 +MLTFFM&->;!_=8J.&IMKA]-X*+X].ZF14+8_3/)]R]R>'@?%8>@R*&121,;JN +MQV5/L\?DP_;PE'\QBFM4"\D?B).L*C>7]1/$P^0YJ'TKFH*"36">.8-(@6_S +MH@M4#WOBE+W0)`@/.O(&XA\N9XH4@=3X1M-1/*J<\!4JZDN`=R`_4HY<)3,K +M)XA[E3.*(1I?1"HN45HL^(;P3A^5HM-ZLH^#M]3[+J&H'!Y%\,$C@@3J?]/= +MJ%JQLK-9%3X$,7AE"['2/4U/7&-.`1.$YC`@'IK*&":=^%6(FK$IHJ-A]DHV +M'+V-KLU>80_CP?VMHM/6@R49U%[$TXPIA!TOC<#7AAI)A-$^/)()B0[7R]F. +MPI8UE^H6#=4QQ-!:KORFM8M!2ZE.>'B&T1JIEZESB(#QFC`(DT[%#4]G([(0 +M6P%C\59`\TQKJ,0D6!B@(3"DXA2!!8<[!#1\2J$;C;FH2J/4E$$($!L(#J.W +M;YY7"%U'20H\'Z2E(V>P_9DFJ05"JNHHSMA!00]N@9SJ:PTMHLP1,^_8N(#B +M"?R8@>.R'ZZF?0G\JJ46#YYM(14J8Z(&KH#^7VX?[DS;VFG>,72G.%,ZE#E% +M$$4U5P_R`J]<\?UGXX'Z=E`\%RB@/H+-A:<LB4^BK`45P_,<4>J&G#S@,7>I +MKH1PN<BOX'`0'!9LISWNXXE@1#5V=.>FH+&=Z+AJ%7`@&DF-)B:G4=R$IA), +MW597\)Z%ZE/4$III'NZ313HR,>#!`TF.B#2"9!*D<<NU-0*0!K$/-%PH47$* +M*6H$'DH-(S;WL3>BG=5H(8L-3$"C`@:P43`91M^5Q:OHK"+B#U+G?>)"!I44 +MFP!I2_9O,E*H6&]8FL8M(*,U"?B\0&I@(NJRF^*0,]GH2DVE%%3JZ*N<0_X= +MD02F*Q^6@3EU(Q4,)FL*5U"9M(YPF?UAN:RA$F*E-!HRICR00=@@NSU,4Q`- +MHQJ+()'<QK'PS3K!&D8'<$9XC"I-'O!-<L%`LZD\*7*5?P3'-'&Q*JBX#&^3 +M3-/(+7)VOA%W9XH+\M6%*4`F=6:88G54WY/@T2"D`%M+4TA\/0'D:T6GC^L^ +MS.2?$%-;"`J.9""&QL%65N<:K0)1:&D@/CQH*]WH:PG",!NTLO`(4:N`@FP, +M;2>P.-?X%!IY`$&7A0RK$5XW(0;D@""-3@6>']7IHR/WTK*:%+`@M`4FP(&8 +MGS2HPM::JE'Q!#]FTL*WD<Q!-4HM'OC9"(-K-"\:*)Z4!3L59U.#4H*4]%K# +M1R#:]%!8K5%V>!L(\GI7H!6*D(8&ZE-,>4_"9E:"$#%4:Y^(K5L(4_S.VK/? +MTEER%B4XYZD="BA\]@/*?5F:!+$O6P-)-6$P.(8O/';*EV((?B[IJC0$*6\] +M=Q&<@BDOV#`&Y>F^AY&B00@<@N(-^&IVBX?*!SV%6N64X/=?T-(<S"%1E+[) +M8BV"K%:7[,:[7C,:6U$+9]%'DIR7;.8H8OMS-1;D>PC%5U0E>@""P,Y3,TIG +M.X"&1#<0@+<1"&,J@CXL7U6'EQ/:NU=.)^'T^QEY#7FD=R7AHF%C1#8/)X[/ +MN-+ZI"F5#*"DMZS$6"T4RX",=*_KEV\RD#Z?X'N&1'P?;J*C\\Y)MQ\A*BDF +M@,`\%#:H6#5,?\=_*:/3:;HG>DS_3'O_#NCB\O'_'^#*D?L^*N86#B*A]/$R +M+M!)<"PGR\;1]94'ZT^H92I60TFLYB)5-4C-<,7P8NT#TB6.A`J`;!03K6/R +M#CQ?#5M^,2HQJ4/N6()=4@',&*:44O*/LD:W!1[FEHK&_$&<MD'6N<%W-35G +MEHTF_"HC@W2Z58Z5,S+ZC37+A!)"&3FWR^HPO.3=+RB[*XMO&!19J<V^6U%? +MN,:I443TFJB8X,1`]1A;F7&2B<0H=1#I/@5EV#@ION-U$0B75$9CBY_M_MGI +MG(Z$HF#1KBEY0]0<6U1X]';ERN`S8;5&(04-;:(.KZHITE./4_5EY0MW<%.2 +M*52IT#G&/1K?9HU<<RC<Y(YI6)5*6F<X3Z96H557:08-+0RQ/9J%<^H5H=V/ +MJH%<8OP=.C<B*2]O^5W%ME[?V&293K;E4Q%;TK&F0(DR4L(W935\VV.SOUQ\ +MW"RQ'.;+N`Y#-M.WLM[\Y@^_-4(FL<KV+8Q;!H+LOC^#F3M)X2PC9D%V\1P> +ML]`_>Y&6*B_;/#&5LP1$(-(LK*H8C"D&(N!I-V4$V3_,_#=AX/R/$<'L:IX; +ME!T9R0B,,F^\1)6Q`<TEI&TWH]8<A^0V*H,ZGA_5Z>4A(ORM*@]10F8WV@/& +M#?9MX.4]$Y5-C">;3S*1JGJ<NU2J8%TXV2J_VB:I&.VXN2:QI<WP,DD4^+95 +M+W5IEK5RQO>[)6?48E$7BM3[ME4\0'"5N4<;&U2+DDTTSR6][(+*[]J'"+*: +MG_+*I<IY8@NU17_'.A+N]-^P<J!22J:6J'UI5(;5#!>"502R531^),ORM;]% +M@:XS>/IMG#*UL.G7R7UGM*Q0::TW<-6K2N5ZMM=^EW=0^[+).S-WV.52TOJB +MV3*A9LL;L?=LT2N2=;*]/=KG/&K4;V[9V6Y\DGWB%3E]#8]GE^,^OVQO,J5I +M4@V&68EC=<X-V;!1-O7D:U!W>(X4+BJ(+\8=U.$;YZWQ>2T?/D4;J:.42`G\ +MVA<V^6]T#A(E11KBXML?)@FGQ_?B\C,?(+W_1F_".&5U"..G5K47\9XU50M/ +M55-_V"M=C?K?),J3"!1C];`-X;/66SCSD/^\7M>/R7;=?<;FXVM)7]M7WM[B +M]IJM>RXM?MMIX>J6&T^+*;2^/XO51B7O8*%P\W0=GB]OFLE^'[GN[/_:)R5] +M"[.^6S=9Z]!P=U]>:4R?I>GJNQAW@W,A'*MX"4'HHX]%N=M;<@J9W->S\.*O +M[''R2-GF:.X5&/G:2=Z;K]?4]USEBK']LE^G6"#4VZA]5L%-5>:?,>KJEA_A +MY&,[_\VXT?F:#TO4_Q?\M_&O[_5=K`M`W9SVN\?^UG">>K[>:RNW$9_0\!3% +M>_F*;)ZZ;VG8FV<`5?U/M]O8=FJ-EH=C]_5>YM]EO-5#K>?P^>4NN.4KLE1* +M?\_SU:F7V]AC5-MJ>)I.PPLXIKM7-9?#=KGHF/L:#M<EZ7!_!E/CYCW[Z%D^ +MRL>9^*<Z6AQ7Y-AP\(INM#7_RH^W_%#X7O8[F/@4^3)UO9PK#KNTS_^6Q\3= +M5>0^\&>]@>,IC>A$OWJ\WYG\<QL]A.<WW/X_,K.TM/%^T\^?E^;[KK>QPO"P +M!N>DKX<2^WMS#4N;)3AT]YSP67*@TPPNBGH\`B*0.._17?)XNIQS$E_;1/Q# +M\GE_N>_MA\3I_!OH=E#N[I^IT7E.4KG8@O^/TGD"*>8AP_?RO?.^)?<*'NF[ +M@G#_C./'J6.ZR.`=G#OHFCBG]M#(YM>9]CDUHP_#X>'X&'G_5F^VI;!1WWWX +M/$4ZGP'G>NH>.PU!V&S];O514.O].N^77U/;"/>3^3K+S,0;I[X?/]_%'X_S +M<__+PNG5.MV&[[2L4["C!_]2QJ*[^O4ZG=#I1;/>=ZC%0OR*CG-IT?DY&FJ] +MA6[S6:G29_P5.L[)3O/A[?%UOQ=\IM=KX'MJ9#?WN,ZJ)^E2VY#OMO_?F9JH +MVN=GZ[RIC[/9=7=\MK<7T6:_+8]'N.3^UX_+[_;<I\ZGZN:SNJI-E_3)3OL] +M[XNI4KOT<]LYKQ??V>3[_J,]1;+X:Z;O?KP<-`Z^P[N_I^XT?L=7^'7=QR76 +M^WWW=4G<<?J-%ZL'+.^3L`LAC8[[^A:2#Q&-O;PUK,0P)R/,"*A3I'.AM7=- +M\3)RE<FC.-ERN>V>G7,Q"<RY>AN)V$A\`IGA;$4/M[(W23P,3DR.@O$YS\B7 +M0,ZS<)B^=-H]F$Y\3QF.9FSS:1/B+FA=L/P:'`A#:A#Z)XF>C#K0*"[FB"E! +M5EY(F;F(R//_ZJ\&P:LY>7T6;Z:ONKV_\[U437N^;VWEZ[Q/P:^[V/\,3FZ. +M.XA_VNM[KE>:]8=/TICPN\N_5[N%^3W<2U%/JN\?Q9L5,?Z'.JFZV_'V_-12 +M!-H:1^+-3DK.8Q@X<E:8S`@90[SM%Y>E4\_H(HW61O9OQE.XUNB#=\GY=?VO +MW=%IOX=I6"$.$ZCKLEV?MY_$#+C>C0?VR7P<PL=C]GF/`ZE3F>FIU-#W_CX_ +M<54[8[$VTAZZCR[K7=S7JCEMQV76#)#^1E,IFZ'H<1R"A=;"ZGP+ZSVP+E[[ +MD+V5.7ZOT.AU?/;%3V<]W%;4\C5C&E<IYLU3=90;!3PO.UV2_/ZJGKV<[\-Q +MX-=I!FCOO_OF_.S_M]_J<I[^B!^4QEIH/2LK"W^S"_?3;'IN8\_8:'9:Z]]_ +M8=K9C,2;F=WGD^]Z/C9G7?H_9HI[WN2G?]Z?SGO,OM=JRR2M[Z<HSC'W3,NU +MS@$]=S>8NR)Q)DA14@.0./A34.)-23=-(WT42MN&V$4.@)PIWF%F6F,R!_O" +M_Y1W\3B83?'A\T,I<L2^PBG!P@A3A'0G[P.COMC(7A]7G',Y"TT5"W#EJ^0T +M)HOIEICO!E1T9&3A7LT#UP\*TQ]I&0Y^*-8(7#FR(\.('VC)*&B&.;AS7$X. +M(8)0@Q-.L$90S`]GC"0EO_:B<&[AVMEOMQ=?+<W5U<7&_X%YPO3S=U>Q.!=3 +M5[;;^XN=_OK>XO;WD-X^[.VNKL.*[<O.^#SNQXO+D=>]NK";#G6%W:V>]WMD +M7FQ']8VMUO[.TLC>+R\LKH>MQ:\"VL;FXL;*SN;&T!R^6TMK6UN+"SL+"XB@ +M.^S!O#&R'1M=]]?XI[U(=52V\];@KWEZ''=='W=P'7>V@<6]O+6\W5IN^YZ? +M?VEJ&=K8;T-V\O0:[6WLON^N&6^X-N#@.C9V>[$!;2]^:RM=W9\"T^;F_)MP +MU66_N;3?V%SPAR[RUM/ST5EUNL'"W^4GD&T'+YAZ7(,MI<XNQ$"M]:B'X;:_ +MP=/:75GP0206!!,.BT'@0\!KL@0+RSG]E<7>Y$">!<#J"`-T#W9<,CF([6HB +MI8B'O!O/AO-V(V_/^O4%'<-=MOQX$>>`()6]M;<`CU;;VR@T'-6UN74!-N-X +M(-B!XD,!<MQ"^W$*[2[MK"VM.*15`R(X;E!NRQMCC\'B:HK=MB1_HR%SDPG+ +MR<2AU>3B3EX6%C2;=XB/%R]FXP\3/$4Q6^98N96OIIR@PIA^`9^.4?HD?8), +MW4Y=R2/G_VGQQ%ML0O>QR[+WQ'4.9;]G;7]W.16LF)`0B<8?YB1#=(=K?WN= +M?WO8%_B'YIF(APR,5C%F>(Z._AVQZ(.U"CS<-NKO\5OH\*:9Q=H%-AI(]0*; +M&GB5,2=UQC(VYF,P?X.:DNX><5D#`_%7T179EAM7)[O"87A\KN\AN(O6(#4? +M@5^NO@E[N.S_G<</(F)&0W9\`3D(N.[79?&I]L_,-O!]D&K?'O&YG=V;NO/# +MP_!PW#=<&8Q$/$J7.)N4>@\V(V\JBA;AB$,5#M1>4=Y),W8%E$=<GH37<GB1 +M,8X[<CH,.G>X?$G9&?2';OA"8<;'$,/8[>?E!YQZ.-RC^NT,E$&8F)Y!&84H +M8+M2'F@Z-"(;U9B*/9#I'['\U%1LI9\')#G:E+_#"B%=/6HLCK(?$3_W-A*O +MN0OJ6GI80T@[50H,*K?ORYGU%545'2AB/GS],$.U4Y(MZ?5#NC'.]>0!RPJB +MJ@NWE76EI?HRMLAG)_.YN..0D/.#DJJIY7'TP\_'-340<%734U<3R:L0*5V- +MW4U2,\T2'PT0E@DBP=)&&S9&K;"(\ETB*&1``RAHAHCD0Z#U&B#T$(<;70A/ +M&(AW:HYY20U\U1WPV0R>W1&BFC<AA&O>6S>>R^:71="A&=Z$=KN")1XQ!^1U +M;Q_.9@>3(VF-S3[9&XK1QYV_SS1NSK1]9W,K+G54:NW/*IGE5SRJ9Z_S.75Z +M',LD4+=+!99Y5)Y59Y5)Y59]5)]59]5)]664+8KHC),B%4DGIAT9L2,LI)D7 +M;<YEYYC_5WQJ@\IE")+5"'R$(7MD',-T&:1B#7FB#@FB#H&4(*LH/>CJ#/Y( +M@ON/(*H<VYS;8Z@>E;1F8N@M+J8,0'\Y("^::%"C4`?.*``G'7PSAKUO!&O# +MVTO>"-<KN6MQ7'7%SGK:)G6]\FUJTY:T;>1C,VL97'6#$CU@6UUB$X:MHDFK +M+F-5LN.JCH[JNYIJG"2:HE3U.U(]2KI]9SU(Y&ZCAC=0SIM4>T_8XZ>N3;&N +MG;L$Z=#3TWFFSC(UR33%SCI96,;$]*NQNDYDM(X,LX]I!:.:.4C=&L,-3EHR +M(D3#Z'I,_I.>=\]I>=',3$PK`ZVP7(1T6^@U!T65$P@(<O.]/I0^M%0$T/W! +M['1R>[Y_2]*"YT"YEZ#G>D6.HTE`P;^?T>FT&?T;O3:'0Z?GM0.AG]!HPY$A +M6)PA68_G.<9%.S@@'5)I0CHPA6>A+IN:1`Q<\A,-:3K0*S.I-RZ/,"5P>7`] +M%K'5V9*H8FV,C+-)S."$0G>BU&D=LXJ(2-%BH-0$KJG2\*D0Y8%98Q0PH:FN +M2*%,$RL)-3=33"'4.*@W8.%9HQ*U!3*LD%9M5T;*1Y\-DNK`5M;D)C$J:!6Z +M])S?2L5GU(5RG2A&@5Q*:-V8.*Y7I.F0)+2$%(UW.-F:??<2).A=+20H'&5Z +MJ"X/SF1F@D<5Q12I2TD:=C6+5#JW8Z0_BR"K3JYF1BM7AD["I$Z0H`.(5U6D +M#PC@K7(B@FD^3BNIR3;]""MA]-1'K"26?)-3D79FD`KV$D02%>L$FLPKVFDV +M&I-1DYK(K<>5J*EU<$"MS20KV`D0RCM&6XS\H:P8_,,1E"8%JA.!K9.A!22P +M52G3&P6*X%$*_#I&&/"N#T`R6/6M<25Q7#$6D1LG9):"+"2.1%FCIB;5K.W9 +MZZD>?4G%<;"%A6FA!GLS+8KC^9.H24$\%BN29A8.%)^%;Z1E+'Z*%<O:9PI$ +M"O'5@GI-;@*YRHKD-Z47T,*Y]F%B+DKI""KEXUBND*\>396MRCU@@5TXP`X2 +M^2P*ZFD=C8A9*^CXI%=9"LXY8%=:26.B)+%7J"LH'\;BOC"R)J39@L5VGK(+ +MC>`_^4*[>IJ?TC-"]R%=V"38FE$-R^EV&N,`CA5.@X5^6&02*/&`5X5.++E8 +M#<:A7BL&FHI4C`PD@LA9Q]QZLL"O*+18R:9E7DXKS0133@:FG9\RJ*0DY/H( +M5Z.-EQ'++A2D*]4&[X,E@9(Y]#`'%H$8^[9>%>TC6Z4@RM2^`<3^EUFHM&G) +M*)XH2G5E<'%T'[OR'73I6@+06FZ:W31Z-M$TO03)0<2?T@%?9E,L46!!EZ7$ +M036FD8Y1)V"94X`%/&BRV?T&BRH3]TAC1T]7EB^JN,J/8DXMJ0L"/EGU=3D3 +MT<5@CHKX>!LP%PQEA#B`\,Z%^6I@0C'(8'W+%4\'J;LC`Z=0;-`Y:BI$>T[T +MCZJ:,4/$_9CUI8YR+`ZXE.!U$+S^B#`@F"[VP`/K*JBIS-86(^B>[RGHQ5D7 +M9#ZGU9Z3UZ(15C#$L/(QSGC(CF7?TO^.495&"UH<QBV]:Z?NF>35.&:O]N,4 +MOSJSI:==GEGW;I+C]I;CSJIX$2)4*WFYE9K1=X81CKX#Z4__VL!:][ADN.=Q +MJLX5>/<6^/5K4MABE/+Y'`;?\=(Y/^J5,1K#_)<O%;XYA9G2SZM4PVK_4RJS +M5*D5'3C'_6HE36O4Y7`;K\2D?XOI^9=_Z"_N.9P&Z_#+)C5<O^:)$\*K=L,: +M_\I))__TX#SO1)<<6WW5^V+6?_6*^7Z59LUW$PMG8\=XL])83$7'$R6'^O2J +M_MQC<C[FS69.J?X:;_<QC:=3`T^;%?NO*=-^/GM]Y.(G0_VBIX]%0-H,;;^X +MZ<W?-I\?;5.*:O_:JUM5?=KT2]K7VRM;:_7E.PJSKSC_*O']F'_]U:]Y6><D +MI_WB;_4W*LB`"T]TZ5X6ZKZ_=.D<?^K_H,+(Y_[M<ELG_>JS8U^!6FF)&_^% +M%K+M&J+C]9-OF$^,S,.7R+G@X%9>26?_(+:<I\ZLU/1S"N_(JZ>[S9Z=,W02 +M0_\PKI[ZNBSF/!5X9U6DY/_@R)ZO&MY9;A0*Z=+H8LZI11;?,.0JK7Y46NFR +MBL\JJ?<<+7^<:T.XJS=2K(__SRX&$8?_K8&G4]HK/1S"O``/QOBF#@,&Y0`` +MY0``@``!`E%/)F(;8F``WD9<S\0P:U<""PN"Q@`$Z*@6[8,"^&66Y8`5`3=H +M;VUE+V%N=&5K+W1E;7`O8G5I;&0O=6YR87(U+VQI8F%R8VAI=F4O8FEN+V)S +<9'1A<E]T97-T"@,3J@2K6]%U`C<==U91`P4$```` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part01.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part01.rar.uu new file mode 100644 index 000000000000..af4addf62d69 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part01.rar.uu @@ -0,0 +1,299 @@ +begin 644 test_read_format_rar5_multiarchive_solid.part01.rar +M4F%R(1H'`0!]L`KT#`$%"`4'`0&4YX"``+E4#*,H`@,+DP4$K@:D@P*>Q%Y^ +M@!T!"F-E8G5L82YT>'0*`Q/8<K!;AO4W+,\8CP(@A41$0R\V!XR18_#(QBL5 +MC\8S"$(](\\,8K%A"$.DC&12,)&/,2".;VYW=N]V;FF9FNN:_`2+'XB(B(BL +M1'YB(B(_$5.41>Y%145$1$141$145%1.^>;>U=^K-WCMV<@_CTG";^$.F?K1 +MFY=Y=U5>]ZKPS2O\[5755=5ZZNJ]=X7ZO?WL#"_PNS`N_\-K&I$ZZ977UCC$ +MJ9,:MW&+6GHV2_23&6)DIIAL83YEYX#[M"8Y>[NUE#9V+3S[#SDB\W0=#W'K +MET]BI$C2L5Y+BK/N31%LU-.5:XT"H&#=.8'5!HYSND".4WER>-,XMV2-@KC4 +M;<M[W<LR(`"M2P[M7G:C()T"I('51R'R0U08FGM.LWMW%#`$7M#F'F`6P+0` +M8#K*$UH2KDQP1B]TU)GF@@V^YZ+IG\<5`#B!\P`6+828&8YF*/CQ?I7@&LR5 +M@B6S1VW!0"`9@;3>S6F*GM3`](Z437!*Q2>8,LMH;3]2F3`@8%'3/8\;=F*C +M9I</00X#K\#8B!H2)D1YLP2CK8]$C12,&-/\Z2SC>+#\]QVR-3`&D@!+,7-$ +M.//S@J'9T4]GF*B?[EZ@>XV<MEC**TL@^NOXI_&I'PZS8HRY<!;EQ)X*5FC' +MXA!J^:9H4X0!6M%.A,R;D^$6Q@@T==:W`%J`0HV+MPU6*'K@5,,YI\HL1*!O +M2P_Q#T)S8'6]0N)DPY$IZ9/A%2`$3A#,"<@U,Q!S:LMGRNPS.=:!"/"4<*)] +M'/+P]&SGAUP#%AR;=4WVGR[S`#HU9PEH-30%03KL^`8`J0#3'&XF+J<82$0\ +M*]-/XOKC8"FP]N)AAH2C8.P'0<P+RI(P?@H#3!E>"H&Y$FJ;ZO86DIXR0:ZV +MHEC<AQT;[.C7OQ*8%"8"`PO+`@2P":2#`LUPRGS`'0$(=&5S="YB:6X*`Q.+ +M5ZQ;^!BM'DA41P&B`"``@&LM#A8%]_G]_S_'[?K^?Y?C^'W_=]GU_5]/T?/\ +MWR?'\/P>][MY[?M>S=^OZOJ>EZ'G^=YOF>7Y7D>-XGA^%X/?]]WO>=WW7<]Q +MVW:=GN>Q[#KJ'6=6^[-F74NXMI,CJNIW'4=/TW2[39[+H]CT/0:VSU>JU.HY +M[G>;YKF;*QTEAHM#H&.5Y3DN0X_C>,XKB>(7X;A.#RZV)DV)6QS0U>$-5^WC +MJ%(2ZWLI):36Y"G$*2:4JDPDU6"I2U84RI;?^M#B*NMEELMP5*V8S",SPJ,Y +MPZ,]F4:/-(T^;1K^+1M\XAOCD=EG4;OD4>GR:/ESR/WSZ,WH$:70HVVB1UM@ +MCQ](CXK%%_9(Y;2HM-,CM^<1[&G1_7/HY?4H:U2/%U:/MLT9_7(9UZ/)V"/T +MZ)&FV2.OV:/?VB,[MD6]HCUMNC-;A`!NQ<]L)P(#"Y(!!(`@I(,"QK(3?L`= +M`0ET97-T,2YB:6X*`Q-G7ZQ;&EJ>$$21CZ(`(`(`:V3GPCE^!]$U^_]''MAU +M>&'5?MXZPTA+K>RDEI-;D*<(I)I2J3"358*E+5A3+[P2)>)2O6"H):I4DM)K +M<A3@%)-*5282:K!4I:L*9?=^1+Q*5ZOU!+5*DEI-;D*;XI)I2J3"358*E+5A +M3*EJ_FA__`"')Z3P[YH[#O8?8<CG$.0[Q#D"_/^G2/\P.?_"/"<"`PN<``2` +M(*2#`LNO9O'`'0$)=&5S=#(N8FEN"@,3>E^L6RU4<Q="`1FB`"`"`'#'\O\_ +MZ?!2/5?Y6K^;*^7^8_S``<R<OR<"`PNN``2`(*2#`MDCL9_`'0$)=&5S=#,N +M8FEN"@,3?E^L6]`]``-&-RNB`"`"`'B1_+_.]B_S%^+:U6!<21+6(%Q)$M8@ +M7$D2UB!;Y:OYLKY?YC_,C_1SP2<"`PN<``2`(*2#`M0^Q!#`'0$)=&5S=#0N +M8FEN"@,3@5^L6Z$F'1)!`AFB`"`"`'AQ_+_..^"D>R_RM7\V5\O\Q_F`E[Z/ +MJR<"`PNS``2`(*2#`O)5T;G`'0$)=&5S=#4N8FEN"@,37&>L6QO411!#*3"B +M`"`"`'A1_+_.^J_SB]RS8D-+M219L+#I=J2+-@8-+M219KZ_I?PM7\V5\O\Q +M_F#Z$YWU)P(#"YP`!(`@I(,"_TBD-L`=`0ET97-T-BYB:6X*`Q-?9ZQ;.X_4 +M%T$"&:(`(`(`>#'\O\X[X*1[+_*U?S97R_S'^8"MJZ3<,@(3"\?9``2XQ07M +M@P(B1.PAP!T!$F5L9BU,:6YU>"U!4DUV-RUL<PH#$ZLIKUL=:8`,C&?D58!F +M950R(V8`4(?><$DR9(!D)!8PBF1!6,07#@5EE%<%%1:5N`Q45/4@G`BHK$!4 +MI2MR!#@0(V'`@)P)+:6I6BLK2VE:-L%@I1&LJ#;*I:YP&)$0&*BV+12[UO,[ +M[\WO<,"MX/?OO??OO[W[_/WX#+=N];UP><.M:\UYKS7!A^+9F=;WG>\SK>9U +MUUWK7F\[FY-[#/[^V2$_!_[``@`J_[(`*H`"`?]D`&4`"'_9`"%``0#_L@!* +M@&V_[0```+<,3^UT^'ZAPX<<;[<K4JR?.2\]1@F'%=HP.6"8$-^L\,G1K7E) +M>KLL4/^V5JUY0F>8CM63*G!*D-6TIX8DPW+NE1PIK&-SZR[N6G]:_H<G>\(E +MB3#<6DNQMS)U1FG6T?-#R2[E3;+RARK3PT\,23+DHPSB2UBMX59>YD\1(RV/ +M_O1?):ESV3[?M91C[\/7=]]E^=RO><[@6H]\V6]3UG7-)%JA>6Z:@;/4EW-3 +MF($/3>?X?,>_K_)]+"_AT?>Z;V7N-;G/U+U`>.J?:1SA;SS,%]!B=*M5+:/" +M80"]92>GL;AJ"E26>$[]7S8G_'NF6@K7SR9Y]67TR$W!ZNDT?*>3A'</JNGS +MF<M\_^3)0W.&>0X80%+C[K2?5B;#"Z9R*S\XSW-C_@%NK>75Q97X`Y@T,/'^ +MV_K`7QX3VO`.[KHK&EF6A`#XN2)O^NC9RQQ/,-W7O#?WR:GE%Z.7F<JIY9>] +M*RD4\PW#YI3S:LIE-]7@+X!N+P+?OH%-.O4+X-?HU^D7PB_4K]4W/=6QGU%. +M'DYUBG$K]:O4K]<W']>I[#Z"N<4I[%?LF'%K]HO5+XY<V'O(J<DOVZ_<K]VP +M][+TLLW[[Y3WZ_UU\PW%_88S[*GP5_M-6[[6,.:EP%:I>7WRN+C-/I:-U]GE +ML/][LO>K^O]D0]AW_:]5TW@<WH[[@(/S>Q#PGY^#[G3<Y[]9TM;ZM#A[MW]3 +M@]-N#.]3I)WR\_W$SY==W6FF7G@Z2CI,M8N8WD^C>>=ZSHOC]G^@,_N/+P5M +MC,M]/;<K3YOV?V]6!&;[_G_S^C=8G1>9^:=K^C\'3YGNLKG-MT%VMO*Z'S-% +MZM5J?>N_;=5U7+N+W\FO>PJGZFM_2`W2]/Z_`T_.<S\\+A3T?[/!GKMYOB"+ +M[/5?3NWJWW'93#W'P72PT'_&-D=KA/BZSP_F^UY-7=?+Y+?]_\_8^]J/KT_P +M:&CZWU\IX/48KH;M]S7?ANVHL/"U'E56>XM[_5=O+W^Z]ZZ[?Z4&]<SW_R_3 +ML;'8::&^M?._17>_=>6WN3TVH_AW,+[77?R[WZ5MA7TY&]W96O>XJCQW\[Y, +M:+THE5L=?"YBFM(O+_D^[_2[WG7?O\[]?-7CH/TQ])F?FW4&[=5[OLO,]]3. +M>WYT+O_&]ZDQUV]&+\?Y]7HWG%^#DO;^+VL)]_]-UZ6\?D_IWGTK"#]OE?FI +M>5T5'2>K-BGO+"7^7[=O/W_9YJZ9;U_*=_CZOI_J?K]CL+S9VG\J#T^N]-_^ +MK.@K=_WD>K^QC;Z^OG?"9XW+^EL'70]_\VGK.EV#_M<?-;;(UTYCNCV0@>5Z +M_-9VWT^9KZ?\N8]WO/'_I?_>]S:>].8CY*\T)'W+]]W2_O]+!=%Y/TKI_#UM +MMS7N_Q\.WP-F"Z-V%G0S_E7'-1.<P?]/0FO.WO(VG>U+P[NU>&Y_G\M=-<_= +M.KGAU\$%5QK_%E@7KA5=6,J\<%7XONL8J[F7J=6JJLTH:KWBF#JE5YLEM%65 +MEXW<O.NI#8=B^O"^XX$N*\I(#%SIE^'K55K#]W&+<JT^&$<S1#9>7G<_*;YX +MRJY1AWLO+\V1VSEP5W4Y^7(NBE,[+TM;*<5)OY2;4$N5>`PU,O._%)=3V\L3 +M?FDJTO+QR&LY<%W;#M)9#7Z2ZR7*MTX4R\[BJ7\N.C*=%+_?)$-AI<5D6&CE +MSJD4U<J\^2OMK+BNI-*'QQL9?=RKOLERTN5864V*K\+CJFY,'_2"=RXK\:F# +M+_?LDF@2Y51''67!?#*<'+R_43$I_X<IBM/!+4R^WER*]D%F9<-?W<G:3J13 +MXZ^QEDEA5-@Q>S)5@Y9!?FY"LN[,O0RX[MU,*7*MS);Y+TOLFHI?[WSB6+D( +MNN,O;JOY"+[J9<$<'UIKW#&75;]"%4N7>,9T[QPHAZPLO2TYE\E+_?ARG!W* +M*G$P>T4LCLG*=BQ?O$FHY<4\=,,O?*4OE77\A>:_2FAEJNS<IS,N"C2G%2]+ +MKR7;R5>+,Y_+)K7*7?'$4EIY<V_5R%5?K,)Y+R_DDJX$N7?K(:MED=].3ER* +MU!G;*7E[R?O<JO]A#9.7-NBDN2DWWRF(Q?S*:^7I&M^VDN=?6(^L7*OV2"HY +M<^^`_>'EYWAFE52XZD8=Y+(;M&&X8NW,OKY?[>,-;*OR.01VX(;ARX+ZBG;J +MN*9>E5?/DVLE660ULQ?VS2JY>=HR11%7^.2TLF_PH72R"\`Y!X8NP/O!,7B3 +M.S\O]_?(++2X8LP/I<=2&7Q\O.R!I6:K'YI^M-)OQ%-#+FWNL."EY?]9\JF+ +MAG":62S@TN(JZHF=;"5>V/WCY?"(W6ESK]YI0%7ZS#IE7AY3;2;Y*4Y.7G#X +M[?M<=C:LY,YP"V,ZJI^KC,?D,ID.V[?*Y8>I)TV3[SN\A4XWM<GD!)XSMNZ8 +M,8(_&Y3+"&/KJ^_QF);GA/G&Y7*Y#*M4__X*=Y'M^[[=8BP!QD,L?@Q3$R(G +MVU`RW>#_^0R^6$\9^\LA/K&X[)KW]8P&:&0[O+93Z_&^01QVTD^O5Y!F(-.A +M*@OG'M!QIWVV.QP*S5/X*^8W(`CSV^,[[N_`7$_..JV"KRD!D_A)^.@6R.1R +M??97)+`OSE!)_7,_XE1/9;(B?62[D27=]UC<MCC)@?@&?`5R0O==J#WO/`QR +M3_=WCNZJUN\J\L0\I]"G[)91L"1)G_[D$2V/QQ*63<)^:ONT#'[J_`[[MQ)` +MOWW@#[Q_;Y0C\]UD`#X9-D?HR_;93ME\@`^>\$IE>W[;NP/$?O*JF53[!,`H +M)]Y7N33H5'T"]I3V#^L:#_BW;Y7P&2^ULH#_.3)'E8'X`]!+Z`YA-/8#UC>Z +M"6[\F?07R*SX`_`/XA?W(CY,`(NA6`K?K($?..*7^B9`_P^.^R@]8W+D7H4^ +MY9LSDT_L#0NB#C)Y#NU@?C(8Y"N";Y$_81^P7\$%/3*/_C@/COTFG_Y%X)WG +MN^\QF3;(_!)]`//08)*>"EZ:0AG[R.7)WO+&1QA!UW!DC%2U4$7>-Q^/00B/ +MZA/`1=>!V^/RQK3']YWPD,B)7(=SWC84A,BB=0CK+"6"7MHPR@/]F,";XEH\ +M@7&3XP]C.^R(GX\!;N\F(O&@[R);(]XR5VS5]RT^64?CM4-\H0Y`G(L/_&Y3 +MMD+\BI]"<*=H3Z)^)7IHKR#^A3D)N^\[5FL^]WD!(9+ON[!O*3_APO8M'K*X +MX#,B@(@2'Z0>C;N.[!'K(^!E`5@7X-F\"K_]YD<?C?KH@[QR)/R67ENR\&.! +MJ?OM90;/B+ING*$_&3/C"E5Z9C,F443?1N/H6W@67WCA=T(NNY9EOH+)\RN2 +M%FZ9LD",4*R9X"+P0<BH_`M"7W<HO(3\58]91$6EHL)O+'K*RU;$OWW7>=_D +M.,B`9P*CTMVHN_LW7H"_=UC3],H.^-=^D+^I8OK5=QD\8G[-^1='+&\E6#/* +M2I4'+2M\,@]DOR"XWI-B]H`!/LW#Z1V42P>LC5]]ELK+"Y*B[[SMF3_<M"QF +M1[YFG&.R^-QF-RR7=;=%\OP%UW62R++HJ7O?[MN^$@0?@'R)V-E(.ZRK1/'' +M0\9C&_D57^3IOV?2V$Z;#XR_\[`6ZG#]5TO38S`<[@N-!O_0B%TP@8'G>?:= +M1^:_G7T/_ID^./[XW_!%R?@X_WY%PJT_IC_3/F5_"6GI8R=LF<R>4S]'1'_M +M,TZPB6D+HO0XOC=;;SM!S_I\6<]N)XNHYS;<1(<#:OOQ=<_B8;[W*[V@X$[P +MW?$XCNX><.=H?;Y+?W?A77X'OQS/RN?G^=S\LS\;WX+KPKOO^2]NBC<M_/E_ +M8YG]]-ZW._MP&XZ#T:CS^C_5TOF]1^;J_,ZSRL3Y'7_@[+[O:>-VNJR.G[C2 +M=WX>4T'?YW,9KP?!S68SO?Z#*>'W>D[C3Y'5=KXW:?=[+\'7^1B?*ZSS.K_- +MU'F]+^KH_/J/1Z#<8#]O.^M3?OYGV.7_GRT:B_ZP<MO+Y_686/_]1VY_X?[O +M-&/=S#`%@^_BO'=_U]V\<YZXGU>_Y<1W.W'R3('Q`M(5C/\%];U.QZWR?I[; +MFOX_5_)\SIWQ/<Y-Y<;VCGO>]Z>]JD^M^/#[+"?K`/'`H)WA]-YT6]4-M?-Y +M]+TL'9@WH%?P5X]^[`W_R?N1'X,_VM*#>.5CXCRP7UZ_.=3^AU\P%Y!_CV>8 +M<<4&^`[_>IT_Z;S(`],?U@V5/M\3Y4U\@/^WJ+V&P'_0=]$F(E@^*<!'P$_` +M#]@/V@6`H!^<[ZP).@W`*_6U#?MU\DT!_`1^Y_TP3^WW*`7('^!4`?H_*@-. +M?$`H'^Z/SP3S=?@`_*W@YF93.G&HR#M8&],'<:,('(NF8O/>`Y4__M_^69KO +MC!\+3I/GRS,M#^*<6__>_N2YY@UG9N1[OZ]@J7Q1KU2\J-@J8Y1L53LU%BJ# +M(?C9,3ME#R#?O<\=\M[KR'YUL[B7Z0/-=(NL3[<1Y;_JD:FR%CO1^W&H]QHH +MVIM]I(N8=>J\^O#7RZ]6ODEZI?%+PE\,O!7IUX"]*N_7H5WR[Q=967E3<<55 +M6ZKMEXB]JO:+[=>R7V:]BOL%[!?4KUZ^?7AKY=>K7R2]4OBEX2^&7@KTZ\!> +ME7?KT*[Y=XNLO<?.JK=5VR\1>U7M%]NO9+[->Q7V"]@OJ5Z]?/KPU\NO5KY) +M>J7Q2\)?#+P5Z=>`O2KOUZ%=\N\767N/F55NJ[9>(O:KVB^W7LE]FO8K[!>P +M7U*]>OGUX:^77JU\DO5+XI>$OAEX*].O`7I5)6I.K:Z1.OI2_7@*-=-+>[._ +MB<+<#R%_P74.FOORC!]&(^W^L)O]/:^K&6@:60M!L(H='^D;O`UTAQ"E&+P( +MH/KT)DRM81_^)J2\LH?762>"PO#[\R94.R`<U8EUC]K5>;D<UU0B[BZ+XO]> +MNE#\Q]57R/QTWIB92*8`\A4VAD"G_KP+/XD>MJ!#>0)14F+\Z_B8'/YZZ$G' +MWI]N%SJGZT!$D=%K5Y)"C[GO=#>/.QOIWC<XW0S`"@$X(31$5L!]R*.JE&Q$ +MG(VA\W:]F8O;GWHB+>9W#!8RG9=Q*'9GMG*>`P_+,D.JX48:LSW#5P!G9!9, +MG9X"V+GN9,G`495VMYJ$#J>U.^\;H1%PC,?D8[P&A:I52ARI$W]\@:H_H^6$ +MZB<+@NY43*=_71K12/NKCNV&WP8B_CO2_Y(&C"9ZU@`"\1)U@0&>$.V5_T,H +M)$]0%526JKI$R^`V9E-+`%-WL$H*%%]$?\HKCHI)2O]:#2DS8H0Q-MO))>JU +M%]DD:AABF6LHC-(#S!,$!F;Z)>Q-"^V0B[S--$FE<J,DI=`'B,/(4D]_7:CR +MA(;^^>.'I$IKU?TU?^ZP76?R\KEK*"=G:?=OIT9$XG>'1[U:^B#@GV66U.2U +M^+9E[%\HI7E!2SMCBYW#[3%3I_C/O+3N+68_X[&G)/K!@GSV/_K`\.&M)^Q_ +M@N_#WQ6?LPT:4:V']_.W_S^LQ_7C4Y<K2O^/YVC#____;38,$,^05\$N_7B! +M0[7L.I7*Z-H%[%?VY"MK7Y^+OW%>(=#7UTCUU0Q^WE/K,-+RC6!XQ=B%H6K@ +M3L.]'G+75@N+[M8MN_T,7;F>67N05E`VLCT#%B'JT6\YE.RJ-"9>)'HQ@L_= +ME<LHW9$:+`#QP%D_G;'K&H4;)N'L"!_&@64A94<KY\D_=R"\AN>X!!O'2&PT +M<,1^O2@V)2+L)+N_2),3A9>;"W0KNQ[EEX3:GW72U$/L+N(]I6Q:Y`?;;$^8 +M2;1-DCI?/M_:Q#F)6J9@S3AVK&'%="1JVED8J[L'V5+IN3S"G;\FRCVU",[^ +M3EF1V5;%:8(:K;(2E>Z,/#S.N9`X9OWDC%[*H93)H.F#03&.ED]*9\0]!>.T +M;*T_S`H;WF$'M)(MN9%;&8(\0_3!\]N)*Y/WP[P?8,G%OSYGH)KZN$TP[8R] +M"M7>YO4CPQ1YG2+>Z<,J087;LT)@6)='[^\<8S[32.S/MRV,A=`IJQ0P9(VQ +M-)V$=L).A%Z^88'H#K:^I,?**&!FHUZYH4("HXS<2^8*OD&P5^4U;='++U:D +MU0E+@<^KE;\PJ9J)<8%1*G*L-3R7&MI7J>JXIL5)"QY>#+OB`UYIMOIF@P!: +M0"C.G2+3I$38FQ;4RZ!C314L#/>*C$,PPVF":)@7PQO>.VC6$V2T"]3>%2LB +M;MA->?'\RAX0/M!*7PS=G3:MFELQ=H#H9ACS@_,S8=Y)*=_*6[N9G+23VS]U +M+8VK7R:G@:9H<A.8C]623PHF*4I2_A\S-F$(V[4NVK4?N,/4MTP.V(CC59>V +M^!%@"&%?H\F39"TI"/';*$S-FANT436*397$&@;*?4<LW_&_GZ2'023GE`;B +M^*&=JR-NN>9:4\U@HN6Z,3VQ,G[#_-Q;5QJI!4SAWN@D>2V?0!>-Y'S,W*DS +MQS#M]*AXS:D7EBNA?9`K=^&(Y68V;C@Z'S18J?9M9)C&FZ#Y^`'4T["$B(>M +M0.BFV8,]W[J4BTSH&QS:B,ZTD#:MFV,N9/[39>*O,RW#V*GZZL-G>_8Q+_,. +MQG^,M0J&[ML(GWW*#66DTG1L[RW'1>-5OE%)2/LA)G5EI(OPN%GKMSJQ?B$5 +M#M+^EPMH$/;@@-"OPPO;4GW,&7^J%UK.D$T3]8F.'9\ZJ!@`H1_TL9U89J(Z +M?>MOC8(.V^/10U:72UYIG#[Y4L6^3B\6B0.0)4$B27M?NBEM!;%)[38#V4J! +MU*07:IF&3F?$?N+QL",V)$N%T&_E<*&U8Z4EVQOX0ZJTLC1-@'(,[HM$+DY= +M*!G'_CWS*AJ3]5PHHWZ^+4NUQ/[B9_&&7W-(;9#[Q9A\"DW2M=B9N[8SKU/F +M42BOIO09,G@L3HN7:DYB4V;=(V2\F_[I6OJ$"B[.7`W1BTR2_.DEQYB^(,OV +M?%TC?4UI.BPYW5Y&)0K23O[R;2]@*BZCSW6(SEEC!0]AQ59V,"K\HN^91M"3 +MRB?G(S4Q?Z<7B[@4F4%?"&<&CEA\;CTG2V_&P//MP,R[;J-EBQ#Q?*K[`^[X +M8O%;M1EV&?J1/OM>(`<;24N_347<;P\?>'/EA:*.'^Q>Q,.S8;8@VQ7Q6Y,6 +MPVVP459C]H?>22<?-9^%1HF'B&FH##RZ\(^ZU>`PV["=?9^-&_5EZAER-M3Y +M0?M8,$2"R,W;RG=L*Q/[R]F/6S]"2:R4PS+\,C80SEN(?NOW2;#4;!:AR0MG +M)H#9F\`C;<^4)"89AWFODI]VQ%1`J^-Z<[/;2@;)MAR!P1%M2D\*SO7F99RF +MI/W#DM4?>7")JV'6>HSGHUIGM%)81BWB\[^!0[).M"'69`VAATI"[?LR0OKU +MQRE'JH%17P`YD;(5S-"]&E&)3^"51M-(S1F.V_;]A8ALF_&+(/(.KD54"]&> +MJ8XG5T@9X7M7"'V_ARBQI/$#A'4I9L\K[!P\@9R26'BS!NH_LB%L-89/LH_Y +M30P*"F$V=$VUD.X0IKX&01FTBO21"/SLCA-9W9P,!K%J[4`@?L&B"X1X4K'Z +MT`?-A#.AM5[#ZUA%0G>>+\[R_@D^/7"/^/U1YNH?A1069N,^,[>!3ZXK/4BE +M:5!`KDM\Q!#)##90ZW?[>+:T@F6(4FN##YR_,KIZ$D8>\5%PQNA6`-NZ8%EI +M4#QS`QT2[$E^P+EJG`$>^VHM*(4;4B0,K!#>Z$@VUBY,R:1=O*6U!!"T5CHQ +M'_CJ/XL_?TB;;3:L'\X&\5JEZ6]7B=,R!=U#AIR\"FOD4+\>##"**QP+A_Z& +M"$7#Y_'.UJ;9A%G!.1[`PJT>9I@&"$=)O\P8R+\2U@ZXM73ST,I;1,=&$5T\ +MH%!42@!B#/Y$V86\1SVI\]1Q*@5=S@\=D,)/$Q?N`#4;OETCTG:0^9MF&DOQ +M$;6`3%NB7@HQROJ!5"!7+9,C.:$?!A$5.7&$]0&T/.AS\#MWQKB%"C8T*P+2 +M,_!S@<H=;'^L?N??^O(YTDW3F&41U86+PY3L]4NMV*)0R>_=U_BL_?2LSWBE +MB-%+)[WYEFLOC%BVLY,0XO%9P[5]0SD@\PLN4#-S)EMHT6%0G'&`N6GBE9A2 +M78E9_5ECTX]DQZEF\9,JU7W2A[K[V`SO`9J1F33&A'6Z=EFWI$;$[!%Z>X%G +M''CZ_-M`,>)-[,U>>C(1MB2:97STU)WP^*H%+^$CG"&TPNMMS+I/4`8S'&A' +M5+^%&VH">:*MCN0YS;0AJ/]3!F=JOCSY?%Q;:/U(%J)O"+V2'%&4;_-R,(<@ +M!(FW;/E_-Q7KAIDY9IU+VY,H,Q>D=586\7I&4PIZ!&991[*/\9)6)8:\2?LL +M2>U:G<1</1"C0UY0W8Q_E(<@*U4N.<9;'<MRRCWQEU^$L_<^*/++,LKCA%KS +M]Z_F!YO0?W[O$P5ZD(2V+@%19V2328DT87HMBPPR3?A7HR96-,SBA-.5RA79 +MIMS?]+)TX,-MIVZ&<\Y+CUHK5;-@#8=--6$;RNR8[4T\RR@D)T!8$9EX#:*U +MJY11-L'O?)^NB-VM30]CW1767^RM-O"75V`9QVF3+SJK=J;G*P9,U+I!;0U9 +MS2LM5'FY8D54?O<YT(4/99JPU.^*(*WVT"T?27V@M26R7+$,YZ^)N-!V+/`P +M[`%(N:\U`K;QQY9`TC;<(=#5""T+"XP#!!OX.9J!J=]O32-QQ6UY9DT6R2&: +M(6@(B;L@J$>."T3M'P`E56T#R!"-<BN`I_"*]RW@7IMB"+F>A0N$]?9IFLDK +MM5JWJ3)ZEN/\\TV8&:=0F+L7NZ9&TSE0VQ9ZP3[6T8EZ=2\@,U^PHNSKT#+: +M7_$MKFW*N70FPU"K<VTH]04*+>1=YMO`Y^F/D[XG'W5,-T9.?W(6]_`60W:% +MM$OB(^C+.XB,G3A2#Q$K'+,.M)VS)%<^0,J>D3`%8K)$.\#W,29YYBW=?J[E +M9;M5E5C%E=FR1QAIT0I?@Q&SM]"PDD]]12'(#UMA5`;O2*-1F\/>W4MVJ-M= +MGGU&[O]JK70G[;;D\4ST#JFA53RAJ1H>.?(8'1>SF3D&'NF06&#FS"E*!^,[ +MED/)T85@RG,1^";`G#%P^\_!"3S?/_F$93%4;9[43=U#T,5SDV;6N+(:1)), +M3SU</;CU(MO5#RXAKB>&2Z_?\P8]5S\13+V*;L]8*SQA5UW@>N9?IHV5@>][ +M=T,F$NS>%>WKQ'5_AU^SO&E\0N-7I4P_9KRU&)B)"#IHCB%]\>&@<4V&"\'G +M97H.&/$%\V5-LJ+=W_UV107FHO,J&H?1J34B#CC!4"NQOR65*R:5LW?%0M\? +M"UD^P:,8E;NB_SM*5O%1P;%+1O$;FNV\483+/&K839F88Q)?:=6)IN$W8\<U +MU;45LCL%-KJA)EA,4UAIQEA<6%--R_\0Q9XJM,L*^%(VP2G$J#%\YXMRQ4+/ +M`'SG)/9LS@KJU&O;"@6\60VQ>J?3$7-AEZ2:QIB[12.R)QN3-?+ZTS#G4S)^ +M[2H#C"F'CI_VL2[$D&3+5::\EHK1HT2^%1!:[R'DZHNSZ(S1M"1H-E71GPKV +MT)"*;2VP\T5M.A#%J-])IJ#,"XXI3_*W3>"1F\PM\,YXU@4,!GM#ARJ*4#,^ +MCY,_>F#'VBP8B]%AV5<[,TH%56CA=ZWYRZF_+N%LI&P)2=(CRVE"#+X]-OBM +MS3&+^$(&RPA2ZI2^,^+#L>NX@U,;^J9W4DX2:=B1YOKL&1@)W.KT5BW1YM!1 +M#O(IFA:]G[?W0591CR^7X^R4G4I\NZ^%&=M)]X1&C[T2O78D^P_*_XU3686- +MDN5_Y;.W._(RY1XA"H386^J*UZ"PO&UC);$@M.+B^7RU;&V=T:A\-QID<6V? +M1#[L^59P#%?#FDTN^Z4TVU-R&E`;`$CV=:P=L@=IC\=1Y\Q]XE:X(&X-&X)[ +M<=$K9KI;EA#U350UQQA%Q#?W0&&`8R\#=2.Z/WG5SYOZ#HY0_:SV@G:5''GX +MA@NPMUO2.2<<%`70BL:6JA;]?3?DLK&3QYHV&$%8M-.A0T>_%7ZPA#[AV#@' +M?1A%#T$9YQTF2<'-#W6<MR#)5>RFT1IUC-L8QPR[*W$BR\H735>@D;L!P]K: +MJ1$(-VC9US\IX'C7I-33Q_+ZJ,7VNI#KZA@UR,9:GI=7(U.:'VY>`JNHU+U] +M,?DY+-3V>B#Z$.LNX]NU+A]X43[AL`1W77]@L"%O"C0:GEP*OI8^)T5'A7ZD +MG5NP(@$/N!)"+J8N]'O0&J0,$]X/]1%Y>]7KZ!W>XS0;OE.IZ1+`,T`(S<@, +MH;_8>6HB!Y=NX!.Q\W9.=W/ZY7JS(K(FBBHA90O/MFZ4;,S-G>SX:)L(Z:3O +M9*<A\[+M\_;^\*RO1F&&.=_GS30ADE.:L"+2(C/,?^A$Y>E."[T)'9"P&2(= +MD@\NLGH*VO=4J9$2[@.K]27`N=9,%5^M>M/F%7Q>N3@QU3NM=<M<NP)HILBJ +M6?UW^9"@1JT5>KW)N"S?Q]5U[,6@\'=N_@&HG^ZWO1*(XAUP+C,"GH_\4DT9 +M1]9+FF:&1<U&Q$#U)`CRVS)+3Z&E[Q5)8'"1;?@#71NX;+!K-]%*PT$9Z'YP +M99*NU$%7WO]$Y].1CP[LIQCQ,D!/$UP8654W=@;RP'0YKL!Z<P]+\-92C!.1 +M)X*(![0?<AQ)TGCN)H)!N1`#7!QPH&'E0W:/;+80;QGOOD4[N_((H93D*"J5 +M[]!D8*#:A=+V?ND4S#R4EJ#[GET>/BASZLC0EP.3()H)+@ET))V!GDCT;=>" +M'&Y5K(H0H7G^PG_M&:E)*.9,.@:T!U?@-6*8ER42R:5(C[$Q\-`5`IRC.S#0 +M1-$O5^4T,BY"BU$^@;)26YS=ON:Y$"X)4<7;1]JKEGK=F&S%K:!5,/QG2O6" +MBT@)X/O<P&;I6YC[%>RDXDGS)$ZPQ?N278P5&Q67F@DWH#.-KWW()\UI%5\( +M;']^5EJSY!FE"WC>+,OQ']8*]%B-_EEF;?JNK:+B?IZ@XG&N^U(OA7M.YIUI +MWAZX2_(;"^]5EW3P`\<WJ^\_:X1W>6,]9F'LS369\V"]#*;Y*8"19G89AN#0 +M>#C'P#NP/1!;1]K=[=#9I_?@^8'CZR)=9#V=GX$"Z)$-F>L->0OC"GO!GW0& +M/H"9.H'VXCE_I1;W$Q^6XO/.,C\8+V#U!(G";F%^0#]4@540'?^MCO(?G:E* +M*S4-Y@10BGW;#CY?U9Y$B4U*II59TU_&+G29N)Z#ZQ2:\0>04D/`2])OD:,- +M"*I!_&[9%GRBAL7S+R01=F#8SKX4.DJ"1%U]SD4N25@#QR3(*CV!56]Q3%.& +M;J"RZRBYKJ$U!F2"`L9,7S6D$1]H'=@!=<,*U2$'RPGW$E$N)@1$6U--:O]S +M*<0O"5E@Z&4]ORFEG[+E$--3"3C7*#T(R<,,`P[_FXB2[L*2#_<]<([=.E0/ +M<RS]R1"(N#("GY2JUN+?"UDLZ`HI,-C=R++L?\0TH)H(*$PP=&'JM?(F*M>R +MB1_M0[`B,7'G0O+J6#?WST6#7[9?9!]S;GVM7[L";#JHW0!S8],RH7Q>W4?[ +M7FRVRNRKVZNA)-C[*MVZNA:P)U7]6&-NQCBX^M4XJ_1WKB%G(Q1.R.K%9"7Z +M((K^4H>ZN2XLP_QK]H?=<HHG$&MC.K*PC_A;FP;##QNC"-SC#TB^Z7&`D=:J +M&J>@U@O"*C0LW(MYIFR"4,NU47CJ>(23=_^9\=_L5_!CNH/V?_`)J/_*(I6, +M@'W3R\]!,/>?Z0[>\C]\!6<->QEQUZLIT8F"S86-;LSRBG/=[H(D"KZF-Q:N +M:C))T!LH+"W<6;3`LA,V6+--83_<F/FLIX7'S9MN+Z%5NU9V"KXHP^J"$_F% +M&!K3?I%FTWR&/G"Y#,D1]BX9V9Y)>(P:`#V'C'%=.A2;XN*S[CG+Z]82UE=& +M'WEYM?@K@I8.$I!0*9R8?@5?O>WOV'[2\A<W,6DX_/N(A2P_S7>+[Q>\K^PB +M`Q,?S&!ZX8;ZA9#XUZ/3)(<"PW5#6PL?#!<[?!K:##&(;-&'#3`DK>N$FPE# +MY2X&DXY)DE!-UQUX""]1;#'1)%&MD)FY;BV<%&`$UF'VP79!S<B=?C[N&PM. +MII\0,68/B!D,/->).(<B;H!D5.;B:4T-(,6H`):$-O.Y[-Q';_-@Q#Q;/O\T +MF<JX&&-'`KT<VTXQ'/QDS9D,+1("MW8@*.(7U7:1[\8<Z-CF638B'`P!PAN- +MK#B%HE`LZJRS0,%M^6XR`+FB[($5Y/YD")C8;72S&6(FZQ-%$V.UW4CPQ1B' +M679I^/L>`JQ9DW(PO`_"F['`AZ:3T`/$1NS"F3.4@:1[05JP/5G#*5*"K8`^ +MWPU!PFCS](K"C0[/I**I>,[R,<T!28ZIG7#^O%IY#+)7LGAGZ&.K[1R/$^$O +M(J]3HT?*Z,_=.U7S@5NP,TSF1+BP;*L<]@ER4<,V3-`/@XJN1M6JWXAU9BSH +M!IL:\H1$^$4Z4%Y^ZT?<!2&^SBRY>,#:?BS2/VU[&8M=XKAK&E%Y-B+"\!-E +MHC,7<?6),,YF+[T'9P,X8U6L;_J+EBDXZ%VZ:G'/%.P]0FF1-8W#1IG&B+&= +M(E7LR.>,ZD(].$T=OO$D3<G`7C#,GS2$8W_574#/)4Q:5&0P`S,+2[Y)ER8_ +M$C";LHZUB(OW1=<@+:':(6B/C(YL2W#)Y/C.&=.A][Y922"?%['IO.G&BQ-` +M[H0+OW;DD6L6B=.-/`UR3?P9'F;$NV_?K%2-D4#BQLPSVG@:YFV19X(&=%L1 +M?'>NIZ&#`)<`;$$DS=W+UFX1QYGI%Q]OSK8>Q-%N-^;'#7'\RG#80)HR]+9U +M0#K,-T/PQ]0A)&PQ?TG3><6-;&3[.5J<;BPAHM&,<)1J..T`TVJ^3$I3-;U# +M[!H.X.<!3!QH\6[&*+UM5LL07Y[KF4D5MD`OU+XWV#XF&7PP!A:*H;SV%:$X +M2\5JH;IMN/=BY8`M)(C-G%&TK$'[1R'D(6S560B<SC;%@"C)@E:ALA%TK_]P +M)^Q![$S-AO7-.A][68`,Q/0BNK+M8EU#RL`<XN+CPAPBPQ+$K-L@)W"Z>,\/ +MVL^U"90QM"=]>!A$P8O8`'Y9!=9B\+&H&3=_@T2214YR@@I!CIQ>EDO"^EOA +M"N-"C"RT5R3J\FX8SWLX`!T,52<!!]Z<"8-5$F%N/?OK/ZUF-8H*66$O061' +MH2@O2I(#%Q5[64/EPJ"F+R`6YIL$+*;/"*#4#PTVSK`R]6*$-"J!#%V'@8-I +MM_+U&0I*96&6TX0/FLACRT^K&9P:!8@7:,[-\6_AM(SM\DP/=">6:9S)07&( +MCZZ13P#6.MD?$U69X0HX++^Q$YS[`#K[*3A.@SYX)T5S3?4&';1R(*SD?;T0 +M\'`'NE`^XQTNG-$&!$R81(]+93DC]G0J7L*.A+DU%,)<3DI4K["1J=\HMPXS +M>=C4*>OC\N%)DE\&^GFMHN>_Q/`B%+N)3(9J=:[G6:BXW`,O[DCX+^[M; +M1YZYJ!]G.()Z?&XE!>@#V7YY`N9\\"D#4K^\B^6L9%@`K+P<1#<]IR0/[11; +MBW:Y&^`J$)3D&=U>;B30LEGD,>X48+-:Z0<FCHFSH7W0`KL`[^,C&!.XH8.8 +M0^^Q,U^R^\J+W)>N(+F'_31J(E6);"EC:!9.I)99U$I@@DCIRS3_MXDRID,\ +M&<5!=4AP8>'/N^0!->+:7?=_,LZVC@2[I8EF"4>:X@=5&>OJV(X?_"'35F,= +M*DJBHGM?X4249P9SM.F8H6<,C44.9:@HM3A$%1[QQ82[0(<::@>@#BT^K +M$0I>/ZX2[]@.:5-3@"(S=>&NB_`Y%%=&IY::9J"98(J!@38056ZF4#"9"C-$ +M!YC^OBN.;<QLH_XOMFL@RI=W!I'3_'1S=($60N,>&GP-/48<:$CRJ^Q+0D`G +M82Z-8;A)Q?-D^WUFC,VV2+?J7\G<T*LLD*J92+(.X6:%]<3%NDGC<*$``QHT +M=V+"^K16UBN3[II@JXDM$``E^Q..050D/KU*'E2??X"FFKX6_M"(H);/)94F +MEF`\*<CWQL\O^E@`N!URP&."K[EQHE3\5\5!!P512S`CI6"3KHTGBJ%:U3\9 +MBAH\/H5<?<Q[@\TEL\"@IV$P"'7#/RGO$EA;S0Q.#G?W71."BV`_U?:R1<@M +MK\W%1A;V_]ABW_WB]BE.*5XO,>^KV"Y@8]-EC)B3!"W_47H4#11H3^&KP_Z6 +MZO8_YK1/6-5BQ/_:"C=`7(3TR52PM_NA9=-+*%O\Y;HT0UZ8]K_2&:+F@[5L +M?25FG"M=JAQ&<S8"!EBBW@OI9W_2HUK>6FT4FS#3S-QB%L>9V9SWGFYYQ^SK +M1@AF8T[`_)$DPL99\/3UGM002C%Q^49"-CU$H>O<0=+:B@MTNJ6GCC^=4THG +MU294G5(<,(V]V9N18TPP">NN4Q`?L]Z'Y7F([]Z(TR4DF2BPBI[FH&)DN5C. +MEVV"Q8=]:\%F&%&(Y[!@:[D=E0X@LLN$VIKX9?9TB@Z(@]YLS=,+G`2<X8X[ +MBQQ\2KM_K7[W/Q>U]6-AJP4V&_&0HP]V^CM9(FI6[&/K\!72$VC;4GWUL?"& +M'::-05]#8VOJ1EZU,,S-(N<D5LXTC`,V"PP3<`SUL_5]!3%NQ8,*Z,SH=M5( +MX=)J3N)K,CR4PVB#HS$I9E;V)%"PU;\>(A3H'"3N^OY?6LEXM[&^H;S40-:Y +M&&V7&FV+2""0W.W^9@>PR'#%9UZXJ8;(4;(3=0<T,6I):DHM7>XBT(QC'9"0 +M5`V05R`VZFUF;)F7P=_;CZ]1^AK!Y&CF&XNZ<M0ZS4[5:.1<7\><2D7#]$%% +MC87^9DE()\]G%H`K<`>P5Q]XPQXM461IK+E]<E;+.6#\08[9M]FXCB>#F,,Z +MM@9.XP@<<N<U(TP9V=!HWB3PK]"K(SL,/G;[&A$U,71S$T.M_[H)JYR;==%U +M*BB\<_<TXJX_B&3;SU`G:<BDSYM4M=Q#S4#-1*VR+&N:C.K_61'-(3">'MXL +M''T#-BRZ4"<,M8RXW[4Z2Q#CB809$`9H]`N]N!88;2H9Z(ZV`DCBK9S&O++2 +ML(IG8=+)NAWH!S5FT;I0@=U>QD"Y[53@Y4!S!$4`8&MNBZ.OCX4A=9WJ6JCZ +M:>+E4#SUQI=]S?)(<`;.O]0.8$*9_73!UCA2&9G$CQWRZXAUQV;@+P]O"QP1 +MSPQ=Z&88X$':A`EB(BC#>M(UW`38+@1#9L=B"ZT,[@X#!L```,```(```0)1 +M3SO.F(P[`/Y9-ZVKI-PR`A,+Q]D`!+C%!>V#`B)$["'`'0$296QF+4QI;G5X +E+4%2378W+6QS"@,3JRFO6QUI@`R+1U$F`P4$`0`````````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part02.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part02.rar.uu new file mode 100644 index 000000000000..1d77567e3e2b --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part02.rar.uu @@ -0,0 +1,299 @@ +begin 644 test_read_format_rar5_multiarchive_solid.part02.rar +M4F%R(1H'`0#DXV:^#0$%"`<!!P$!E.>`@`":(E[$,@(;"\OF``2XQ07M@P)P +M7N0FP!T!$F5L9BU,:6YU>"U!4DUV-RUL<PH#$ZLIKUL=:8`,#VO%\!XZ<.-) +MOIDL]&+"CXU0-+P'O55$FRA5IB2:/-;X:-`;+7A,OQ,KV%C8$">G"KNSBH>3 +MI(PX'#!UPNKA8QM*13CXV$;FBU+2B9_FLSA(2[)!MK9(-2YR,U[:!I<X)[RQ +M!H8R;`0&O,!HPRB#%S2;I-'@9K:+0O]#$.;HN<BZ'3H0(!NM;X"0`016L)%B +M4%HS<XYYC:,A4%B:#0C&&<#7ZL:M$7;IM#V9S9B%MV%MSN+G3R!_/?].!:K@ +MRS%4)5'']RGT&$56=$@.$N=%ELB+O)[->''!/NG:=FBK)X6@-/?7C8_"&LO: +MW=G=UAI*H`.GZ!P!#=9'!\@4;_0K>@#2AH!L6&=R,^6K4R\##`[(6LY-10F+ +M3V\;DUE)T9V#)!<O*S.SH.$8Z8J#)1IF>,#I9"4SSWF!/L3?0D=Z07#EL_Y` +M8>'B?HO'"2]18EN9>M"DVF,S3#/J["!#Y`F6H.S[5HL)=&M>'ZYVLX#;*>0W +M%RKA(QFO9\7K65_SJ//L>SQS;HEO&Z'&0:B$\FX&DKUY@&=.D+5>Z9G>L(`T +MRD.F=_6FR9IZ4AB.!\@];]2$*2M"PH5R*\=!98;_S1?=`)W5EW3V0W%8[["& +M-I<V+/4OH'K0=.AYT+?8B+FY143M\US>UY278@]YR1<8$1_#I-,FKZLTZ;)O +MO@"V=_TS&X"A"$?=;(^B#5:G8WM70-\N0IOBDY?+?/`Y0P65G[9(]KFRW[(= +ML.&M>L,W%%0V&GD9E_^\*DO<9"-SAD[L]>ACF%'K9*X/OQ5Q_,'@I]L(?>.L +M@8;HR<VP]JO,F/>KXQ=RPSB]TDD_V:^_-D7?2Z:0\:4@BLD]F[98/&@JEO`9 +M"G<N0=C9BY,4+,M8,1@P*R<1LQ$*MT%%JL.;-8,)'%)FHG$"&F#O/0:S33FV +MO[4ICKTSJK5^>B3B'UD*$Z%7@79,[$H*AJ`2:>YU-AL?'U5IV:;X2(&P_4I, +M;[@&=?`UD:QF%$54-9I>L/%:M`UMBQJKO_H8LYT9;>KC#GQO82_1.;$$?X4= +ME4YTY;MT:Q"5CM<'2YHE-$\=:;&C5YQN=B.X&G3D5FF.KF>("BJW'&3">\>W +M]APM'Z4CQNF+-)3XIKOF2&2?R/MS.44>=14,L7GC?V,W^M^S%A,P$T4W7B3J +ML[=_9"0\GBR4T:)>>5?)-_=HPG0<WAV`KU0,>"SD/8H.RH9BS#GQM*G,Z),F +M#K:RA[=Y>72+/W/E_^O''[[=6L]&*8^?_(0'5-AI;??75AV*]&$@-MSW*C5< +ME)OMB*3[^\CMF6CS#G_&--^Z5D3M&5.0\6SH,%9-H?'+E-@$7>.BP"MC82.Y +M<"GW0K,U.H&_;Y2-@NSWSM!D!6S81%9!6&T"WMI"'G4!M74^?)$P833721R+ +M3.A4M`XKFM?X++/F=L!7CB=DW(AN>R!($9B%?%VV!/==;&^!=58\T-=T9)U( +M6OWB)FR!*M1`971C>R;?X\-!B[E/,/1M803X)'Q[UGHT[!&<=29N)FL`&`'U +M9$L"OE]X4;>'W'Y!K`;+`9T\+3`5?!:QZO^0--CJ0$S,&TD%Y>*D#NS7LH.E +MUB^B6D;@F&*AC[R5D/`59Q@)&I1#D<_2RC+884:6H96#^4ST,[RR2<Z,?SV! +MMT%[/+J\D^]A?TW';RS#](9-L4_`'##(6.?*GL$]YNV8-!;;>_M`NH\&N<O* +MO/.9JJL'$V.2D8]W2LY':%3F8";T-P_SZZ8_"9>V"D)QG=;J`-!%]&'O6AL- +M51&>"Q["S_.Q'X3SB!Z.]$?U\7B%_N6#SZ!;L@94+OQJ9U$A!%]\UG$MHIH" +MP0\46?'/@FZZV.WW/X@O2!)O^Z!'Z3-<G#7%9X3U5^=HJ!'H#P2:BJ3%V4"U +M;RG46U;AG&"`TDV]4S3)FU:/[4G;,FLS5=M$<D&DS9XVMD?)+TOG7*)X#20* +M-NJF3Q8$+0BJ)RH=1G+V4/V>!$;28?<`1:NMM%MW_J1;6^[>+<'WF1E$.C.. +M_.%K,-4::0YEDP`+*;#WK1HCBYC2R9?*IPKA_TL8;N@1?P2'",[,IR3/DED^ +M+8T[--;0MZ,BY+D(.C:SY8-2\Z#72.KX(**6)X<:$]E#I]XV^J=PC(:*[@:J +M1T`'UN`E?-G8F.).[2/@!]^;:R#JBPXCA@B_M$8.3'PX5;CU3/.K+)KXN/N4 +MCR<>FP;_G"0"V,ANUWUB5JH6M@J^DR>_.F3E^8`@W*-RSH9703:V1?!JPW9; +MK(U5S\L6&ZXO2AHM1P-_;OL&3R<@@32G`<P]`SU)9KJ'C=-:V&ID3NV-EW91 +M^4)DVA>`[UTQ,BN6[3N(.?<+2K6']]IC:(V6FFM&=L]JPU?;1)VRST3;AE\U +MOAAM_PDZV1MPLFK&4FM#.I<C'&=TDEL[_QFT<RL"-0AEB>&6\5'8N_/@K'Q5 +M:GG#.>YQ[#.2""1`V($()-"5]/S'A6`F@@TX_D0:F0K>?D<X7'J-]23,M9[> +M31P$"-O+VS=]:8W2'BV6LSMHK@/R0IVBLW07CX(5C5YY-#]$,VT#2B=2E7(A +M"B9I7K/1/:)%GS,X#6D6IAA5>")=BN4^_/4Y;`M%+MK(!HB+:AI*B>SHSC:( +M:`[-Q)49JBPCL<-I-8H#!())G*.*1_$6-"%?DY!V!K@J*4>_/RAN_JQH(>7P +MTU/3-`V5DS`<?I;L\IVTI;46^+YV#98"6#L&K)=1MN9E>OEVDVMZ1@0`9.*- +MS&"5W#=U;Z"-YJ3'$]GTT2;0/,/FH6<7>L/(X"@BA7_H[YDVJ@X?/_0D8MAI +M196^V3!A:(%W+NY(_%ST[.PXL$7Q$R(*^R8HV2<QP&<A4;?J+X%.\7H]R9/& +MQ+L-%I^8^ZV6:&<,*8W:@A5+)$MBRX<!G8\L7;_K(U]-,;$TH15)S(VZDHOJ +M&U-FHO%@>?'[U;WAH49N+A32'#/&RI5VH[)JF&_6*NJ-"(:@1<-.S)V%_9KX +MW=G9;`0K,(V,Z%W!TVUJ[VT4NJ+=SZD7=+*+A8>W,Z79++JFW696^M#+L:&O +M#U)IIT-*>&;;-6Y^JI@&+*XW;<V'/@80ZOU"IS11BKT$.LWQ6(5A%<MD@V!+ +M3$!G2S!97H.1Q!6Z<HB+1DT0)]R`H$-E>ZK-4!*6:4N54OCRA1IGNL`"PK-\ +M4*5U(A'Z=:Y:!\!F5DWI1L&910DQR/;5GG)>J!GD&M"R@"7/R!M`1O2R4R!, +M;@&,276T4CW^0TA#JN[P^4;3-M?P1/Q4]%=N*6A;$P]W^).?&'/L^F,@=<,^ +M[8^9<Q>B,N=;#)G7-&QJ#F4YB:"J38VC8P.X7YD=9N0V'CQ.A-HDZ%[/!D#T +MI%I?Q[MCY?:A1@E-.O@U[<Q<%?"KX9/NL9SFRVRNF+HLWLM7)A_]B_[<"=XV +MRR.N&A)M35H+.S<JJ]%>ZMGAIFN+JLUP=EJE&+!O$*VF9TX$)!#S<P-J<-H` +M5UC]M[5(Z/-K>]K%M>FL@[C8D!++=!0JWFEX.=67KLP[D_'1HXGQ\56F]'Y# +M#^O_H:-2#T]Q^A.1!7(=_F)`YK,?'^"L&P2_YQEV6_5T(#&L`!DC!M5;65:R +MN&:M8GY?C5Y&"_PDYO00R>CUTC)UBMG'!P%0'0.]P7S;=GD]KK+:")?P6F$U +M-X%D73;`5K,[@,]J^+TPJ-?"L4B'X>[')Z-C4=!QXK)Q95(!MMKI%%DK=M`U +MTQ?$>8C&D]E^:I<!3MVM"&:728[9:+.K>D`"Q,[+A8+$*UIR`R^`&R`9Q?:E +M6C<!WR&A$<71LRF="'Q4=TL2?5?&T&<^K8T&UJ0AT&)4.@H.$3XU^5A';D)L +MWH,I][/Z!6F[9V2AT$<OL@8#E%D-SKW]=J!KL[^R^$?\P?QA2>N&/,+\2]K\ +M"Y?'%UE+Z27$DE,6E6#T-Z-)=(;?`#E7/ZUE&T=\UTP7ZONJ1,U+2O1L*1?C +M!:Y%"%^V+^*^V!Z']%*ADCZBC+E]JT60-P>F#3?Q(Q`9WWNEWR3)411L*� +M<(6JSD9W@!+S(^QC3UQ"DO`)2`OU8!U'\#'H]WL-+7OCC,XL&=,=N5/T1V<5 +M[4N'ZM1-M:8OKJ6N76LB/8*]IUCST/1SEG022V0I@E1H-<_RBIIV]KLY%2G: +M\0F@OZ%DY@`IFCHXZ&[(Y@7``;0#8^FSU83J=A$>P!GJ^"=HV\)-+IEW5-Z/ +M-Q"__)]K0]&=G0XAC0>,7*-2>-VTQ*G@T:#H;LSRZ=3:Q$+'C**CG2+.N]"Z +MQW7Y;?XN?:,5@AIJ&#)VSQ!CF,=5>>B&HSRR3G$&^Y).8AZS?-U@]6&ZYZ\1 +MXMXDP:3L;W`DOH4U+;88/4:9DD,\4(DNA3NY)1=JI65BUWU9XBE`L$.@=2N` +M.;#82775E8T3&SR/_=*AQ%=R]F!6:KI-=X@0'B=,'1V/O[-9)I`5Z;@1"EZB +M")4^7LE!OS.C,$]@$L@)MZH+"/>K1`S>(TF^.J!,-B949(7ZB=?:M-(9[C1, +M0BY@#U,=22::T;1"Q$8;0$%;.1)EI'C4;?2UG:13LX"J=*A+$JDY"I2@\QW3 +MREN[8*#11A#H)QD1K?[M9!R*L&WJ2_/UO.MOP^X)Z^L[<3GE+7$W;^7A_I7T +M*_2RVA9_Z+$G^O&-N?\6%C&V*^+AL5_]XAQ]LKV?^X8EZ67(PVDK;`(V:I>3 +M2C2VPVE7^QLS0UZQHL\,?+3M)V6V<J%GRD>Q4"L5IPK%E\4KP<NK\7@;Y7=] +M&FS'A?M5VPE=,)7@\LQVU2NG_H;+EE=L)73_T1U&^%7XG7[Z3W?]O>ZGE=\G +M_11?_4MEQ/;E?B8>5VU;/$O+56C.P[%T-D5(BTV'XI],2<@<CL.JF.[5G<3* +MJF6>!:Q/UD\&P[5;6?4Y\O^R%OOJ^%4SK/F0X,7-[&U&8/$D?ZA$GD-88.Y) +M,^7X/[C&Y$5ZO'BJS+FC)E"+`CV'IF(70W'8C==''5>CA;G$IG!E1A0&7Q(T +M?T8N]D]TRDNRR4#8L.SX`*N7#D-3P&AW"'2O@D#HE65VLB/_Q^G+Q.-P$T[] +M@"/5&>,\T*C/]7J)$[$'E.ZG"1'.UVD6E6$--1Z&I"&!O0EY\:.-UC>&'^Y@ +M\/&PT>P9\E1T%))B@?0<[(\(F;15!`^A>5%?O)'/+=BF>D4#H(8B/T0?UJ?[ +MPDRQ:\K\[&_,P4SIGB:CB#J]GBRFO"A0Q'9XTDP$UF7_HR/3/&NT\B[4SF,Y +MF\3'&GV>[FDU";&0P\%3!^A2>LS]\FI\CG1G,@^C%]9;/"Y;KB$J7#UGLF,8 +M@L,UGD#.Q\,'/-<8=%0%P^43G/C]S^7?`W"O)X=;U2TW\)$.4C0(BEW)0C5( +MNPTN7J^55)L/V#[W.C``=([5P,Z=R+:X7T49C;N__P1NSEY+RR$M_$]ZT//) +M;TY(1U27DZ[ZD8H'"Z6<`MHF$9';<QYS\-<+ZV-,@C"\V..E"BX/Z6NVULXS +M>V02-T[3_A.H&]A6O1<+*6H?F*8%0""=\)G/+XY^P#:D:#X1=QGU;+BMEQ;, +M;.6]_U+(:W<9]D*X)KMVS#:H+.KR>D$&W,.64O*1'`\L=OKCP=$-!P=R&TJ7 +MMS<\'*O)&K=@K>Q($9]H^K(W;TB!L3']I+B9:,3S`K&3F1Y/A[^HC9;#O#I( +M"FQXV9,8=>5VD?&C,%I'J0X4?M%*`.S/O1D6HU9^U-/7$1Z\@QLH=4RSO^J2 +MT6A-K<`RBUGQ^P6K3/2VQ.AG[EMB)F6&6V%[9*<'*2Y4Q#!JD*<*2&7MS6-Z +MCS&&7>UO)Z[Z'JS3G18ANV"IT^:$^.D"ET\<OQJ`R<=NHVL)!HN7926"(9"C +M#X&<D(5A[O*(GG3'ON:`]<<D/&;DUBO7ABNBZR2AV\TK(4*-7&/-H<:5X-+Z +MRZ*#5,=)F<27A;M*^:C^N5H7QG_!,G6L+XDNL&JLZ"FO&$7H+K=_#B.+NFX( +MS]0RJ3-B\0A@QH5AX=,A#[X!I&2Z3(2UBL-9BDIIK5P@C4N;O0X^EUHXR,^L +M9D4`#V($@A&Z\J@@TMLK)J2W?CME#12VR-J3.T51JC^`=:S/HQ?)Y[ZC>[VM +M!>8W/:_G]=MK07G8)-H>BX:?!2A4DPN2&N-4(^\J1YSHXGRV@B`W[#C35AN` +M<6GU3#KHPUW'KV(<]F<C74V$KY2^\_>CRTWKDQYMI<"P4V*O$K4PC^QD<\8O +MGA3N?,]0-KB-\)EA-CSDNAU?M0`K[='&"29Z(XX>BA(\0F[>AW-HZAG3XO*2 +M;7:SB9%V&_(3RC"B;D_7VH5O8X)1?7JY3K6P!RX1U*^'W?8@\*N*2^*+K?<T +MP%TAOV#B]'91^=/LZ;(`>&FL,VL-<AH*F5#IKD%L*I@KWTD'>P)*A:=-LMYY +M`0Q+WN\\:CA5,&BU!/U8GXU4"PVKN^"D+F1,*]S6VPU-J$<;6][$7AJ@?=F3 +MXK89[$)[:C5(TC2!P2S-QU.2'L.99L$R]XSLCUS9V!NSRX?YMSWV^:39U&X7 +MX#%R8Y@>$'!X#1O4IN!H!V`@?9=:S3#?4(>FV/3F:7/[>3+-TQ?CK,66<,/A +MA2KI/PG(OJ"H:QG;A3#/9\&Y7V8'HR-,?N^"RV6@)N:CI,2^%L(=KN)S,M86 +M8AJ[)NFL:C^#>`ZBFVY?<C5L$[2R.I'5)7,6:7327:#;Z^F"&U=>C%M=%Y\7 +M#A/C<7B:'<EY&N<,MX?NXY##=AFK'9,!MMAF'',+\5K_2]"3P=1J2(9PBP;W +M/[9"C::,$M\L-.E4=;+,H8;`*;"ND846[,1/;$IR&)C%G6#\M.O^7Z:LPU[G +M&1`]B>P51I).L$+"0&%&"4V6$59_#/X'O`&@VVXU11V.(Z85M96,`X4^OLW, +M#JB1-S9_#N;6=TO,\9;@J7T!=[T-^`.X'X%7)*1+8B?Z\TV,,.PYZPGD,D?D +MC$]##*L<34LB*?Q..F@:\R5(CVU^]@DKA_ZZ+Z&!K@.Z7MNV8'4"<Q!PL +M?!C76!^2)M#'N[_QK:9<S1L3#@D;/L<8:"ON--+>.IFU7^)3N6>=0;*C;L7: +MF"VTWB3C.HCXRC6=A"#M#D0R,*!9(GRBY/S;K1PV?=^+16JWHQ<O$UQV%/SA +MF[O31S+/4QOH<17<$V#!N=)''+*<*F+UA%N3+GE)PV@$`$M%]\,^?@:;(QL' +MC-EM?BV=7E;8@C]J1@G-N/Y&S=@8>S&6?E`8__Q'(#8B.K]IH_>5]P"]HE+' +MB8YC]KZ4;_X]BT)3"5XLU[S'[3N8W_DN5V_%PF/N*I35*\7[*OVL6*KV);BC +MD*6]*6\_X.*)R+PF#II"M-:HOT7%%ZZ/,?X'>#M6;**QR_Y1>E[SD(W^+BY5 +MZO+^+@_](6?XTS7J_Q]BKF.7]#)*7BE@,E@*\\9PH6C2R;7L[I$_F&/V<T;K +M)JY_-&RT_QF6V/QPAY+K2S&+S5.XK#9=2I4F>;[NT//W9S+4?!5TWU>A7=KV +M]W5T;Q73MU]DO8+Z)?+KX]>$O@UZ5>@767X$\KHM5=-FO8KZQ?/KY97TX^>U +MW'=\(-P@,M`ZI[#W].+D;6-VC8/D9T`S(%)KO[K4O_HB`RYNF_X:SGI(L]&Z +M[.N-^*<7J7`Y#M?H4L23'(D5^'>=/N0,/\T[?*1VMN"&1=59(>\6I/$@87WD +ML&+/F3\I1LK$R_F,#O9+X53`_*H@_F7WOYU\O^A>)YJ]3M%WGZE[13K+)1J? +M/7I?07T5FO;;9>A]%>$IX"\[MU&O4[1?=KW"]LN_"D*IAV*^/9Y6X]1D%%'E +M"!7/U)IO\2-[#L=P*MK9'ZB=G%S,1(GJ/O-&T+%Z&#BJ>&UF'3NG0I0^/4@( +MO&(=P,.*P^@:.Y<3BK#]\RWQ5M@WFS#I\N9"X!S^.29ZTA\R(6>H!>,A$[4, +MXG`[%Z>_>X;)K"#KLXX@UFD0E^8ASN2EYE,,[9HY[UFS^S.NQ+1U5Q6*!"V@ +M/=..,M'K0?:,EVJ>F&YP@$^ZPLDY'KYG042A<9P#9.AR08<DY=;LH^_9[\7- +M3+4X0L_(^%G]'29@;;?7-,X%HZ*&T/SIN3)TZB:K9=_EG]<>?@CQ"Q.=[LQ^ +M26B\ZCI\+.#O91^`!8`E.C:'YF_'?!.V?Q52]`28[L?SR!T[B4AM%>289MGO +MMAQ.W&M\>L9HF14!.=X.H6>!R1IZA_$NJ8<9B/,6%@X]P[^,GY&,7BLO6$$Q +MSGA;CW`)T^>&\SN"3313J7(57!VW&4&DB#PW..G*;.PGVNF#Y>&(W>`R\69N +M<?P]_6IY;E5A]_S4H5I@[QBND2W=CGC6F;LO6%R3XUQX=Y7ZYG2_!,[OD>Y\ +M\56@&U*:=X/;@9@-GB?47+!,';M6`F1*=FX;4OV7,KUO%4G9W"V8#56=C)2F +M@G'R6JZ]%033]J;P`D&N_N]Q.5B326#L*K&\;#,&/WB_X=N=;YY.M6!PP='$ +M94S;D\>;H7U/@WU!LJ.^=<OF>0Y"9_2D"$=P&;BYYIYVMZSSM@57333ET=V, +MWJW&Z40_=&*YP+/2SC.MD$(!%/^C2UJ'PY4@ZW<@T.6_;]W"_.B73+76C+,V +M;%`FTR#?B:02!':,DYN06VL,%GD^W:WH*]6;6J^15JVED>+TUR_W/1W>PG7/ +M.&;4N?L_DFU[(66H#=R-V,-@LM+.HQ9S22I8U.W($,\NV=]R(]/W8S=7FM]U +M3MB,^8:4+ZW+I3%X(;7DGN&STL"&AJVA%67QA'Z)A=14[>O^@VDCGH%2#F#E +M8SJ#LHA[&I;(1`"A1:<%[4@+G(CA^7RS.J28NVN?LPZ$=#BDT=%T+QM`DNW5 +MXOKG%55@+5"RZKAG8X`OUG8GS)<*%&'*E/*<)VT,F"VG.HIMMN3FA-GF53MM +MOFZM'9)N>:?*`@`(<?P#WK;U(O^I4@?8K,X69Z!)(\MNN4N4"H7VGD;B@>^E +M8#K(C7YKH3DZ5V%'?,GZM5Z?-G9)-B'[>2>">/9+;7:H6/4&WX-[IY9G5TQY +MAE7:9&$G:R6<7<KXY=#TX4Y.2G")PPU:Z%+HT>D43^5/VXG7P"62^4LF"&L8 +M9,O`)@YG)("C:R'%D/'+]<?BSH)E^M,W*KOU9E%+Y(9`^`0C@TSHT':\P:7+ +M25XJW:[E=R2-,L,TN\7-K'##4F7RR\V8M^>1))#5Z<0*$JA(A=EU/\476:"9 +M=2.&>>2\O[2D%-?(_$UCI@Z6YQPH2]9/9NV*EG8,):D8:^L?<W5]RE^5JO/, +M`BW![3X=<Q7C2T'D8>Y(WHK![S/4:?@],\=$K]ST8=*D.@K)::PA1C68K6G) +M+0F>YY%[L4-):R]LU8L_0$-?H(D>1'3E^*(]Y]-:],OVJ"?B/61Y1H[-\X@! +MT&.#)U7'_KLTMX+1OD9[8UMP4)-.CQY5GN^QU`PL=OP/[Y\?"66'C<HMBQVZ +MI8MU7@GJA`:,A`&&G._<S1NRH9X</$=-NYV3I@@0NE)SUT?X`Q`_A$%"Z=<? +M98F0"./.]U/P4(K;B5G\%9P''$?>F3:X`9$:3),S:'"C/N-_@IW=)#:T%TVP +M\Z^RL9.E^278,@D6ME#Q70')/8M-4HZ/17F:X`YG]>,(]]^]-3E`#E\O)*EK +M5LZED"!F'9]@4'(@MNKHSRJK@Y-'F6I6=9P<ZLS#DKNKL)YY5ZV8FJO(LV-6 +MR#[-L@NPBY9M/BM6&&33%BC"T=W#.GVA49T__?OH#XI-B"FVJ?OF%]A%V29C +M3B^YJ[FPXTQX,R<?]B8O8IGYS9_"V0."9T"3)U_Z^^Y<T97%Z4I+FV/'"@R. +MT!5M.OA.@0<(8L&(R!`@@[5>#A5(^]ZE8XB24=8N^7'=AG`G(CMD.A49V:OW +MF&Q,F48&&'(9U<G[![#B1]:8]T^`\Z@YV)`4I4K[AG8V)]E;@]XE%Q3L$X%C +M)DT2+DZ;)>?E&@$/I5:SR'-@)KJ&`@[-HZ>XAPTGOED0+%)G9Q_!0V&R/5_: +MK`5<)OEK''`@?H"E$[8Z&(;6SD`GP7$P=;']92E`;S"<LF6'M&BFL2*N#%$/ +M&ONWDIODVP^;:IFEF;!IU9+`K,*P_$FFPIC%IKP:UG&D8COKDW#H^$"=<?QB +M>E9)/,(X$ZPBH:#O&4P4?7/:Z'&[.3/&81NC/,Q]IIMCY>>$/2.G418N^5JV +MV;R</&@:.WF9NC/Z//3,]9S?0PHVYX-TUSDN9_2"^/C?@ZM?@_K[NG#?X5,1 +MPG`,,G%5`%Q`N"&`5K&(;_M>_UR-$%H9^<+LQNN"_S&NX/I9CA\)]\OO\(.P +M[]CE>X]K@^VW]T"CLG7<:7@\HD7W&R5H7&]A;N!367<?%*T%9O-SV8Z#A.#/ +M>CF&IA+>RNDO0%T-!<B##W%`/WAFNN\;]^IN=ST61']TC!HNDDD/I,$TU.?5 +M95]V!4Y15[V:X7;9C9@!F/W<'FLQZ7"P$N6WM1Y&^S'$X0F<GPILY+*NPTI. +M-!L(8/)LTN84:K4\UFXGWA9$<(0WANZE]5`=-IVQ26M*.>(W-B$:'3,+.1'( +MM9-#5VFFG;@:@J+F&DY)J$SD<WI;P(\8U6'Z9K3'(9*CI'^RI.3::<"&9?-J +MX0;OT;PA_6_%Y`_FV,#6:A@::0\#R8_B3';^PBV33#<!H;@&8V7#GW%$G%,V +MO!T&U'1_-+9]@&01FU[$G;/A2ZX]XL.E).)XM^8%K`=R:+[:9$XC.C/4X#"& +M8#[&AOEEI[PHK:$6S3XILV/N!G;PY;9T?ZP@L3%+)9`B!:,/#,`QAMH[#9+N +MR0)BSA91%7MS29CR`0:<R9V'X`#"D/=:7.+,\">]%;`@SIY7!80<,GFC#>(\ +M+8`XBSD,)A6&`&6;`TK!3/+'DI$RCI#LQWHH#H/)(H!"(/E1FG5Z8;A[`L). +M'(.20V%6L=,B&G'S*1=E#F?QCA^IQ.V7B'GB%99*0G"B(O.&96LEE\@YQD"/ +MU)D("K1W83)"26!J9`[>,;,_O';EA<,6%..%,B4J\GY--\+ZEG)"&V1)WQ^` +MS)(1X?X%P?@0SK\!R!1T89D,10B\_(06VBDX]#J,R4$V]0`,LV@=\TMF<FVF +M.!'UZ,^SK?M\NA*[:S,BQE,\?`#-/\U&'/)?0$A^?'<V0_&M'&73S?Z@KN4N +M'[?4@G[3LGF(.E'.4MM87\`JP$JV('$C43(IKF,MCSN#?F1M(KX62B:LMS'0 +M<F*D%@$6+`R<>*X2JF!![Z(@0:[4EEM.D4P`6:_'W/E84&!S")ME`R&L8AON +M08@HI(WB1WPPC8=@"'B8'$.!-I!#AZ2258\P*%T2L4C*`_[N(^(U$;"K%$%2 +M_Y:Y9<=F&6;&MUR/O27-G4+P*U3%!X$;$\.-,+=HK37Y4,RTX)>,_H7DC\DS +M^517YB9X4TPI%XI3D>SV?"K]`H2>R/V!#NG<Z[@S/<\P)GV,[PEOL5W!2A<@ +M#FL.,QPX!YYUM1;Q.Y;1$X\Z*G^'[GL8.&"\JH^9=?6+G/.N54MVY69=]2=C +M\#(JZZX2[2D9II5C:J9AI21OC\+//)':C)GH9HM0V7BC0:ZJDM:V;4G/`UU3 +M+Q!YO[.2EXSR&@WI4:!G\]$Q]LGC>=\=_M3,_G6E)F0#..BUD`)LL[6Q<J43 +M5PP+PO`Y9GM(R)IU1+18EC1MT8L-E"BGNW6913]]7VTZ$)>38\CNTW6O"?DV +MD*C=A`!16J6O]9OG9DUMK61%0=I"4@;L3:)MI3VJ3N#L62A)G]&%W9:>1-$J +M0,&H=!;W.0\G-P1ZB.;>AA)@D3;@%[%)S^1BC/(E-3(:_1[/&ZR63KU.@:JZ +M3&(R\@J48V'1+GD//APEUL4-_M`V]"IVM_6:9!>MV+26L<XTFV;B-?@L.('# +M9F#<A'%`HXV00M*CQU^U`'/UV6V5L7-H][%3HI#=]2P[9V0ETO@+J[2((8=B +M3TZ/'!<@H%I0@1BQ/74>.$)R+-&F^.:&O?:Y'68Q[B@A5LCQ1^=:UBK,-.MV +MV;BS8X?8F&KP<FQ\5,MQYBRC1T@9#C.8B'$=D#.C!<^/E#5**.K7?C!F^+NV +M\4#[-WB^6N8O#<R-!`^-LJ(,6JV:M+(9Y5Y[`%SN&::F>/^3D33)QB3UO9W! +M'V_?^(EV)QIRZRY@TR8[DDRP0<0P`<;#\"#K8WPL[V!PEUW)LSC;\\JIH3Q\ +M-<$:.5MH$Z+L*8?B_)CJU=5^U>\@QN^%&U<X"I0<>A^#F80NQO'LSHYG<%/T +MBQ+3^-JE!O%SX5+>*3KZ&:UT<26>&JQ0^PO5-HSKRM6F.CDE*9#K9P>QQ9MP +M"SQ$50VJ7Y&QJ#P[?&WDOJG`CIV6>PZT=00F!PUDQ2PHT'K^4>"52ASG]UAJ +MZ1S;3_JAAB91U9'H@J,&4,[]R&>86NBS+W`!1-.<UW85Q[;)\?!_D>!0DC`P +M,#!]6F9=YA7E%?$T:I(/=;('9Y'&IF7(]1L]<TD>7[S''))836W*,-^BQI?3 +M@.SC+TPW>:_8G'0(271DE!1]O%WB\ZO.KH1D(!^425NLX&8B,\9ZY,65<2F( +M:NC%!GU,WNO7K/#F%3[K;P<;6WMKGN/$X-`*AZCN+@9$VZX+H_?4#(IX^8R/ +M"WS62X5_>X=P4X;+>$C=B>A5!8"^):GQ$9>//K,*U4RS`AN-LP[3<^%QBRT6 +M%F(;D,RX9M-NK5GLF"H@$OKJUD<PJ:52/O(]PP<UW';<)O*B9WL/FG20E]U= +M'0GN5_!F.VNO-#SA<E+90IY6(%KZ+D^%]F^W/Z[Y(LOHN11X=C(4VEV@=LEP +M8D?RFLDVM:SA&H$I'#W]E]N?\I0EW8.MF#8BYT]8-SQIN-30$XJSYJSZ92LV +MM"4.0#2,/3(QN'W6GJUIAL$S6&FX(_8S4")T3QK%;,>MP7U1,\(V/<C60O3V +M3MM,9C3*0P*0'4A-EETI9[,<UPO2[AE&AS)V13"4$5<$V<+BI+H4SGE)2LNE +MP;PHKXMIN,I*J5QUZMDZ-L=RTR.#YZ.VR`YT-^X,'0V/"-T*'[`K"<:+PR0` +MC3F(X&GZAD&9>2L$^U^5F.2ZI,F.QVY.<PG`ZG0M4QGG0X+8%VD&(GWHB3*$ +MR^&G`(`GSN`C(S/];],7?KLCK6IUTA_!GXQT9=$;K"T;Y?5(-Z:A!-&-1RM" +MCP_9*IPHI"#O&>IB^[ZNBC%2#JRF3UT2UC7GH8TXT]D=P]0+?08SY.*D'I5A +M>\&0.2P0&'$%U8V%(D]BS]@&"@*L3G\E8`D8=A66DZ.P*]1O]-#,`OJH'Z<( +M_QA'ME,M+/7)V2<D/E%-JK'UCR48HB:G/"X2TY2\(:`</;KF/Y<$VEWW<[/A +M=1]BQX74]F/)G['-<(NJ&Z@"D\>:"BI1D=,:&'PJ4*XP<*2.+'.1BDLS?@%V +M&!N>KG49EP&KN#)B0T-U]/Z^&+;_++3B.'H1Z,@5AH`&Y),NE&0Y-&B!UI_3 +MQ.HN_;J]=P4&#]6Z;)>05!4H%N1@CP3I/RE0I$=6M.PNX/2"C>E?:&]/67<Q +M!FK1'9'O((B&??*)H`9:/[K$P<S&=/M-%H$T(PD_:,QK\Z6Y,?WRG9<N.G9] +M;?#K3SA_N=Z:L:_!-N9[T3127Z4]B^:F#]Z;)>>G2.5IY&EF?Q_9AGIOJX$= +M46B%^78M27QAK('-?%K0J:3+06!;K[[4I3[2/2+?#$=0/KG_,7K2DE;!X'<D +M[61+=V/O63])$E3"F>M)*DO<SG,'21'4+[S&KC"M2:0Q_A9<%+SDBSA!:N^- +M:=P5%,"_H*Q[WL-"A]!Y*-!%RMA)'M.B""V2?4!`VE[)F<$W)F5Q+CX5%0=_ +MR&I84.N/^`2?#&:I&-[#6*BGL$_Q4!#F=6:K3*$,K.F*X)\.N`TFZ\/]-%&X +M!`B'BXY#T]F3E/-:^@_R0,Z1R((Q=G8D#29J)F@ZX*=+9MS/)35@>RI11#01 +M#3+55LY84I#IDIQ;LB$UJ.70ZVT#L_8QG7L.M,#_%<WO6C52BWT6OF)T/1Q] +MNQ4+I1I;.DB8(T@`K)2$.=-30(Q`U0T)Q-%9M>CNB+Y#/^"/3M?D(AMQ,,\7 +M[FX"2X,!L#CI*8H:`[<#N:BAF?Z^01O]P_QH(VXV\.J:?-VO,0NY9/3J7IQ^ +MUJ6P$X717FXJ>["PGIL>.!^[Y-DV,.DFZ_N(F*!5&F&KJS;[11'MS2#GM;$O +M#LV#>TWL-ZR9X8%ZE:+%L\F`-3'[=@GQ<2\.(%G0#W77C`#--NA)8&9E1#,C +M16!0=[X%P6DK`MM,(AQR%,;8TV)-VFV`\8R.V/C!`TVTP?#,%Q-M1IM(7`^` +MAF8FTV-C;)$-L(QQR-.!-X;S#>\4P)O)DPW-H;`A"$S"8!(\F$^W:M-`X881 +MYGQA#<P&^JU57YY[K56K2:(B9]]OKK?Y;_@ET4ZJM<'NO?=<'NO=>ZXKH_DZ +MJN]57FJUWJJ\[[\UKRK]K2N[Z5]*^E_%(NY#/L@?)D""=<V:8C4-3*TT0)WF +M^ZWU+Z@DIGZS56'II0O3C)F;@F+>\>#-Q^%1`SD7>QY3?,A*Z=LY99>/T@#- +MB,-L*%\$SL9NA93)\U2D<#`?*:Y]85"<M/,(KN=,F2H;`?7$>,,5MB<E;DRP +M;JIF4ITEA:,NJD*4:2;Z@CNCYR@3GB@V8$^?5SQ"W7;2(E_QR&=><&92>J%W +MY5&=8;==O(BE3BUZ-\CHCAZLK,Q>(;2F+&T^I1;4`4!AEX,F$-(>9C[^F(6( +M8Z".LOTPB9@":`R!'G&N$#T08_XLYX\>"(&\9M8R9EHE_JE1E#PSN<^K81=' +M=22'&-.`AS8CJG(@CIR7G'JXYS"U!.G@X2Z[SQ%&_>DIC6XOC+S&W7(,S[RP +MX;:V=(K\YU,SD4^_)SG!D9L^<$:D<N:^.C/.L6.[W3^I?9MI-*`,\LR1+N$G +M2EXLQ<*FZJ0,%0@\1Q9+VM4<7]$-F0"Q?!&N`H(>L1+R_9P48&9"YC2O8IH) +MRP4MY!9D4Z/_X2%&P5$%H?>V$I1*QKMKY!I/+RJ6&RC*6$(C'VR7D\4M<"W# +M$7A3"<K_`O+R:[3<B^R)4@QMW`,SD.)O)%`T.APO),6UR!%TGV8+H(SC[[Y^ +M*XI):`VG3<%+;?7G/C>BF_L6V]%^\XEXD\7Z;[PCAR0*4(G.W`*8"]1U&-Q- +MK9S3@J$X<$AKW]0HW?4SKFVC6R1H]=@A34XPTIP:/--Z3C#L233C(5)U1[]^ +MZ"TQO_5,$-A+NWSPB(@">F+V\O[_]U.N5TOAZW`#5!G\*\-%'0)J!/04B!T] +M]VI@EL"ZBT(T.YN.GN0"SS7A#SKBU__C+C:3J\]2^]=-^LYI\_A9<:;ZH-?S +MQ7N(;9U%[WAO:>P-M=F%JP,7!12+["U<+[>8D:CX8MV;+$I,L*C(S5T@O_)` +MS*,VO#`0HUMS?91RD%IO`%IC>7QN6@7:B^*\@X=Y3;%?$XN=3$#>?;$6QN*W +M3K6$TWJHKJ/6\9Q+<GKC/.K&!L:Q(+]*:E;ZTE*85X8HE_;4?G8"4WB+8YUS +M7L7TTKQO%=R^PI3E`B%&P7G6?DRJ?=S3#K`7!#81N!M-OD15AB`YRQ9)4&#$ +M5P#6C&8B2\D0E?U\6;5\B06$Y\,)7U8:ON^--J^2$JPE<PU9AMI$#*LJ`'P% +MJ6\)^HW4C%1>5?8D8MK@JRG>J9JQ5P:R'[6AYK?>JY]YXA2$PL#;*_%4KWI" +MT;J_BZ.^E!GPW^\Q4'7(@]PFOB3[MTKTF<1[!;+9:^B%?XLX:E8%QC`UD+72 +M8#@S=TF`P&0Z0`FE@#WW(LI+?NW3C(G=:\!$0<^3NGO_,%PC^YG<3-7._B!, +M6"@0#3&'%#(1[PD>5"ZXN4<EC2A1IK!!+'=QW\3MI'324":I[P*9,F,.;-W= +M8-[D%0!P@/N&Z>%2H4)![\KFG4/21/A8H2S;0=0]TY2N8TV4(2]$0&+:T"4> +M]T$G-#(.+>#">KP84U*`0J([5VR"3:J497]W=N:1U<Z'7*OIZZW\>:J.!'9C +M+9Q[O-7^#UG1&IL5/-33]J6"E6RU"8TG2,@-WN6%B#L,]),T]'6=$@&-J1Y< +M["+-DBGJD+YCC%ICX+B).E$AF[`<)TXTXQ.X;`%DODTCZZ6I&(@:)`U)\S*I +M0P?`OH;.K[C^YMI`*VQ?8%3NE6M52V-LF&N?3,%GO#WGMOD7>Z>]],^\P+?C +MI)/[&4^BS#!Q])R)F8BSP5=?K\U?#/3?:7DHNA5S?)$!O?6DUII_80,!D\O. +M610)1K>48*58I<*&DDDPMLM<Q1'WF+D0V9,66)(J(!/[+Z=CK7=1O[@;]^=; +M&#=G9XLZ1%"6VVB@8%X<@S=WP8X&9V9$$U2UUTZZ3]2^G'A$H-$$HP9)C)FW +MD8'$1;!%MF=,F&2O8%K-F1/?+2[IX[S@QUHG&906EUO6_CZ*;((ERA8^'?0U +M[QD-_5&MS32X5'1=V,IP`((*'O?OXUL=4P*I+Y2\?9-196/N0GS)ZV(I-FO" +MYVII%S!_S7C"5JXES>O8YJ6/_=>V.O+JO[+_#A/7\,[P@:?4UB6QMHY7G'IN +MTQH=&?Z@=O>S=,G`N9Z03B/[H=P>*<A+FU[PSE5<]>J16S=(.`PT6$>ACZ(% +M)'O8,77HJ%[`+H!L*`?`.#>!)A++M,4\,7TS)*S;5:)2AO>WB$VE'*N9W[%] +MM65,OSK)P/H36!3_6L'&D<6C?]UD\>:3U'^U2ZH&.FKO;NM0>XLV#J,<R*3? +M1&%\2SCXQA\6IJT+J\8"I)+\YOTBZ<]X!\]4+[-B-"OQ%W7YD7W&1ACA7U.[ +MZF,L"[DHWSV+['-&B^CE7+_)07MWV)IHFN3!M8H9[.*J)=#5CW\XR2Q($A7' +M%^L@@*?/RW^L@)>(QC,ZQ9-7H"297P`)W\M,$.^TPWG!;EZHZ8'?U8BI*+.2 +M*,/XE?'AOQ<O!;EYN6(1EF7(J<GYQ/,"S88N%T,[0YWD>&JI7\B,;T:T8TJ- +MC"X6W'!D(I6BG@PTD/<^)[9NFBPVZX$B>%[4F+:<OAL>2>+6'7P9#U01Z]:! +M%#TX<F'A]#C&4(+)O.N'^I4J+#09FQX(@JX8]`^&043V$S,G>L4`XG4.0M9C +M`[V))HWIY*@JQ:E[D<>]#SRQB<"QPN]X_MF8Q;>8@:V,=&<;D5A8C@QV:LIH +M/68XGK%:JQ![-XA'781R:JY#9^L'>/?#:H;A]<(A5F[_"90U[ST`51UPTL4R +M1_C;:/O67$)LA1NP7*KS2!,EQ*3^[R1-1:P\*P&4VCOH)%0+W2;O\L)"7MMM +M+@<L2;P'-@[4PD`!MO,Y@ZO,M[Z*]W*]T;?E*H'LE['D'`NGY'$W+M*+)E.> +MAPK:,L"/PDM`XXHL:<*NICPHX'<&W)0)-,SS&#^K[_N.AHD4Y4;$#F$O#'); +M@8S[XR'+7JA4TY5[J5[C]?O>].IZQN`JZ%3\UN"W1GSH&YAO,M]2W,LOZF)2 +ME7U[ZY)9<M#JH-IE>:RF_F:),%K?P3M64X<E(O<F(+P84**@@@IK>FUA*`)# +M(J;NHX'SR[93BS3S/_HIFWA*4AKD:4M*\MT(Z<<]>2WY#?E-W+9,%M%/WO=& +MF;#K06\?7?V02"ESR&S5=\D(M*\3ISYN2C%Q71M+J.<=U\H2;Q44:09`V16, +M7$)?"=F84\VF,%U2BB/5>O\>Y,:MPBTRL(^H\-((M+R$7*&L5F2A&1NZ,AG/ +M!.)W%?(M^?4\UO'L5ZB7L^-XB:-/=?(%5M\9"ZT,[@X#!L```,```(```0)1 +M3^Z#+\,[`()G-YHB7L0R`AL+R^8`!+C%!>V#`G!>Y";`'0$296QF+4QI;G5X +E+4%2378W+6QS"@,3JRFO6QUI@`R+1U$F`P4$`0`````````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part03.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part03.rar.uu new file mode 100644 index 000000000000..4ec0e551fd1f --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part03.rar.uu @@ -0,0 +1,299 @@ +begin 644 test_read_format_rar5_multiarchive_solid.part03.rar +M4F%R(1H'`0`AW^N'#0$%"`<"!P$!E.>`@`"ZSSQ%,@(;"\OF``2XQ07M@P+@ +MS>)=P!T!$F5L9BU,:6YU>"U!4DUV-RUL<PH#$ZLIKUL=:8`,0-DA/$)K[5A) +M9YV].TK#L55%#F+S[+AKGR]-T,&$FC8UC1V2:^2]N'&NB;!NB%M;BCE<-%?5 +M^U12,8D3!W@Q8$<<1@&62C3?H*QK8[VEV,Y$3;<=CJ%-,.QH(_[!<%2J^SU1 +MP8X)__-??QC.F"-.Z#/[F9/^>;\CU%4T+;3=`W$;A-^OJ6-[GTJ?4JQ2O=Z& +MG5OU^[=X1GD_R0`YVUVH8((UN_Y)">9W<MYX#O)_RS#Q<=ACDT)@*?]1=\P9 +M+1B?''99HR91*1>!(#/K!N%G&?M?FOLXG&1$FC)/9]O&W<:1W\3]?M?.?:8H +M8;_O[O^CV@E5O;N@Y%]U7J&OR&BS#YCZ_HCKR^SCZG1`J+L#L(-T;`'J=D`T +M;Q3J[SK8ES;EGWD")ZF]@82QP568%&')G"UR9%>#2<G,/>9NVGV\M).L:F3Q +MP0U*0:3C^WB,M/QWZ'>=W>S<N*YQ5UT6YRZI,12+#!#7JC.MCIE(HZ[.LZ/1 +M719%]GVQ54>T\WYTEXJPE.#FZX93IBY4!USWF:8YEYC%5D$&\Q+V%N,,P@KA +MIELH6$!ET&O6%"$BW<GE%W67XI_V0^S6G(A1@CCTNRVYP_]`A`9>T1N7H`WJ +M.#FR0:%9O7`H,DV(V!:;NDH;1S4H-H8YV76H9\SJN1?5Y8UK<GAG0\.,#06C +M$@MD03'M2X@=".0''3HM(QC(F>"1*59WQ0A%UY>%:;M3W^!O:-E,BT<?\FZI +ML[R4<?>;E`.Q?W\K?PLBJYT9N)+#)].H4I/42ERJ;*)QOX%KF-^9N18K)Q`\ +MWHZW;B6-I6X+3)RDNQ1;2_1(A&8EP;Y`IW;6+_X]I&,IW,V;X%JXOO+:X5YU +MN1&$0ZT*;("'N0WV)O.V/%X0"9L23KA51/1+>/C[;[!XRKF[D*+J6@-5>PQ& +MQ_=[M)S9A]R^RAD4R'CW.Y$'6_W4.YY8&A:T8_M\E1-TTS(F[F=W4$3.FXXE +M.%I6Z88Z9QE@E,H?TWP,FTTZ6/30D<E*(WHZI`H\6XL4CW?@6`5S!N=C+]8+ +M76\1%*1I1D`(^7ML6]Z7@N]LJ@RH9(N1EZ.LCC7*R]'S(MF&HS]#H,AB42I$ +MA7W-7>FM'\3+]J0KI&N9+ZE\L8+7$\_D)6SCI=]>KH^!#$`!^"3>M5E'"!>9 +MRW=SZE&,UX/G;*<>4I-@Q'2`Z\5N;EW5ZOS@R<P57XQP(5RRA8^>#'84#GOE +MP:_D.+P(ZSRZR\-?(C\YHIP9D2"T*-69TR8EC18#J+H"]^%((>_P*D=03(5D +M<!NQ/5JOA2Q(::<T],&/75"<ZR0S?>-=K(S81QI6Z87^75"_F(<9;;R/"C`2 +M5$D11-G18QK&6XHY5+G45J;:]V1J9/>Q;^1-+1K<]VB@;2EOFXH#(5M;A#WW +M[[6BVIC5[/*+OGW+$5:IUYNLPCNY_LD%&V4#"?`70-2K$FV***P1%*T*SA&) +ML^S1MD!'IFQ&M,$EFJ-YB+XIKA>9;)K]?M9M*)=->_!T.CQD,0+UI^P30X[% +M2P4DQ.X'&UDM/)_`/.=WY]Z%'!J4951WSJ:4VZ-=_@PN\*@'SN1?8RX7-4SY +M^BYH)E;OD+]Y,U18\*&A-5]<X"#67B-XP-+G2.4<)N[WV7LAU)ML!>889C[A +MV^EK@"=T\.FYK-IRA[>B[E]SBB(GV14T*='5?'+>Y3TG7$IR8WXV*,<%2)C[ +MM6,B\3*"78^M4E1]\QEC7SM,^S/DMT3,S]N6*XJ]MLW8X"<&&=IOK)RT!]<" +M"$1U9T/9]8XL$*G,T_NO`D?/@?3&9PWXXX0,?<T*\/<X"]_^)HH&]%9P@3J= +M2HCVP4`;H6\1KB$Q=%K.E>C%@VU[X'W'3&&!\#S@HB6/UQ9>22B&(&BD).]- +MSL-AH.&F#=R(;28K6&Q1).KP6-`2TUVT"YG!CS=_=);@MCF;/`Q&\]N"O=Q* +M`@3JHJ3BL]SQ/TPM"W178Z1K`TX#9@N,&7X,(%O1#0%`PJBB0Q(:5GJ0II\0 +M-?1=\`#$"AB8;,T;CZ8FG&\G*8</G#OO1&N\YWEKQ7HSIGW@H$K&V:_TRZ]9 +M613H8"90D<;R"/,1IBZC%,E0UK*X/(:]*6&UT?+R>'2L\2V5XS*KR>4@X`6` +M-Q\$,ONLB/Y$/.\/VS7CF'YR',B`"\Q\3G<?'#/;^VS'H(`B*J/HXU='`[)3 +M6BC%Q-N(P4&L?-//PEZ*=H0(]31-#H9&!"ZCSGZ)-?0,:9D4"5!*2E`2X_@7 +M*<`"O[AD3!))1M=TDC1[@+NSC#@7L_J,HLVQX9J&23,V$\CTJ-Y?4'JIO8JX +M4KK@U3H8;YD9?`'HQORH7+"0D*!Q.="N2@IJ1J]V"4/L(+HIH<2"F67-":!5 +M]#,G&*7R+<60PSD*]W`3=BKFXCA`5`,H>(..R@?7\^!H;J"!FS#1>IO.IQ[) +MN(0P&*D/Q+RE2T/`?IIM&L*=U>P@2[D'!MPIB<8/OB(B47<\TYR0AQV5]Q;Z +M,-#03>-3R9X_S9Y`-%=@Z:+6'(?``U1U[Y">T;S=WR:,(FY5'IZ#"C0-0\_Q +M![$&$\^8KJ(NA3_9,!,O$UJE.7I1H8L431S!6TG0P$QWSP<O*P^B!>F+YUG9 +M!C#IX4B**"&B$5YY!J/D'P9_XYU%7C'>DAO_E2-0)-!4`0%Z'M*`4V-AH%-Q +MZ.!M4@:\:MEL4RPSJ'WX.<@\Z8OOV^U+T1T&2A"C[(F,[;QT;^LIIE;&.OLJ +M>#SBLUBW>*OI0KF[X@8_3R))E#E`?G^A11PWS%]**>>RGU8Y$CGC)F:B)C8N +M:$P.8\*F@RG<68,K!C8(6L$/P<[`"/3,6LN3S>R6NR(7-&XH*]((#\30;GP_ +M@E1/WD9D-\-2^;PV,/UW^.>(X!5+I=I@TCDZ=3#>?$#'L<Z)I-"WZ6N;P4F_ +ML4F8J36,FQ^U4%=3F#-I64U?I?'>U2[5Z@9;V)OHX+-['`YWIS04->?D#%FP +MZ0'&1:J^^%E]!S!FQ/W('$J^4F@Q/Z079AQ-U+Y.["MPK&AND+OBWV?^J"D< +MC6PPB*M00&.AN^/?=_,-QBS_I"[&*++$.VT8H`X,T*9^R84&6K#8WN/N@@R. +M/_"YA1=@>6'/-/'OF]D)?*->CBAUZ\JR=Z<6H,@>XS>7,I;469:/PA*+2;OU +MCD2$@(I%1HE3JQ7!CCY\ENC7PU"+$I3H(CZFCVX4J;_;_/Y"WPWMV<2W\U!Q +M:,SIMY'`)&D;P;CM0>`-YH]T>TR.F_4:D:55_1`TT=+:(X_$\$ZTL'>^11H% +MLA9]`W<-Z5L9S+X1\X8J.]\Q;)^M3JJY14?_&]-6?_L`G/^DKV8QRQS#-\]" +MQ#W]3O5%U)>*V[V[\^^9>8]57JW3'OSCU<;)1\5BQ[<NK[8J/9M6Z'#8;[JE +M'.[("EVKFW)[KEH"Q\&Q=3U1(&V#PB]#81>^?LW4];ZU8QW=JP),.0BPIP:A +M9\J3MICYF@7W9[D7W?X_["4FS;+SS_I,/L7NU+__%>Z=1E2EVN@FS+YV2;$- +M2<!T)5EBR&*?88OX32I\\L^E$^HX/43#Q!YC1WEI%_)?#V\*!D'6U;%IV9G8 +M_;0/#,(!\?VI;&CR[80OS0@E:'<<G1D@9YIEU!\P8F4V1+B-(]#.>A>3B<.. +MXV<44ANSLDUMYZ1RUWNCP74W]I4.`XW'"N7+RV*.PEXI69IJX4<*QPCT%+]H +M4*S+2T[DR>!&:J]W3IBZ(&,1PGO!B`5G'4<NF?`#R3A="8Y/6.]CO&-Y_0"D +MBZ^PNPP!8F2VQ?1ZGDH>)IKWLG@B.76?'GX1TB4Q5$42#%,J*A:W&1]U)0IT +M.CD&+)#>9!P<DQ,,2%0A.W%SC8-PYT"[;N7$J9T19"8K*C&\?NBVBNY18'#, +M$D[-VSJF<)5'.#F`(B$J$/XRK"1<_(05)XL%8TWY'A=!;^?^E\&E3(I0QB79 +M\SE*MH(@@L`B&?`">)TH\RV1]^2*FD517ZY\9E3^6#@98C!*8A5Y9&AO8O*( +MRG>W4HX>F!>B(?XSBD@H0%B3-#%P70#?X2/.^/F%BQ_YI`&JXT>-!`QUO0Z/ +MWP1!YVD+D#K,MW$/E1^'F_3CUCB"'=1_4Z@!G*ZVHCP[G?AGRWI`EMM]'Y6< +M#'Z66JQY[JJCP3W],#Y<*3M8\+<TK87#9X'V?G@/O<\P&*W&U;DL=LW40Z59 +MQ0%00\J8'5UBOL(N%'`;(41=G0KC7S,F\_@??Y/1TAW6P9D],:+P&D-^24_G +MO=!<<]4<+DIG)DU;V*O>N&X_["Q$Y>E\NTL02H(3S+6KDA%UG1-CJVZ?ZP'H +MPG%B;MRX1!K>K'%Z4";R89F7I<FB'[$K":8K<LZD#`+&:)(;7'OOM?W)AVN? +M2[BT4@FI7H(2`3-!8K$Z]2&7I$-)FUB*-Q=_K]J<%(OY>@R`SZI;*;MM%PWB +MWU\]#3>-7)YG7#1J!"\+'7<?EY5TN^MJH]8$9EQ`@1X#6H&@Y=07NI_.'S6? +MQ=/&-P4&F'?++/XX!:K^DCOW:QK=?:+C[9B(](TH8"BN-);EUT":J\WK)%33 +M/NHO7>G]-H)"O=.+X,Y"$>>:%*@Y;DT8@LA"Y?ID,[A_7V3UP><%-V18C"JM +M;^1<B-ET/PJTP!';SAQ?.CW8G<SM)5QX.(MX^YB1H\6)4XD=;E%@O>BZ@&@/ +M'\3M>;SRLRF\V@0Y+=SY:`"J.Y4.]2YIG;H!I12VT!:IV%<[*/.W(T.)K"8W +MEA,CSMP&O]!5C.\$H#G80<R]*MZ^2)FF`D<T<ZTG?0ZPQ;IAAN<:>LO."KT* +MWG&,7)]BK:C>*"<,73VW1\/G/LT<ZD$7&46^2SF-*$0,R8RG@75>80,;!R;J +M3DH%F%Y2V*G!K4CTG13$%0X&&=,JSUSL1YDW#U6T)58+C$9*M5T.BL81P7N. +M0@DZN%35RU6W]_/Q^U^K&CZ'[N;/N_&K?>]'HJ^.=5:ME"EGT%TJ'(I!1Y$= +M5TFV1E;XX0M\L9QDTPQ#SS7J1S$)0LH[1@]P0FJG^\!@AI$#.%\5VZUX-A$, +M_U>8^Z;Q^.Y"&&T`I-Q@/,FHMNN"&E(_`!32K34-5'^+=!TW6-!WL4=0XM7' +MFW7BV_*=`>SEB?3M<:H]MAA,YT%;]*!R%BN,<0&CI!9`>>W$%6-/1*.8JQ5( +M+EK>Y>`5"W4WN@'?TR<P:F<IN4NP:,B+Q^4!;RB*QB*&RE*VW\+P#K'B68)5 +M>-[=O-=`I=ABU&?[ZKB>A@39(2GRWFN>;S`G\]^D"YFY)%ME&*"MPW`WO,J- +M'(W4AV9L'AX>6`J.+C#5<C/U%7%C^/VX\_+MG]0#=1U.W0'`Z!&;=?7D#B%7 +MU`7QVT%]/WNMRL>?&#:;M^*Q@CZ5Q7/D:<L5B#,+36,6<X^&A^WF?QO(ZDWQ +MHP-4\%IQP#`ZEX??J\H'3A/H!X?=QCA?(%$+OQ[Q1500WO,Y;@<20GI1X(K8 +M2`T9%J#`%"-!)2"VE%@/")_/'"37DZ(3V#;BFP/>P;YH70_CRIU'K>\?\?+C +MF-!FP<\)&&=E5T%H^??"_IQ;@1:][_54_N:*]2J\;H*V*HG#\7H='Y51:,FS +MP'H)QU0PSH,7E/4']#\'?-^AY?VO#?>P_??"%Y.PU[AP@Z]'W3YQSU^0NQ$R +M(?]Q!-<]9O/\M-M!6.Q83]]P\?I.%[OXAX&LSP`"SIF+NGZZN`)>L<U<0?.; +M\[$JW/M;F1</W\>#$J8[D!TGC[L//OUEV.=:AC&."O4X>G2]7-)IAJ>BL#$S +MMMOY&:!R@?J?/6CQ(5N@/=QH^I\RV`)RXMU><7=;F.\D;R470`^T9/9]P,_` +MNNU1'H5)2+$X$ATC#J)&'*`,69Q)D(822Y^XE3P3:?U&:AJ-(#^$1]Z\W:!= +M*-0-LE0[IJD-42"$:C^Y[8X\`989]$.OIX\O?0Y!E9J[T5K,:6?+OW=`IY'Q +M.;&882%1P%"SAD5MQ0ZF?"KU,)0Q%GFQ4(;G0`NE"5E1K0B;+U,M(*,J:P5- +M>)>FEGFXWK$N47C/2;;+FU)CLHVQJWC_]OC73SI_C69!_)M`#(_T/-?CHH6N +MDR\XF&S+W-\H07:Y00$O*P);)'@L.\^'XEF1>E@G%$_;W"3\^*]!?\OB9!"C +M=W16G1:T\H(->%!@1[K+""\-KK8YU`T'2SA`XI`HE(@#>*4=9HL_"BL=$>S$ +MNX/XP*6]'3/GWF7G+L0:(XLU(YA9R/B3;D/TKTCY[:\>*P@8%E!FO4FE4H6T +M8L<6)T%++3%NE(ZR[YE>V@=N)5(BK%4NCCII5J[.*0QZ"1-+T4$S$EYA6E\+ +M:07*86]-J:51!G<OB+$8](RQL@FOH8*N=&LO/@_W;A,0JX;-R9+P(,W05:>. +M27[DS<7/)0:%#3TQ,C'LGT>H"^5?9>@FGZ/1EBJ[X<7*)^XDB3$9P1=T)'') +MYADQ?+LF/^):?PQYU"D!1@_J<K2""^KS1@/39E\;XEZMD95Q,%R:8^[Y_6`D +M(QQ\ORD2LK"W\H66DQD`S\<:EX*@82B/+IW>.Q.WKNAT=9%[`.D$5+!#2H<% +MP*LV*T[;M5`K]O_R1HD$J/0-"+:1#NP\-!8:;C<2=TT1>H$-!KD]?XEVGCUJ +M8Y/G?$INL\+OGYH_#!>I&J+/,(UX79@@_&IY4`#E`*P3/1=836WGJETFVZ`B +M'LES=Y<..KZ<5I0#$?G$@?24+JC\FTG21?ADKU90:JU^1,<G363=*!^$"X39 +M-0@_Z_$<BK>E#$H4\<^]/Z(#8URX%;DFS*!LY8ESZP3<Y8_)PR\W#-I+SU&Y +M9)0'P5+U\:96<-U/'"6:IJ0!O(A7K1A1<9)4T]#I5[0VG8CE&D8F[%?1],EV +MPCR,+NC/B_$\XY@POI`$:WL,)).G=3KXF!YW]1O]].#1;SGA(0:1T9KW3FXE +M,5E9BL3<T:TY2'NKV:%O9C@MJ\[Z:CW3U0=^HI5.[;\UM]_$HSZGB-[<M_'P +M/.TD*8XG.:%\\A6TDAV+<2H;Q4=N@.I2"Q2+Z8.'7*!?$NIR-RQ40Z@7SD=0 +M.$P,XB\09QZ](^9DP3FLO<(N)P@I-WJS9WJWF@4:3T@ZPL&YF"*N2-$7&'2/ +M,VIYF(5Q*"P0._J&,9S\26&)3YE%/D*YAF(@ZYR/81+A4.07#]6`)OHE0Q@W +MR%&#R(CUD60U,-E_*^CN."B@JZD7!@-&IQ3<-5B*8C<-N-&\+G0E<^0IY^!V +M&IOGSA"J%)DZ0,15Q2G%-Q$$MBL%_5#5S<*<%SOF$_<,8A,$QD.H=7'%*M`I +MH&\4J6RFQ32V1"F"8,*<^@R@`V`&&Y>T+/#"2UH];O\ZC](,^<>?/XOS*(I] +M^>XOFZ!QS$EIV]NW<M^HC.6\WH$-30#1D+M.-'1FEIRKTKBL;\"]2)IU::`Y +MSKKZ"[M[+WH5',88+(7R%3!KAQO%]M'@[I@2'\?ZDB=??P@%($8]JU&8"/7H +MV8BC]+$'1,EH`I$,S<4ZF.ESG%F*AO^QS9@]Q@`82]CZ:J)R'N>W*9K`;/;G +M\%(48"7,X-Q1-M*1L*`XV[NO1Z/N5_Y\*V;HSD))-Z,NZ_BV,D1>!3JD%L;` +M0,"]-\RS(E1I8AS<&@3'J`';[-<29#)F3!?<7R+*`/>JM,K"\HZ:E?*PV"LR +MUP^Z9LK8TTA42\1C>&=0&TSX_F/5\EJTXKPW>6\>-NXHY:5#C>)<5?%F'\?X +M5\\U2"&V`.42RSX=XMQ`%EM`_T>'?YC_2W`15N260(S'DRN_^'#O?$(;8M\I +MYZ@*F2I`P41@U0@\-0:M^%]J+;W`TCP->Y/$IAD;YBQ8"Y&)=^%X!_SO]9"' +M`@)Q;Y>#D6'Z_138%-5-*X>U.*:.//C-DD,C(KK+[$-B6QWF*L)T5;,T!RD9 +MCV3BC4R#-*G&HN`W=DGT&QP>8)J_>]-1CS<9=*FLQ(:].H<GSC^6N:8#VH\* +M`$8F(.6YN_8114.LRF\UN__V^X)%GF1N%>0.VF)%I&Z/M/231KU]&8C)M26' +MZOA.:."<39P))&MKYF^)<>@;<#6==6BZ#6G4R>-?+TG#%Q5[/$.HY*;_"2ZE +M,NLMM[?>U)>M+HG-(J<YNQ39^&`9^%M&OU$8XM_^%RS2E_%`'/D,_,W7+W]D +M:$9_>C6+C:__L%*1;B]@O(S>U)<\_>/WT/=LZX+WGS'N[O5H][Z.79XF#<<S +M=N\.2Y<=B[Y7.U.II7.?E4-Z3ISM0*7HX\,:^]IO8<U]0^<%>"5>BX;<'\XC +MD9:0Q]@1MW>C$5)I_M[W?!K\-+&@Q"@24&#.3K7@QQG0H[_X>W!#DZ,Z7D_] +M5,&*E]U@3.J#W=W-(IRXYL<,]32V>93K-KSZHVFZ)[,<*HN7^O"A-&`%MW3C +M4*AXL[>X-\A*LDU3D1;U<;ANW5V]A7,PK]OX5<S*OV_UJY1US(,QQ9Z%'A)F +MT<U)3GU?^N$N?Y0Q[_X,&SS7RR*.,I?B.L+>*WXJGAX3`?,>$J>?SU+G2>XM +M3/#EB9<V\&+NAIG/N0+G_"^2A@4E1=*011"?RBV<,?[?_#AUZ_RDIF+MWO,B +MQ?N02]]U?-EF*!L:B2Q%\[02&&K'UP:Y\1Z])M_=QI`$XY"5VXI2.(FL_!`# +M72,9O0XQ3W7WO`4;$N66VGEU%1R/NO]/P_Y9JHJ;J&U^3[KY>6:DYWIHH]X= +M-X7].;#C[?CS2\3!$31O'U,M(1\U@3J(.>V;N$][YLG8A\Q18GJA;IFY1V77 +M'LX4H#<_UR:_L;G$8RQ\*`K43USQ81\^<L3_6^W)AH'S<7D#Z4U(VM0[.Z5= +M,K=0FYU,>YF;83$SSH_`TW#!Y]12^N_K'6>">`<6QJ#HB7QDOMA.YHV*R'-^ +MRKQS[GTKSFJT'2\<E0K>C53$TF)F%_B`FK+[HV'=Z1KKSDQ/90\%2_5O5/V_ +MHNSMW$S""S#+GB9]3Q0MK/'\%G5$]Y[?@L[N]9A[W]+@2S'KN!@G'/W[O#DW +M;K082SN]N<XQU<_*H;TG3G;R5)BDQ+OT/$]=O>KX24P<731:+X)/_\E&+-]2 +M9%@5'@7HSP5+L[$_QD=0%L6=N>-'GKK^=*78D1%1H0UX(/,WH5#/9]M#R!CG +M]ZY?]E(U+DWQD\-ME#>_^,&DX&8`A_-V=O>;_'C4P`BQ<K5H#;<OG]XM"XFW +M6QS"QTEJ=/ANSB@6&F^$EECF/OR7DDTQ"TPVLS'<:9$'Q-9Q)YIKC>1P&GUS +M'RX'+8=[J_-=_T4_V_*8&$KZOEJ_3,*^KQ5?IF5?5_B5.0K<XKS#=]MVFBP# +M40'I@;M2`L]'XD[N8_&_KQ\<0.[>T^;_$6NXG)R/<?;X$?Q/#R"39$+O(]5+ +MDR5!$)KO:405A`.$!;WB=?UL=Q$[FZCZ:3,JHQ32[,N``WX)<,')42M*C!YK +M%.*%%@'7[>3MVXF-"K4$!BZS3SNN><<+/@<X3X.GC3[H@"9IG29.C-0"&LKQ +M'T%KB?\^`UXW89)H^^.`M\%H5A<:8Y7'0.),Q_RB4LTKZLXI\V+@:5<0IGNP +M49-3.Y!7`Y(C`!WA.M)V8)S'6YGQC9?(1K-G`BG[=*GZ?:FI5%HY?>7^G-1R +MC[Q7O>4X]IRI7LE/A*G]=_^#&FO6@5DU'1_W\CX=9Q\]7Q:<Q>PN"LI(7R_* +MU33)R/AW"IGU,:X.J(G<I5ZKX.9+$UWKW2+T1SQ1FPK$;QP@JF/:D5%B"4UL +MW%+.*A`%OG^>O0UG?J::S"P`1,I;<V5/K7VCJQWM!$%>CX=+U%J0624@,BD, +M8>V>1;(G,46<U6AKW<>9P'O&WD<)N>VJ=,Q?,F+_2[@P"N3+6-$&OU[D![AQ +MVDN`J!N37\P%!>DW6)8,.P@<0+"^CG!EX.#J=^Q`;<0&:>I32-^@U7R<S:+X +M/R-'T$#I,3LQ[XM%,48NI=>#'Z=]P)#-NH&'*#"DS*]Q0&DW)Z/OSL-N5.WS +M/3^8>797WE\ZZB^L)Z[_VP3/J`\T=>;%_M.HC('5A'5>D("E3[XWH)J7A8,! +MYJ#KEWQ"\\1=N1]ZV8'OO.PV3ADYTZ@]II_X#F0B?GCF./>A7L%R+-IC>!O/ +ML-KPCRB;G%[BT%Q._T0U\0J#"4QGO-[2/EW<E.3%P+@<=D\%%0Q9<.EQ#[W2 +M;/-C+%IN5L>]G(U>+@X+A5]NHYU$E]P(_LG1N<^OS"T$Z:B/P8/XAHBF$DS+ +M*HG_SDQ9[WOX!H11Z?A%L1>OI)R+Y_MSK,A4C;Z^J2$]*F$=3^BB#J#%]@YL +MX/Q*T2=ZD6<N+X":=3>>$X[N,'/O)7X+M6X'+2?!10M0I\I2LJ)H'@PY7W*> +M,M<+*#==3+2Z_\C+M_I$J#2A+G\Z]>)[LP/XI?S0D&E32)4OKG$KDT\KP13S +MB'KR&X?]ZCS#WMG%Y823`Z-[>O@45!,K.2MLE2@7EY]GOU+-TV+WZD:-+II, +M.VHQY]PWG4O+$4;T#'Z_U&U\P\SUII-7"$Q+U12^91XM[&4>%RGE-%,=?Z$S +MLH4@JK/P9SR/.,<\2^?PY\[G;*@J.)4)S"/2JT@1+C]0R'0V-1R>K)E"+B:3 +M`CNG)T3HSI#+`B`_"&1!I$0N3,YCSS.7NSLS1./D#I(M+T:2%&P6K)L933*& +M:Q=FDFKXM]SYGT4WI;%Y9%G@)R$I?[U\?M:8K0K^T&71%IP4B\8%N('X.B=B +M9RPO,1E1U!B]K'ZR+9R+>+;Q$)L'_3ZHG>@$W/4!8]:^U''>,T_>\W!PW/3O +M,_3J7*Z.O3*O3*7:Z.L-5AJ7:Z.L\JSREVNCK.JLZI=KHZSBK.*7:Z.L)5A* +M7:Z.LVJS:EVNCK-*LTI=KHZS*K,J7:Z.LPJS"EVNCK!58*EVNCK`58"EVNCJ +M_57ZEVNCJ^57REVNCA`7SV1^O\J%=ADKUC55(BP&-:;'9'G^I#L'!,BLY.P3 +M/H5#(FYPGT$&*YT[?4@8C&R'QTP+CA00.-R*5+<:AM?9@4,B@'-WQ,1`N_$Q +M'G^GS\1Z!ZW`F1Y';!O^WK+05?*W^D3<_1,QMV#FM!&9C14=%_C$QU_[]B,P +M9;?]]]`?XB]?]4H?^C<WN-ZK@KSV(718EY(#7/WL'L6\=V+S.U9*(M[(00[L +M_BD,_(`/K4^[[[^)_M#IEIFX$$B<F1/]..^HZG[@X\I[C5-H"X^H?U8R?<0. +M<'':@NG+ZP-\#3/S376`A[\E//7"/YK3#26N:@'O--\F)="VD'5>,X:"+(W> +M3/>9LAI^F3`MUU[<W=T1=74B8Q?)CS,3<WA,[P0QWBDE5P`*2:1HFS1*0WI4 +MNMS!Q`HE:BV\">BYX"UK4#:1/YH;7"!Z7WZ,5=B^8$G,1#44F))N01,4+YXU +M=U7]^(/O%QFY_+$@7/Y8,:GCB&;FY4\EOR9B-'O.L#'(Z9`,;B&)GIXHC@#: +MR1%F))B(%L`7%;Q8P&^L8SP%,PH2M5QI)BYO_,/_S`'>QQTA_U6-!6@"#JFT +M&)&/$$N7BI0*7IA3NXV[X@VLH$:1TCZ&.DO$Q,22'WH/(].Z*^KB[81E?Q!' +MW$;G'(Z/]!Q#`;G+'SS)D3^0#%[U`]T4VHWI!2&8ALS9?OXIWEYB'^AN))W7 +M",+2"$^9N9]@Y%,<#\!4#O#<&A++EHQS+B,YW2#Y)P(6()A*CM4=.&IMF@-. +M5B+F\J9("CIQUT<QB<3T9C+S_3S^-Q)>A(9EKU/>4"=/W"A)J8CSKVW0Z4"V +M4UI#3.+@&,.<0)S!-ZR?64),;^,0S7&DHP9SSA%C6ZQ-_WQNZCM1:J1$Y8D@ +MR;!MDF0%KV/I67&`LVP4W.T8TFF@@2C%T#H=X_+;<!6D]PY;"H`AY)L7(Z@U +M98:\V<E`)A618Z"4@ZFI=[_4KR@2!GA+_/JP%['P-B\GMER/\S*6:V61][T= +MEYOO:'6_>]Z)B^J]Z;+/H?IS/O?A^F&.)Z?S/>AM`BO&Q7L@WM'N^=&U^'C0 +M-RO<F+%1Z.A3`,<4)M>*_A1[C?];'F:;=1YB-W1[_AC\^-RSM=LON4I?!HGG +MP:)TN)F"'FC+VDH8XP#CAOE=^>O+>(A25<R[.GQ/'\0\J9UU[]5.]WJ$2-9G +MKD"-+00:-U&[&4HK1Q(IX8U::J\3U>>N<1%ZT=8BSW6(Q^^%<E6/.$,W`O80 +M$[VEST?:&<11G)Z.NS+I.9FW.7PXPD-C'X@QSC3$7AQW[6B&X),FC'`L=%NE +M%N/C"?[\8-K!N*B.S5*B!4\RL:O[IW$]L?`(2=!S-9>33DC>*HBQB<;DSL*5 +M]&'Q(?-^;*LW"MKQ,H3J3@`(46YP!YID[!B7]T04+I=;<3&;D(A-_C-*8B4X +MRCF+=D\^T^-1O?VQN&ESPY@7#B.?:7F0D%;I+7A(C;BF1CV3C-V-9'Q_DB*M +MPV18O]`!*C(A4G57KJ!TGJ#<I&'C*36@LJQ/#4Z*1_.V_=ZB;FV_E+6'VHCS +MTN$GGHNQ6,9T>[H%V28(C(`R<<=6KRZM7Y'.MLS31[QZ+=DLL68*4<*T^^*S +MP<B9DA"CLMT.NQZT8$1D+\RSW5YU56P6(QI$$N5<CF5)F9;.;@JZ<UHY%JKJ +MVT:M=ZXP5>7;6*EIX,:<V-X5@4&]<8**C)MZ,C3H9PHQNR3).C(-C5QX6^!< +M\12U%K)&)M'3+<-TQG$\&\I+=P[/+CK)?>839Y3B_(M[\E15<EHZ[AH"ACS) +MB5(.9;)1PE9G%2(HS2LSBGL52*H@O0`_;4?39)WOA1Q&<9P&>8MFRBDJ=L.@ +MWY@(!*NG<VY!*WK'-:=N<4_-=7[54"D2PUZ3H9"0]]=@:;?\-YQ9M_'X\W-Q +M^&+EZ,-5#NOK23,V_6PJ``:',^.?RL)0=)%GQ/+!ZJ8TR$O#'G"$S=5>M''W +M1"%C&EA/<-[M&7VH/#^N)=1@Q2;KP.C*X+:G.:$U%I`C2LX#V3#49]7.*5U; +MJ=4W9J&:MS*FUME-RM`QSJ=5#!.+TAJ-"K%1H6SSQ;41YV__)43KTW+B6"SF +MWWI"0HX!=5>3*45^LDV?QN:U3?I%GFB::;DW`&@U",=O-./PMSZKVBM!KFG) +M4*:A5'?PT<_YN_IVRF9IF]\P]AA9F6.UF9,ECY,C0*7)3.;<XT$CQE=4V@5K +MQ%3"#X)$USLXN2;4N=MZYG=N,RV-D%:B,H]QJB?W>ZO.P\-OL:1NA\D<'JKI +MSU-.[M/?;W6%F\R'I.OI<%02CZ[C#3`S.-"N^.2+I)&T49H?D0D.[!!#>##1 +M8Y#12UIG!&=XRV859A6MX0CFW-.6G<4,EB5<><>HQ0J=5=@J./B3<%6N%,S) +MQ/LS3.-#NNMF<SPX^0H?M'*,.:7P]+U4PDQO#?U$!U[J]L%="4:^7/`)8[#[ +M3FYUR]59B*FHW4J=S!UW,@KJH5B:EJ"=>KD:@#A-=ABHYW$2\;]Y.[35<>:V +M-M>=VO@,(TQ(40FP>]TO;KSY"4F^D^VI,I8%QI`QW?!MO"4DRAI9[#-UB`R2 +ME"HY2U`ZF:;ZH@*AR5H$;9:Z;W`2!T(_*^;Q0/RMAVIB+]TX08S*9#95&KE5 +M_MZN++GG;[S`/E.BD#C(J?F8!^A^G>XD7AG\OT"9`'Z:X?4POP.F;^Z&'U%_ +MH@B;]-!'MG862?%FW9NEP#%GF>P.N.>]Q^912J<PWJF^>W;=%1SL2']XQQH/ +MTNGF=`N9\>]+)8I9XWZR)3UJN>HA_L;B27'_"H\A3Q3[U_O*/*('7.NWDO2? +MV/_].%#TP!/7^-NQAR3CGWCMXK]JC8^NZ3'^[=W$</*(2Z]91[[CM\0HK_B; +M^]/23OW&$6_@EUXO3NG-+.T2+KB"TW4*->"G9U(*^KMI85E:SY'0/D=L\IFF +MYUL&&/IM?R/+,O,^<L:NLJJ.OL]M6&"_W2O@8\#Y)#W\O[U2G=JS6*;A6<^I +MXJLS1\O(<S-J?-5D?(S?4<S7*?75G9*8ZL[13SU9T2GXE9[U3$]56+)30*S9 +MJ6FY3#MG&AEV_.J<PYGM5.?5G0J:969@^6N<S#4U"LZ,]=^YF"Z^1+PV$Z^4 +MK.D<?,<S.'P\]W-*I]56>Y<>8YG3./-EWV=4^^K.G<GY7<3*F%)9/4\XXR7; +M^F4X]S-.ZT2L].IS#F1..GT9Q@*L!3HW<OW&GEX*?DJQW*.S6.9Z'1']7N9^ +M-2^<YM"WH*&6G?GO*=2[71F%_!HZ1A@R7?%KN''BM\<]>0\Y@.9?JOE./F-^ +M:WY[?JM\QQYKSR5_,^48R9*???+CXD=!PS:>HC:#3%'OC'5IM]+P."#S@A*C +MY0J3-Y+SA?O-Z0RQL+.NV]&^/[Q+HRYIW9Z;GHU4EUS=0>H?JL%:QQV+=>W8 +MMVC>W;[]NVDPB&[;WSCP6[AOB-\5OCMW+?D-^2\3,4IZ>7AG3/0O4.OSF_FM +MXL]4#?5MUE;M2:\=X")8OC\7C$N]?*KT<I_3+W>:;FVR;F+%?+/X/C"X:QO: +M-+]-K6V5F/C(A:[*KRM?9Y2K1U:R%>/D\Z?9#)CNTOY0DH4_@Y[ZML->U0VM +M=M+0"\;<`<DUDVLRU1AAQH_ZA[Q84-X[X!W(=U%:S;7R;91TF2<0#NDS'8M= +M>UF,SF!Z94]NP4=?__</?7J!_F;!6JJUUX^-P`BU2$EFA/0[CLOR:/J?"B<V +M2VC^@QO$1U5U.TVEA:-5-75UMF7?DY>2F,?&<PU9C_R&ZKZZK:'QJ*\WT]EN +M&LB0[HZ/8UM?8Y%H5.M;,=5K5=M%U1X([_*"I^-39U.PK<T7X:UNEIJ?2:7N +M?HY0?P\]#I*70)XSJ&V5UG:8!\`GH@_M0PV@#ZTCH'ZH4\JNUL@'\%Z:K*X= +MJNTL##:H?]65NOJ;6OM,D`9U`EHT6^RK@1@`X`O6Q`,5H!L$>5]>'=UVO:!& +M]H`="5*.KU]I:[74:G5%ALB/\9C^&\/YL[$!Q7:\/:PB]3O<`O=94K@ZJ;+8 +M6NS(>P[@>P+_`#8-V*#=&#HE.SOW1"_S\;#J_;PS6"$_--4=31&"$2-=+_5@ +M"&.Q7;`B-;?C[/QGMUQ@UMJX%QH`P0=9U6]G8!KP8/7;7I&=;.QKR1RUE&B+ +M!_J/]3^<;4`R1N)/"P_4=>`^GXVVDCOGG017E;4U8;"B?B0_538%S5U(HO." +M_F/UGJ,0[W`=IICNK-(C8CKL+(>NQ$S[`/010#^T%(Z2(K!>JH?&TXHS1L]I +MJ-)K-`[LOI!XC)9F5VMHJJT@_DBX/3$X(TV8*X:T&4V&4HE7Y/^R.!@G<9%@ +M.[-Z#D>35KM*X^P*N'`S2447,9FB[#LNQ(O@(S9F&ZBMK6"U<[[(W@@SMDDG +MM51<KT(?@7-E:V-G)]KTOA/CL=+D<?QH#RKEH?L+D\VF:0VI%YHDEJ)O_MAX +MU=H`^@7VA7_HE(/_+IYAQ.]G8"'6OKJM='T7AE_#.,6EK9R])[R6'`CPLS2Q +M/7A,K%RP;L?^57NMPX!8"5_L@#-G6YJ_?XYH?^5SC;#_RLZ`N[(D\I19GG/6 +MD=R]&^H#JPK[79[2SE4"GW`=ZWM.[T>@[GZ+OA;()CE*!Z#/;$?\):(X>,W: +M&#&1J:_;5.XL\CAY'MD`\@OX3&!_('T*GN11A#]@.+#(D/G</'+2YGDR_%89 +MG+\V[=RLC^6:91.0_\,Q//XD^@.AC+-9X=0>3(5DX\'R/C7GK:5=;@3]R8J4 +M>?E"?5G2`ZV`?R']U-H]%!!!\BKHNAI_F@V=35V>1:8_(FN:TG[@@_U_R0O$ +MH3XRWPAZ`=5-4)ONCJ=31$!9L]*^S>D^D%SH6ZL3V"'O7[C!$MB/D&9$3Y6& +M>;(FZ%A_,GE>T^A&[_)&3^9%LJ8>F?-&B!:E_ZOKME6F<!$NWJZVQM)0P]!Q +MD<GD99]2@_=IW>ET^?EQ,U=E8"M,T>W%(_L-F&\^6S4`Z^UW?"2E37K:4J3= +M'7X=)\@KP.A&%SSH5_P'^B:;J@&F)ROS2KL"@?2PI:U]?1I1_L&2%_);D:5G +MOCM%N]!6;!=$NP5[=DR#^JM;3`&SNPVPF"E>$J'>P!>K6QE3SP1VJ-=+Y_=E +M"WX:5EX_]I;O.4PZ>XM=@:Z%FCBI>KW"ZXRP<J=IN,.!BULTF2Q^^T1`OZ&C +MU.2>G'EFP;`D-BX[P.[T1G'8=AA7[O<5+W4KE=F*Y+J)YZ/7(VC*R6/X)PTE +M&\V*IL;4()FC*+:2?\2=X*N?Y55]+=MI7A<XXPXG=#6FLOVJ3MVLME\QW`_S +M19*5,O@'+SC"Z!R8OXQ.K$?(YV:RT`8BC^28<CPRV89+M'HT(DL9>:-)_G:' +MY%_>&'_`(YKP<.<$:.DB]@R="J>2>/W@?-*S^X@_HR#2`Q1VE@9QGY7#\B'7 +M`0=X(2X8``W(0#BQL*YB1>5-^>F_&=C7`;[M*;.T]/H-/W*,.'(!3\H?PH#S +M9A-;7M//UATM!\DJ!]K!!L5/[N`=(:GQ1YW)3LJDV4<?F&#I9K]Z0YZ2;_+= +MRTV[5UYBSS6'"1=#_>3G=$`>@]4`M#1V.2PXW6_//-#+'G\@)1_`SZ$SO\$: +MHED45-B3^+]+>23S6[<"?VH^3?GI$MFDOT:]P4B_\*1]H]D@+LJZJKD2+#O8 +MT3DT+^C1I:1*2S0R3"+`XEW]8$R9OZ<T=+@J-^YC;`7&T1&.%OX*.>R]E<GQ +M(</3W6&R&C/_:)8-]*#!C58?D\,/H7+A?C:LQY5)1[!H?<L!0'0@Q:`LKRG# +M1[/]S,?Z]H_*3]>/WZ4OL#=UMB+#=DQ]+JG.OE5]I#3=HJ"8>"&`ORCM0_^C +MV`ZPBK5;UYWAD.;)$3X6>S29]#WSW*H'06,_J:_"9OV&;;2]"T*!VA_^#!6@ +MQ8)X\1&M@/-?AL7S?V3\7:G9M9ZD_EA^_UU&$<RTIA`2QHL(,%2E>X8+IABW +ME98Q?VEA+UW\Q'SO:)AOS1O%\T:$]6<J*]SDNEG(,?+6$6CX=W1T9G&.E!XC +M)\B_(&Q9A#<RC1UAA/%KM!7M#MK^5;V5`?9&OL\BDOIB7!8JEHAFS`_-37I( +M8TR$[[VUL`R49EI)R)]@?+%W@)A@5W*P`T:ZJW]2Q,3V%*]P!XVE/T\T2YX# +M0G]Y/&&3K!2;1MK*)9KX>[4:[&>`Z^43+=Q#1;)"?+(V*MG@CKW*9`)@&>`S +M>):+%@BBLF(NG8_(4UBSKMK@7Z2<<68+W+H[_?NS7FLN@7\C]E#N>D(ZEU$M +M>A'AIW"W9ESXT1C:\=<+F[J/D8G$JTOB/RL&I4@HTO2'72N_6SR\ZLES2ZNE +M'J<,JW!^83LK'H=K542X0C<#P1.NJ.T1/,,;=K?B*-;GYE)#TD_RM_]39]*+ +M[+V\_PP6(#D$%2P26M$\L#A/(SCI.]6QLJ\-*YL+)Y0?`=KLUOW*5I;\:)&> +M[*MPQ.,UTI..D?+]"Y+6+[U%/JZ70?(1/%F8=W]#\6[W#*%'K("[,\L\5_X] +M0^^OT.ET_<9VGPRQ';'8)BR?ES>6-E6F=:0\\9$+"*W(]FA.K]W?RH&Z3-A1 +MX4H?H,]\M12F@GCIP)6[2PPP&1.::3@V1VEE-(;1X'Q/>,`U]GATCE(S]"NB +M3\'];<DU)#C(KN'N1HF.XPR;E3LB)X'_Z\&!">_5^X)VZDE8M!/:;2ZC2:ID +M?ZAHMI@7[PFDYP"J_L(5%H@Q3DR_B'-4BP.\]I:6_,.PDO(K[9%Q5'_U4;$3 +M;19E\6[N6HN,RRK2U_X:N>V47UR?O:M.Y=^?"ZT,[@X#!L```,```(```0)1 +M3TK_DO<[`()G-[K//$4R`AL+R^8`!+C%!>V#`N#-XEW`'0$296QF+4QI;G5X +E+4%2378W+6QS"@,3JRFO6QUI@`R+1U$F`P4$`0`````````````` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part04.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part04.rar.uu new file mode 100644 index 000000000000..efba21d5076b --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part04.rar.uu @@ -0,0 +1,76 @@ +begin 644 test_read_format_rar5_multiarchive_solid.part04.rar +M4F%R(1H'`0":-0&C#0$%"`<#!P$!@("`@`#=A_^>,@(+"_>8``2XQ07M@P+K +MD6^(P!T!$F5L9BU,:6YU>"U!4DUV-RUL<PH#$ZLIKUL=:8`,_\5:."$E'J5> +MN64SWV>!5I_7;2651I*@W)FU^2!DC>VEJ42TL3HW*X8;OLDQ.>[-9?)#V/F. +M*2X(JT=&B/=8&2W*DO[.K$-"7=K=U+R6'K@N=J(/[59-VZO7@UA<FC>8!6O. +M`6'W1ZISUK)\P5PW]5N&5U)1_R@#6(3XBNLAEPFKL!10UJ-!2CYD782SXD-= +M:;AJ4ZX.Q>J3#"?35/B.T`ZK;)=L\2ZF@W-\IXE1K8U]2(.Q'T%[6RF;`^97 +MQ@75ZJ:\B'TKWEDDN!?F=1>.2B8C@#W8,32+4SR)@E>_@42;>I%E="<_4D7N +M$=\.V3-DA?^9(+2-27=V<Z;EIV]$UW`_[1-BF>TSAH&Q&;U8!S+J)P7AJCSM +MPO?_N#T;IN\"WC^%T6"*ZE*AJ+$_6E?B65;4=EQNVC:;X3#VS>4_D#^50HF9 +M:Z90C4Z9V/+)[[1%NTKB<`R%;WHJ3`-SLS<,+9#_H6E\LW^&S69VSM#=)S92 +MZ302_(!0EA6(+]?I/@A_IP<N*74=X*":73Z@3;G:UUD')5?F=VH!U7(,HN?D +M)A@$59T_LQ\UX'H;BJ"_&,0I:L35G*4=\8/"Z"R^\HDFZ`2F&5YL5G[%0_YT +MO;BO[2+\B)LD0)EHP?[.S>5+G`WB<RR/;W!M_QEEO]%E/JX%>`S[LEIA[A;] +M2ZG)*NWV9/,[IZVQ-&T+Q,U5KL#5_I\B/P?01_`@W:@K-?9QMAM+7*238+O/ +MFQ`$4#A+Q_\V/;Z`=O1=SJ6K]R7&QM+2QS65RNV']E'GYRMG8:^TVPF_65OW +M3*J-$B[^:]="Y6@M0&I3DA_PD'HA\M$=<J88'_]X^EA_P705Q9UZZ'W*(U*! +MQ+M8CNOI",Z6!!IQLT!D_VA2:=FAP*$S66%6D5PM_%$U96NTS2[A<7X_R7M$ +MKYO7F16`0O>U$ERGF\A_[D76\'?*@HLLK9BRC6Y64Q/M-J=+3Z3N=%WB5]T? +M=%)^&(](=AW-=6+.^#1M2TYRTKQ@7_YIE\AGM+2ZGN.YU&$`7C[ZYZ'G^,!W +M3YWM29OL(`)7H4VU\D#QY_KPFPQ5=9K]AL:[95^S<+'O0@?MKM=MFMN'&>S^ +MAT6CTF:I>YTVG`^\UJ=5K*1]*@Z2=86,L!C)_QCK*'_.D$ZE%5:6Y3N:XX<B +MSG6-:4GQQP5N>7-8"T7C[3AO$CL!O<91K4"X3\#\U.T?9^I!718:FK[<%8[Z +MN#@&+/:TNESW;]XD3\/[`>F3-R'Y8Z?2=QH'I7B_'"@WJTS^8+MX=EF<>?=+ +M=[?WXZ-`&(C6M:M(-_1R"U6UY,_GJ=]U^0T>:R'<9)BJ,K3'VCP$'Z`F0U=' +MD-F/^$'2W;=-1E,AW(\^^P;/+NB/)=H/ST\B7E<!\$;WOC,>]G8;1%F\&9=+ +M(LHZ90E)&JT2'>4/FS`_HNU:A*N5X*='`K_WG>2J\HP,3Z;3SA?SJ?">_16^ +MLF&NP:#MT/7//TSYU?>2[,,=KM%W9:`/Z$N[H_H;0AX/S\.!%96P!R:>=Y55 +M-G6EU_BR0I-L`_%9*P,4?.U]ED7LO@:1#PNHMUK1AU75:TCX6M&DGDNT/^S4 +MI4/1B<5->;A/-Q1L7LWX?$"&5X7\\OG"(*%&W"F<>0G'Q[_-UH,AE<_I-/H, +M^.Q]Q_FHU/:RWM*:Z-,$/&H=.D4AE#[I]L0JC1^?/_M.\>1K5"/GF[VM;WAA +MT/GP;R37:=HU%0):[0B-AL-H)/^L98FI1_`SA8,2O,L-7)F_LJ7WA1A]?9S. +M`%V9"1:3L\OF'N_8J<OEV>?8/,>7=N61K[+L\Q2.2*HR[WOF%3,*,L\SN](Z +M?-UO;OA2]/EJ7727C]IYUCQY5F+3[Y"[6/L#=&FF1,3^Y2Z/#YX)9\?/75PQ +M<Z57-,O$4]I*`HX0W='O*P4</GV`P'<&8BU\_(ZRE]]I1*2+\A<UE'/RRYS" +MQH^?2H8A4P)R[EP1\Q5^7U^KG]\^P)TY0H8JCE!JP\=]*L;"89%(8RT?[YDA +M^OO*!M9[]=)6"91C1.\ODP:]".@0!1\9AH]*H_4]Y1EZ,;7@[6B")Z"0*MYC +M6C/*WTWO[?'Z`$=5WS<$-E7R_28;YZMREB>GTF2]\GB0"*__<-P)ER2[5NQ$ +MLB=P@'Q2O]94!73ZNU]&G9\BX62Y"J:R`5UK(:N_\UG>/*4X1\3M7U8CH>JU +MO7F81QKS#NQ/='=U0GV*L];,^];MRWECL[62[!L1_=AMC#74$=%P8<U9(]S. +M4RU(L-VFUP%4=E%?33=$T>U.SJJX,I29PIMPNJZC.;*Y1W5$\Z'Z`O+25)\A +MS49445R]B5]MLY^3U*7.>_\?F#$'I]CGK2\YJ59C[(5]K.EGJK6KV5;:*]95 +MGS69IRM4.0!1K\AD,DB-.SJ=N\[MJO`?M@B#:1Z^[?N-%3TV@UAD`8U1F,B7 +M2FX/0`1:77K[TC:5_5U_^P@I=6#@:?3Z#/4[ZMT&PT6R[?9]Q8TUI3[C5]]K +M"=>,ZUW.II:4Q6-KK8OT6ML%><6(IW)L3YL08W8"Y?T(K-O6U;AN!4?VS">2 +MOKPG4RN4KZZJ"9XK[2CP>*=F+_'.3:\9C][UW2[/4+F*/5/?O_[DQ5O,]=A% +MD6WC/N3_0GU(;UJGDS=:6/BGZC$1=F97>C>GO,DJZ/9CQJA0UB5_9#9Y7(5@ +M_Y#2O(&+\TG?;W<(-XO$E:$=9)+"[/FG9]0Y[)/IVE%:\[064QHJ:EVN7Z_- +M)8#D^<JV&\N;3_!.]5ME*3SYZP&J]C]688+&OR@:]G7_0RD[3FV_1_Y*_^O[ +M">[BPM3./V,UI8/6<V:\]%0@KJ65<+G6M2S7PM!2[T@.YTK7=YW3Z?.]S3ZL +M_^[71L]$,L%]/90'D"?5M8BCL5.V#^R1>[$]A;48@31)F!]UP*V;!,]$OJ_; +M,):W6=PYO^5`/ET"]W_?W/RX:?\8>841$5PV<M:R,L_[FES;ETSUA8[@!\V& +MQ0U:"6>Z$S#C4,F,'J4@[99[O2;2K"59V=;LSA@=OL:FU*-_(`V[/HV4_T4I +M7ROWKT23]KKNNP/L6U$-!2OLJQ\K\I5RQU@$[R$L<_Q:3O(RS79VNO"*_FRN +M<*=V:(=(RDKVP$W_";>+L<WXR#;^RTU(F4:\[J,]I-(ZY[1YW3ZC04^=I=(& +M$)%\^2N/ZVTRA$XJ;-(#L(JA/\/GY/ZNA_(3%]JN5T?Y+K^B!;5_X^BOW3^V +M/+'493@L>UXDF_E;^!NK!JXAK^GA>F7]/:=6I'UAAGU?`8ZV.??&*O^W0Z-A +MP=RO'3/J*W<[Q,FUYQ9)Y?T1IU-_CLO/U<!#C-N?3%+^KG?F*?/\1GGNSWQ+ +M<9QGUX[40>"">_Q#D-;!4YY[\[AOOW_^YVJE?-XXT?C?_>.G)Y^MOY13Q'RU +MJ9Y,5_=@,C]B>O@LDW:YU:`NB=VE*/M"][T3MS"LOG?+F\&ZY]5I7+3MZYVU +MC=?+@IH%M)*SZY'4IIB_WCQS9Z&3QSCYA,\H^^,Q;/.[UT!?=/\&]W9K]\H$ +MT6>SV::H17F<DUF,IV64RSS`B9_`U\5]'W.B:I,I2!IBRG<9THCH_3D^$)UQ +MB.>Q$.)J$_G'\[`Q,Q/O\4_ZE_\R#0/^K?XN!\V#C'_6@7.4L]B3=Z'\CQ7> +M#D=Q;CJMRF=[72"ZGK8/>I0+VJM:ZOK*,69_=T;7H\:S<;060C.X!VQI8@_& +M!].\+795M>CHSPL:^T2'BN/^I8CS*'Z>^PU6!^E-P(?M/W&4"^OJS;CRK=B% +M$<FR72W?]Y4V0]-PYN5Y_2J[)8G(=BNJS#V!J?58.ZH6&QE#8C@'[Q@0,S$* +MXL_WF0D]+)%#]>"OU;E?STPJ,<V\Z'Z[<<6E9F%7&JSL5.Q;QZO*;<WX`=!V +M$]W@N.*F&'R7_UX'Z#PQ)A/LN2[BHA+/T?R;$7F!L%ROOJ)E0QSIG"")W+Y9 +M\'(3W>=/IF#93M,RONM8?Q/,G^>_BEIZRWU[!V?27F<L!E1S=]2K>`(D(IE) +M=T-33SW';P5;AJSW[PS-,K"9OJV-[[!1=VTNZ(:1QT<RKAV;IS-Q]D]?/(MF +MK^GV$]WWTNZ&MYZN/?W[7@(9]26F5YA=.8WSLNKR>*K=BD-/V"IJE;Z9WGDX +M`%<>8W,83#/YUY;9!8@%]F3Z?ZEY;ER%`I'<]/+O\Q+S7'FJ]/I2:Y$^P97[ +MWV#&7E;^67!2@M'3IZK_I9"_FEW2[UL"2N&95EWKV7O-V)\>ZN%S#5Y+R38K +H/9W66E.Q+(N>XP"]]!;_)_1#+2813H\*W_]K2Z?M5Y0==U91`P4$```` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiple_files.rar.uu b/libarchive/test/test_read_format_rar5_multiple_files.rar.uu new file mode 100644 index 000000000000..3fa8930c9d33 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiple_files.rar.uu @@ -0,0 +1,40 @@ +begin 644 rar5_multiple_files.rar +M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(```Q:>PB<"`POD`@2`(*2#`L:R$WZ` +M!0$)=&5S=#$N8FEN"@,39U^L6QI:GA#*\6`!$&149R]7!6]2222222222222 +M2222222222222222222222222222222222222222222222223]_>QS,[=]KH +MNGVI+KKMQN[YG1YO.?)\8S,,Z<PUS.>9YISXGZ@`@`@!L,/'3AMZ>?EX^'?W +M=O9U]73T<_-R\G'Q</!O[V[N;>UL[&OK:NIIZ6CH9^=FYF7E9.1CXV+B8>%@ +MX%_?7MY=W5S<6]M:VEG96-A7UU;65=54U%/34M)1T5#03\].SDW-3,Q+RTK* +M2<E(R$?'1L9%Q43$0\-"PD'!0,`_OSZ^/;U_?=]CW12X4MWV<4*`S\,`+9T1 +MO$:`AT(6L"P'")V[2T\(?G9H!9@!;.B-TC0$.A"U@6`X1.W*6GA#\Y-`+,`+ +M9T1N$:`AT(6L"P'")VW2T\(?FYH!9@!;.B-LC0$.A"U@6`X1-8_?17YC55]] +MA*^F_%?,.4US5-.M30I^)'_^@$Y];>0G`@,+Y`($@""D@P++KV;Q@`4!"71E +M<W0R+F)I;@H#$WI?K%LM5',7R?)@`1!D5&<O5P5O4DDDDDDDDDDDDDDDDDDD +MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD_?WL<S.W?:Z+I]J2ZZ +M[<;N^9T>;SGR?&,S#.G,-<SGF>:<^)^H`(`(`:F'CIPV]//R\?#O[NWLZ^KI +MZ.?FY>3CXN'@W][=W-O:V=C7UM74T]+1T,_.S<S+RLG(Q\;%Q,/"P<"_OKV\ +MN[JYN+>VM;2SLK&PKZZMK*NJJ:BGIJ6DHZ*AH)^>G9R;FIF8EY:5E).2D9"/ +MCHV,BXJ)B(>&A82#@H&`?WY]?'MZ_ON^Q[HI<*6[[.*%`9^&`%LZ(WB-`0Z$ +M+6!8#A$[=I:>$/SLT`LP`MG1&Z1H"'0A:P+`<(G;E+3PA^<F@%F`%LZ(W"-` +M0Z$+6!8#A$[;I:>$/S<T`LP`MG1&V1H"'0A:P+`<(FL?OHK\QJJ^^PE?3?BO +MF'*:YJFG6IH4_$C__0!S>P"W)P(#"_`"!(`@I(,"V2.QGX`%`0ET97-T,RYB +M:6X*`Q-^7ZQ;T#T``\G^;`$0=%5&+W5]2222222222222222222222222222 +M2222222222222222222222222222222223?M^W[>QSF>.F[VO"\=J2\Z]<SF +M9W/#.\Y_3XQF89XYG6'.Y^_<.?R?J`"`"`&PHPNLKZ>?EX^'?W=O9U]73T<_ +M-R\G'Q</!O[V[N;>UL[&OK:NIIZ6CH9^=FYF7E9.1CXV+B8>%@X%_?7MY=W5 +MS<6]M:VEG96-A7UU;65=54U%/34M)1T5#03\].SDW-3,Q+RTK*2<E(R$?'1L +M9%Q43$0\-"PD'!0,`_OSZ^/;U_?>]3W!#?Q#9>S$&#J;"`FDX$V"95@TP3;D +MPGC2984NWA$H>#3P`Z&(":3@37)E5S0\:;D`-I,L*7;LB4/!IV`=#$!-)P)K +M$RJQH>--R`&TF6%+MT1*'@TZ`.AB`FDX$U2954T/&FY`#:3+"E]3]\$?F.5' +MWVDCZ;\1\Q<ASK4./6AP:?BH__P`,TS-P"<"`POP`@2`(*2#`M0^Q!"`!0$) +M=&5S=#0N8FEN"@,3@5^L6Z$F'1+*_6P!$'151B]U?Y)))))))))))))))))) +M)))))))))))))))))))))))))))))))))))))))))))-^W[=WL<YGCIN]KPO +M':DO.O7,YF=SPSO.?T^,9F&>.9UASN?OW#G\GZ@`@`@!KNF%E5/3S\O'P[^[ +MM[.OJZ>CGYN7DX^+AX-_>W=S;VMG8U];5U-/2T=#/SLW,R\K)R,?&Q<3#PL' +M`O[Z]O+NZN;BWMK6TL[*QL*^NK:RKJJFHIZ:EI*.BH:"?GIV<FYJ9F)>6E92 +M3DI&0CXZ-C(N*B8B'AH6$@X*!@']^?7Q[>O[[WNO<$-_$-E[,08.IL(":3@3 +M8)E6#3!-N3">-)EA2[7(E#P:7`.AB`FDX$UB958T/&FY`#:3+"EV\(E#P:>` +M'0Q`32<":I,JJ:'C3<@!M)EA2[=D2AX-.P#H8@)I.!-0F54-#QIN0`VDRPI? +D=?O@C\QRH^^TD?3?B/F+D.=:AQZT.#3\5'_^`!UW5E$#!00` +` +end diff --git a/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu b/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu new file mode 100644 index 000000000000..4a8acb08c45a --- /dev/null +++ b/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu @@ -0,0 +1,19 @@ +begin 644 rar5_multiple_files_solid.rar +M4F%R(1H'`0`)[\AO"P$%!P0&`0&`@(``&8R4_R<"`POY`@2`(*2#`L:R$WZ` +M'0$)=&5S=#$N8FEN"@,39U^L6QI:GA#)YW4!&&5492;T@%?U\^?/DDDDDDDD +MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDO\\YG#6M +MEU>^U%T\J3G5RSM\>Y[K?1K,SKP\_'=-M[V;Z=_QC-9YYK#.K,Z<_!W``(`( +M`;##?S\>_N[>SKZNGHY^;EY./BX>#?WMW<V]K9V-?6U=33TM'0S\[-S,O*R< +MC'QL7$P\+!P+^^O;R[NKFXM[:UM+.RL;"OKJVLJZJIJ*>FI:2CHJ&@GYZ=G) +MN:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>/__O[_/W[V8]@ +MIG"F6O5\HHC7\D(6UP%MQ8#$T:+90ED3*`YM@Q@Q-FR(B6D(6UP%^8L!B:-% +MLH2R)E`<_(,8,3;R1$2TA"VN`OQ%@,31HME"61,H#GX!C!B;>"(B6D(6UP%] +MXL!B:-%LH2R)E`:8=>%?F.N5]]Q:OIMZKYB^ISUY3E[BG(VOBL7^`#MSXI$G +M`@,+F0`$@""D@P++KV;QP!T!"71E<W0R+F)I;@H#$WI?K%LM5',700T6<``@ +M`@!J7\?WN>#%ZG\PZ\._C^7^`):4S(<G`@,+J@`$@""D@P+9([&?P!T!"71E +M<W0S+F)I;@H#$WY?K%O0/0`#0#TG<``@`@!MU_']\P_O30\K*!](8[@A](8[ +M@A](8[@A[F'7AW\?R_P`C7A3;"<"`PN9``2`(*2#`M0^Q!#`'0$)=&5S=#0N +M8FEN"@,3@5^L6Z$F'1)"#A9P`"`"`&V7\?WL\&+V/YAUX=_'\O\`'7=640,% +"!``` +` +end diff --git a/libarchive/test/test_read_format_rar5_solid.rar.uu b/libarchive/test/test_read_format_rar5_solid.rar.uu new file mode 100644 index 000000000000..f4d06c7a549d --- /dev/null +++ b/libarchive/test/test_read_format_rar5_solid.rar.uu @@ -0,0 +1,27 @@ +begin 644 test_read_format_rar5_solid.rar +M4F%R(1H'`0`)[\AO"P$%!P0&`0&`@(``Y3=C#"8"`PNG`P2P":2#`LUPRGR` +M'0$(=&5S="YB:6X*`Q.+5ZQ;^!BM'LTUHP$H=E560?1@6-L,?'&,&#'QQBRR +MQC&63&#!9999#'QLLLF,8LD)\9"223XR$A)))(2?.222$(220A"220DDA"$O +M?GOFO?-:2E<YGJG3[F>V7.C+W-]O[F][\UT:YS?7KE^_SOEJUK5:Z=?W.<M^ +M:\_>;K=OHWNY6]_X9H`$`!`-2EP'SS]?G[_;Z?/X_#W^[V^SU>GT>?S>7R>+ +MP]_O=SM]KL]CK]7J=+H\_G<WF<OE<GD<;B<+@\#?;W>;O=;G<;?;;39[+8:_ +M7:S5:G4:?3:72:+0Z#/9S-YG,5V7RV5RE54U&3R./QV,IJ6DH\7B<1AL+A)^ +M>G9R;FIG`7^_7R]7F[W:Z7.Y7&WVVV2"H4:^RH@6WA;;=>TLP;<\(C9ES0)A +M"0S24<&6T))M+(Q2K/T7"3U5J_?EK'DC(E)6XI6X%+R18*3*BE"I[J5;*EH[ +MP6QEBW][+H7TO'+E]9@I29*@FBJYLM7.%Q9TO!/$]GRP-`590EM<.76HB_&* +M+!T99VD+ATI>NF*8QI9JG+CY`OEDBH:@M;4EW:HI:K+/UA=.M*3KB,S<;NDG +M`@,+@0$$@""D@P+&LA-^P!T!"71E<W0Q+F)I;@H#$V=?K%L:6IX01F)^:`!` +M!`#5&S!)"T^]G>_Z1)!;Q!;;KVH)@VYX1&S+F@3`$AFDHX,MH23:61C&_!'Q +MI+GZ`VDHC9ES0)?"0S24<&6T))M+(QC>@CXTESU`;241LRYH$O!(9I*.#+:$ +MDVED8I3OA=ECKEQN^6NQ;W5V$7ZXO7RXKWBXHW7_KC/PKJ>2!"<"`PN8``2` +M(*2#`LNO9O'`'0$)=&5S=#(N8FEN"@,3>E^L6RU4<Q=&"15H`$`$`-;/C^_Q +M@8S4_E.^(_Q_,_!H[RSC)P(#"ZD`!(`@I(,"V2.QG\`=`0ET97-T,RYB:6X* +M`Q-^7ZQ;T#T``T8Z)F@`0`0`X3/C^L(?W\V-JV@<2"-8`<2"-8`<2"-8`;Y3 +MOB/\?S/P&*PC^2<"`PN8``2`(*2#`M0^Q!#`'0$)=&5S=#0N8FEN"@,3@5^L +M6Z$F'1)%"A5H`$`$`."SX_HC`QFQ_*=\1_C^9^#GX4Z7)P(#"ZX`!(`@I(," +M\E71N<`=`0ET97-T-2YB:6X*`Q-<9ZQ;&]1%$$0U*V@`0`0`X#/C^L:?W]Y& +M:$N'VH0S0(,/M0AF?/X?:A#,\>P_X4[XC_'\S\!M2\W-)P(#"Y@`!(`@I(," +M_TBD-L`=`0ET97-T-BYB:6X*`Q-?9ZQ;.X_4%T4*%6@`0`0`W[/C^B,#&;'\ +/IWQ'^/YGX!UW5E$#!00` +` +end diff --git a/libarchive/test/test_read_format_rar5_stored.rar.uu b/libarchive/test/test_read_format_rar5_stored.rar.uu new file mode 100644 index 000000000000..405b8795a162 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_stored.rar.uu @@ -0,0 +1,6 @@ +begin 644 rar5_stored.rar +M4F%R(1H'`0`SDK7E"@$%!@`%`0&`@``X,`9C+`(#"YT`!)T`I(,"M$.@E8`` +M`0YH96QL;W=O<FQD+G1X=`H#$WX.JUM6Z0X::&5L;&\@;&EB87)C:&EV92!T +397-T('-U:71E(0H==U91`P4$```` +` +end diff --git a/libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu b/libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu new file mode 100644 index 000000000000..378ded713195 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu @@ -0,0 +1,61 @@ +begin 644 test_read_format_rar5_stored_manyfiles.rar +M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``&F:^=BH"`PN5`P25`^V#`MR*1TF` +M``$,;6%K95]U=64N=&-L"@,3SB:O6P&2/QLC(2]U<W(O8FEN+V5N=B!T8VQS +M:#@N-@H*<')O8R!P86-K7W5U92![9FYA;65]('L*("`@(&5X96,@+W5S<B]B +M:6XO=75E;F-O9&4@)&9N86UE("1F;F%M92`^("1F;F%M92YU=0H@("`@<V5T +M(&]U="!;97AE8R!L<R`M;&$@)&9N86UE("1F;F%M92YU=5T*("`@('!U=',@ +M)&]U=`H*("`@('-E="!O=70@6V5X96,@8W`@+78@)&9N86UE+G5U("]H;VUE +M+V%N=&5K+V1E=B]U;G)A<C4O;&EB87)C:&EV92]L:6)A<F-H:79E+W1E<W0O +M)&9N86UE+G5U70H@("`@<'5T<R`D;W5T"GT*"FEF('LD87)G8R`\(#%]('L* +M("`@('!U=',@(D5N=&5R('1H92!N86UE(&]F('1H92!205(@9FEL92!I;B!T +M:&4@87)G=6UE;G0N(@H@("`@97AI="`Q"GT*"F9O<F5A8V@@9FYA;64@)&%R +M9W8@>PH@("`@<&%C:U]U=64@)&%R9W8*?0JEGN@6*`(#"ZX&!*X&I(,"GL1> +M?H```0IC96)U;&$N='AT"@,3V'*P6X;U-RQ#96)U;&$*"D-O(&EN;F5G;R!C +M96)U;&$N"D]N82!N:64@;6$@=V[$F71R>FYOQ9MC:2X*2F5S="!S;V+$A2!N +M82!W<VMR;\6;(&-E8G5LQ(4L"F1O('-T;W!N:6$@8V5B=6QI8WIN;\6;8VDN +M"D-E8G5L87-T82!N82!Z97=NQ(5T<GHL"F-E8G5L;W=A(&1O(')D>F5N:6$L +M"FUO9\6"86)Y('=E:G)Z9<2'('<@<VEE8FEE"F-E8G5L82!B97H@<')Z97)A +MQ;QE;FEA+@H*5R!N87,@;V)C>GEZ;F$@:2!D>FEK;\6;Q(<*;&5D=VEE('-K +MP[-RQ(4@<')Z>6MR>71A+`II;F9E<FYO('<@;F%S(&EN=&5R;GDL"F%N871O +M;6EA(&=W8<6"=&]W;F$L"F$@=R!C96)U;&D@8V5B=6QA+`IN:64@<&]K<L29 +M=&YE(&IE;&ET82X*3VYA('=I96QE:W)OQ(<@;F%G82P*9&\@9\6"Q)EB:2!I +M='EM<&]D;V)N82X*"D)Y="!N:65S<')Z96-Z;GD@8V5B=6QA+`IU9&%N>2!C +M96)U;&$@='=O<BX*5R!J961N96H@<&\@<')O<W1U(&1R=6=A+`IW('=IQ)EK +M<WIE:B!M;FEE:G-Z82!Z87=A<G1A+`IA('<@;F%S=,29<&YE:B!K;VQE:FYA +M+`IC>GEL:2!T<GIE8VEA(&D@8WIW87)T82X*1&_%FW)O9&MO=V$@9G5G82X* +M16-H;R!ZQ8)OQ;QO;F4@=R!C:,.S<BX*"D-E8G5L82P@=&\@:F$@<F]Z=6UI +M96TZ"FYA:FYA9&]B;FEE:G-Z>2!B<GIU8V@@Q9MW:6%T82X*4V%M('-I92!A +M=7)E;VQA;6D*;F$@=\6"87-NQ(4@8VAW8<6"Q)D@;W!L871A+@I7(&YA<R`M +M('3%@G5S>F-Z92P@;F5R=WDL(,6\><6">2P*Q9ML=7IY(&D@<V5K<F5T;F_% +MFV-I+@I)(&IE<W0@;F%M(&]D;<.S=VEO;GD*:61I;W1Y>FT@9&]S:V]N8<6" +M;\6;8VDN"@HH5VESQ8)A=V$@4WIY;6)O<G-K82D*":B*K28"`PNP"02P":2# +M`LUPRGR```$(=&5S="YB:6X*`Q.+5ZQ;^!BM'@```````````0````4````+ +M````$P```!T````I````-P```$<```!9````;0```(,```";````M0```-$` +M``#O````#P$``#$!``!5`0``>P$``*,!``#-`0``^0$``"<"``!7`@``B0(` +M`+T"``#S`@``*P,``&4#``"A`P``WP,``!\$``!A!```I00``.L$```S!0`` +M?04``,D%```7!@``9P8``+D&```-!P``8P<``+L'```5"```<0@``,\(```O +M"0``D0D``/4)``!;"@``PPH``"T+``"9"P``!PP``'<,``#I#```70T``-,- +M``!+#@``Q0X``$$/``"_#P``/Q```,$0``!%$0``RQ$``%,2``#=$@``:1,` +M`/<3``"'%```&14``*T5``!#%@``VQ8``'47```1&```KQ@``$\9``#Q&0`` +ME1H``#L;``#C&P``C1P``#D=``#G'0``EQX``$D?``#]'P``LR```&LA```E +M(@``X2(``)\C``!?)```(24``.4E``"K)@``<R<``#TH```)*0``URD``*<J +M``!Y*P``32P``",M``#[+0``U2X``+$O``"/,```;S$``%$R```U,P``&S0` +M``,U``#M-0``V38``,<W``"W.```J3D``)TZ``"3.P``BSP``(4]``"!/@`` +M?S\``']```"!00``A4(``(M#``"31```G44``*E&``"W1P``QT@``-E)``#M +M2@```TP``!M-```U3@``44\``&]0``"/40``L5(``-53``#[5```(U8``$U7 +M``!Y6```IUD``-=:```)7```/5T``'->``"K7P``Y6```"%B``!?8P``GV0` +M`.%E```E9P``:V@``+-I``#]:@``26P``)=M``#G;@``.7```(UQ``#C<@`` +M.W0``)5U``#Q=@``3W@``*]Y```1>P``=7P``-M]``!#?P``K8```!F"``"' +M@P``]X0``&F&``#=AP``4XD``,N*``!%C```P8T``#^/``"_D```09(``,63 +M``!+E0``TY8``%V8``#IF0``=YL```>=``"9G@``+:```,.A``!;HP``]:0` +M`)&F```OJ```SZD``'&K```5K0``NZX``&.P```-L@``N;,``&>U```7MP`` +MR;@``'VZ```SO```Z[T``*6_``!AP0``'\,``-_$``"AQ@``9<@``"O*``#S +MRP``O<T``(G/``!7T0``)],``/G4``#-U@``H]@``'O:``!5W```,=X```_@ +M``#OX0``T>,``+7E``";YP``@^D``&WK``!9[0``1^\``#?Q```I\P``'?4` +M`!/W```+^0``!?L```']``#__@``_P`!``$#`0`%!0$`"P<!`!,)`0`="P$` +M*0T!`#</`0!'$0$`61,!`&T5`0"#%P$`FQD!`+4;`0#1'0$`[Q\!``\B`0`Q +M)`$`528!`'LH`0"C*@$`S2P!`/DN`0`G,0$`5S,!`(DU`0"]-P$`\SD!`"L\ +M`0!E/@$`H4`!`-]"`0`?10$`84<!`*5)`0#K2P$`,TX!`'U0`0#)4@$`%U4! +5`&=7`0"Y60$`#5P!`!UW5E$#!00` +` +end diff --git a/libarchive/test/test_read_format_rar5_win32.rar.uu b/libarchive/test/test_read_format_rar5_win32.rar.uu new file mode 100644 index 000000000000..59920490e998 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_win32.rar.uu @@ -0,0 +1,68 @@ +begin 644 test_read_format_rar5_win32.rar +M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``/^"F5B0"`POI`@2P"2#-<,I\@`4` +M"'1E<W0N8FEN"@,"/.U\@0U:U`'*]&4!)V5@5!]5=EV_E))QR<]EEED,<-EE +MDQC%DA.&0DDDX9"0DDDD)..222$(220A"220DDA"$A+-M6][?3,.@'T=`ZX_ +MGKJ?]T'^]]KWW7FO.E_H`$`!`,@@GY^/;U]/+Q[^[LZ^KIZ.?EY./BX>#?W= +MS:V=?6U=33TM#/S<S*R<C'QL7$P\&_O;R[N;BWMK6TL[*QKZZMJZJIIZ6DHZ +M*AH)^=G)N9EY:4DTLE(R$>A0'XZ,BHF'.G#9J&A(*`?GQ[>GAV='-R<6]M:V +MEG96-A7UU;65=54R$W]?R/T"4^B4Y_A$ET6*,&>6%VHX*:8IE!?F0M%VG48R +MPSC`J$?_H)3&:0I?95"L5E8+BP&1:#<N!W7A!L`/,02,@GF85C0+IJ&6V#>; +MAX.`8'(/KF$3H*9V&`\#;>A[O8=7T(W\6$"-&#'G"AY-"8-B^.#F.APB!*GA +MA18[8T/Y\5"`;"$-"(32,9R0+R4`8B?AZB4"`POG`@2`("#&LA-^@`4`"71E +M<W0Q+F)I;@H#`A*5H8`-6M0!R/!C`1!D168O5P5_4DDDDDDDDDDDDDDDDDDD +MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD^_/D;F=O/:[?;Z2Z_N +M[6[OF=&;N]._TF,S#.GS#C<WS/.'/XKG;\@`@`@!L,/'3AM\>_MZ^GGY>/AW +M]W;V=?5T]'/S<O)Q\7#P;^]N[FWM;.QKZVKJ:>EHZ&?G9N9EY63D8^-BXF'A +M8.!?WU[>7=U<W%O;6MI9V5C85]=6UE755-13TU+24=%0T$_/3LY-S4S,2\M* +MRDG)2,A'QT;&1<5$Q$/#0L)!P4#`/[\^^]['VA2X4M7TE0H#.Q@!;-"-XC0$ +M.A"U@6`X1/;M+3@AZ=F@%F`%LT(W2-`0Z$+6!8#A$]N4M."'IR:`68`6S0C< +M(T!#H0M8%@.$3VW2TX(>FYH!9@!;-"-LC0$.A"U@6`X1-8__0K^QS*_>TU/6 +MRJ_(8IKGE-.XIH6GK_HGV@`)6BG`)0(#"^8"!(`@(,NO9O&`!0`)=&5S=#(N +M8FEN"@,"A/;"@`U:U`'/]F(!$&1%9B]7!7]2222222222222222222222222 +M2222222222222222222222222222222222223[\^1N9V\]KM]OI+K^[M;N^9 +MT9N[T[_28S,,Z?,.-S?,\X<_BN=OR`"`"`&IAXZ<-OCW]O7T\_+Q\._N[>SK +MZNGHY^;EY./BX>#?WMW<V]K9V-?6U=33TM'0S\[-S,O*R<C'QL7$P\+!P+^^ +MO;R[NKFXM[:UM+.RL;"OKJVLJZJIJ*>FI:2CHJ&@GYZ=G)N:F9B7EI64DY*1 +MD(^.C8R+BHF(AX:%A(."@8!_?GWWO8^T*7"EJ^DJ%`9V,`+9H1O$:`AT(6L" +MP'")[=I:<$/3LT`LP`MFA&Z1H"'0A:P+`<(GMREIP0].30"S`"V:$;A&@(=" +M%K`L!PB>VZ6G!#TW-`+,`+9H1MD:`AT(6L"P'")K'_Z%?V.97[VFIZV57Y#% +M-<\IIW%-"T]?]$^TVMWAVR4"`POT`@2`("#9([&?@`4`"71E<W0S+F)I;@H# +M`H1PWX`-6M0!RN%P`1!D554O5P5^)))))))))))))))))))))))))))))))) +M))))))))))))))))))))))))))))))SO.\[S<:UGCPYS=>O+LEY]]M9^&\\, +MWO7CO^DQF89X_9MAKF??:-?Q7/7Y`!`!`#848765^/?V]?3S\O'P[^[M[.OJ +MZ>CGYN7DX^+AX-_>W=S;VMG8U];5U-/2T=#/SLW,R\K)R,?&Q<3#PL'`O[Z] +MO+NZN;BWMK6TL[*QL*^NK:RKJJFHIZ:EI*.BH:"?GIV<FYJ9F)>6E923DI&0 +MCXZ-C(N*B8B'AH6$@X*!@']^??=]3[8AOPALOH4&#J;"`FDX$V"95@TP3;@P +MF6DRPI=O")0\&G@!T,0$TG`FN3*KFER;<&$RTF6%+MV1*'@T[`.AB`FDX$UB +M958T/&FX`#:3+"EVZ(E#P:=`'0Q`32<":I,JJ:'C3<`!M)EA2^4__8C^QK(_ +M>\:'K=J/R*(<ZY#CV(<&IZ_]"_:`$R,0$"4"`POT`@2`("#4/L00@`4`"71E +M<W0T+F)I;@H#`@*,&8$-6M0!R^!P`1!D554O5P5^I))))))))))))))))))) +M))))))))))))))))))))))))))))))))))))))))))SO.\YS<:UGCPYS=>O+ +MLEY]]M9^&\\,WO7CO^DQF89X_9MAKF??:-?Q7/7Y`!`!`#7=,+*J?'O[>OIY +M^7CX=_=V]G7U=/1S\W+R<?%P\&_O;NYM[6SL:^MJZFGI:.AGYV;F9>5DY&/C +M8N)AX6#@7]]>WEW=7-Q;VUK:6=E8V%?75M95U5344]-2TE'14-!/ST[.3<U, +MS$O+2LI)R4C(1\=&QD7%1,1#PT+"0<%`P#^_/ON^Z^V(;\(;+Z%!@ZFP@)I. +M!-@F58-,$VX,)EI,L*7:Y$H>#2X!T,0$TG`FL3*K&EB;<&$RTF6%+MX1*'@T +M\`.AB`FDX$U2954T/&FX`#:3+"EV[(E#P:=@'0Q`32<":A,JH:'C3<`!M)EA +M2^=?_L1_8UD?O>-#UNU'Y%$.=<AQ[$.#4]?^A?M`Y!DD9R4"`PO\`@2`("#R +M5=&Y@`4`"71E<W0U+F)I;@H#`BI\2($-6M0!S.]X`1!D554O=6ZDDDDDDDDD +MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG.\[SO-Q +MFM>/..;N7KV[)>??;>LS[/'-[UX[_28S,,\?L,TUS/OM&_Q7/7Y`!`!`#6<+ +MK*J?'O[>OIY^7CX=_=V]G7U=/1S\W+R<?%P\&_O;NYM[6SL:^MJZFGI:.AGY +MV;F9>5DY&/C8N)AX6#@7]]>WEW=7-Q;VUK:6=E8V%?75M95U5344]-2TE'14 +M-!/ST[.3<U,S$O+2LI)R4C(1\=&QD7%1,1#PT+"0<%`P#^_/ON^X^W$)PA)M +MD@@5^H.&2UDI2.+AC"BYI<-/"!MIL`Z/;L$0M;)V8*FSADM9*4CBP8PHL:6# +M3P@;:;`.CVZ!$+6R=&"ILX9+62E(XJ&,**FE0T\(&VFP#H]N01"ULG)@J;.& +M2UDI2.*!C"BAI0-/"!MIL`Z/G'_[B/[&LC][QH>MVH_(HAYUR'CV(>#4]?^@ +M_:`_"MBZ)0(#"_P"!(`@(/](I#:`!0`)=&5S=#8N8FEN"@,"%79G@0U:U`'- +M[G@!$&1552]U;J2222222222222222222222222222222222222222222222 +M222222222222222<[SO.\W&:UX\XYNY>O;LEY]]MZS/L\<WO7CO])C,PSQ^P +MS37,^^T;_%<]?D`$`$`-TX7654^/?V]?3S\O'P[^[M[.OJZ>CGYN7DX^+AX- +M_>W=S;VMG8U];5U-/2T=#/SLW,R\K)R,?&Q<3#PL'`O[Z]O+NZN;BWMK6TL[ +M*QL*^NK:RKJJFHIZ:EI*.BH:"?GIV<FYJ9F)>6E923DI&0CXZ-C(N*B8B'AH +M6$@X*!@']^??=]Q]N(3A"3;)!`K]0<,EK)2D<7#&%%S2X:>$#;38!T>W8(A: +MV3LP5-G#):R4I'%@QA18TL&GA`VTV`='MT"(6MDZ,%39PR6LE*1Q4,845-*A +MIX0-M-@'1[<@B%K9.3!4V<,EK)2D<4#&%%#2@:>$#;38!T?./_W$?V-9'[WC +;0];M1^11#SKD/'L0\&IZ_]!^T!UW5E$#!00` +` +end diff --git a/libarchive/test/test_read_format_xar.c b/libarchive/test/test_read_format_xar.c index b7189eb259e6..4654f8386efb 100644 --- a/libarchive/test/test_read_format_xar.c +++ b/libarchive/test/test_read_format_xar.c @@ -614,6 +614,117 @@ static unsigned char archive11[] = { 0x00,0x00,0x00,0xff,0xff,0x03,0x00,0x37,0xf7,0x06,0x47 }; +/* Verify that a file which is missing timestamp information +has the corresponding timestamps unset. +#How to make e.g. + struct archive *a = archive_write_new(); + archive_write_set_format_xar(a); + archive_write_add_filter_none(a); + size_t used, buffsize = 1500; + char *buff = (char*) malloc(buffsize); + archive_write_open_memory(a, buff, buffsize, &used); + + struct archive_entry *ae = archive_entry_new(); + archive_entry_copy_pathname(ae, "file"); + archive_entry_set_size(ae, 8); + archive_write_header(a, ae); + archive_entry_free(ae); + archive_write_data(a, "12345678", 9); + archive_write_free(a); + + std::cout << std::string(buff, used); + free(buff); + +$./a.out > f12.xar +Verify toc has no mtime/atime sections +$ xar --dump-toc=- -f f12.xar +Dump contents +$ ./a.out | od -t x1 | sed -E -e 's/^0[0-9]+//;s/^ //;s/( )([0-9a-f]{2})/0x\2,/g;$ D' +*/ + +static unsigned char archive12[] = { +0x78,0x61,0x72,0x21,0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x56,0x00,0x00,0x00,0x01,0x78,0x9c,0x55,0x90, +0x41,0x8e,0xc2,0x30,0x0c,0x45,0xf7,0x9c,0x22,0xca,0xbe,0x38,0x2d,0x2c,0x10,0x72, +0xdb,0xdd,0x9c,0x00,0x0e,0x50,0xb5,0x6e,0x89,0x68,0x12,0xd4,0x84,0x11,0x70,0x7a, +0x62,0x17,0x46,0x9a,0x28,0x92,0xbf,0x5f,0xec,0xef,0xc8,0xd8,0x3e,0xdc,0xac,0x7e, +0x69,0x89,0x36,0xf8,0x5a,0x97,0x5b,0xa3,0x15,0xf9,0x3e,0x0c,0xd6,0x4f,0xb5,0x3e, +0x9f,0x7e,0x8a,0x83,0x6e,0x9b,0x0d,0x3e,0xba,0xa5,0xd9,0x28,0x4c,0xa1,0xcf,0x41, +0x61,0xbf,0x50,0x97,0x72,0x47,0x91,0xac,0xa3,0xa6,0x32,0xe5,0xa1,0x28,0x4d,0x61, +0xaa,0x53,0x65,0x8e,0xf9,0xee,0x77,0x08,0xff,0x4b,0xa4,0xe9,0x42,0xfd,0x35,0xde, +0x9d,0x8a,0xe9,0x39,0x53,0xad,0xe3,0xa5,0x2b,0x35,0xbf,0x28,0x0c,0xe3,0x18,0x29, +0x35,0x06,0xe1,0xa3,0x84,0x46,0xfb,0x62,0x73,0x04,0x11,0x6c,0x01,0x5f,0x0f,0xc9, +0x46,0x3b,0x93,0xb2,0x43,0xfe,0xf6,0xc7,0xc6,0x77,0x79,0x14,0x53,0x04,0x91,0x02, +0xd3,0xf3,0xf6,0x85,0x22,0x05,0x5a,0x1f,0x06,0xe2,0x79,0xab,0x10,0xe6,0x04,0xe5, +0x83,0xe0,0xfe,0xe0,0xdd,0x0e,0x5c,0xc6,0x41,0xf2,0x69,0xcd,0xa7,0x35,0x47,0x60, +0x63,0xde,0x0c,0xc8,0x6a,0x10,0x64,0x51,0x6f,0x2a,0x6b,0x63,0x9a,0x01,0x79,0x57, +0x93,0xd4,0x55,0xd4,0x06,0x1c,0x76,0x99,0x10,0x31,0x87,0x52,0x2b,0x16,0xff,0x5b, +0x36,0x78,0x9c,0x55,0x90,0x41,0x8e,0xc2,0x30,0x0c,0x45,0xf7,0x9c,0x22,0xca,0xbe, +0x38,0x2d,0x2c,0x10,0x72 +}; + +static void verify12(struct archive *a, struct archive_entry *ae) +{ + (void)a; /* UNUSED */ + assertEqualInt(archive_entry_mtime_is_set(ae), 0); + assertEqualInt(archive_entry_atime_is_set(ae), 0); + assertEqualInt(archive_entry_mtime(ae), 0); + assertEqualInt(archive_entry_atime(ae), 0); +} + + +/* +#How to make +echo "onetwothree" > f1 +echo "fourfivesize" > f2 +xar -cf archive13.xar f1 f2 +od -t x1 archive13.xar | sed -E -e 's/^0[0-9]+//' | sed -E -e 's/^ //' | sed -E -e 's/( )([0-9a-f]{2})/0x\2,/g;$ D' +*/ + +static unsigned char archive13[] = { +0x78,0x61,0x72,0x21,0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x31, +0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xaa,0x00,0x00,0x00,0x01,0x78,0xda,0xcc,0x95, +0xcb,0x8e,0x9b,0x30,0x14,0x86,0xf7,0x79,0x0a,0xc4,0x9e,0xe2,0x0b,0xbe,0x10,0x39, +0xcc,0xae,0x4f,0x30,0xdd,0x74,0x67,0xec,0x43,0x82,0x86,0x4b,0x04,0x24,0xcd,0xcc, +0xd3,0xd7,0x36,0x30,0x69,0x34,0xd3,0x51,0xda,0x4a,0xa3,0x8a,0x05,0xbf,0x8f,0x7f, +0x9f,0xe3,0x63,0x3e,0x64,0xf5,0x70,0x69,0x9b,0xe8,0x0c,0xc3,0x58,0xf7,0xdd,0x2e, +0xc6,0x5f,0x50,0x1c,0x41,0x67,0x7a,0x5b,0x77,0xfb,0x5d,0xfc,0xed,0xf1,0x6b,0x22, +0xe3,0x87,0x62,0xa3,0x2e,0x7a,0x28,0x36,0x91,0x9a,0x7a,0xe3,0x5e,0x91,0x32,0x03, +0xe8,0xc9,0xad,0x48,0xa6,0xba,0x85,0x82,0x20,0x2c,0x13,0x44,0x12,0xc2,0x1f,0x71, +0xbe,0xc5,0x68,0x4b,0xf3,0xef,0x2a,0xbd,0xf5,0x84,0x55,0x07,0x30,0x4f,0xe3,0xa9, +0x8d,0xc6,0xe9,0xb9,0x81,0x5d,0x3c,0x1e,0x34,0x8e,0xfd,0x4c,0xa4,0xfa,0xaa,0x1a, +0x61,0x2a,0x90,0x4a,0x17,0x15,0xa2,0x63,0xfd,0xe2,0xb3,0xab,0x34,0x08,0x9f,0x22, +0x5d,0x73,0x84,0x51,0x55,0x37,0x10,0xd5,0x76,0x17,0x93,0x25,0x8d,0xd5,0x93,0x0e, +0x2a,0x52,0x0d,0x74,0xfb,0xe9,0x10,0x56,0x2f,0x72,0x8e,0x2f,0xf9,0xb3,0xdb,0x52, +0x4b,0x2d,0x4c,0xae,0xb5,0x5c,0x6c,0x3d,0x89,0x75,0xc3,0xfa,0x78,0x6c,0x6a,0x13, +0xba,0x4a,0x2f,0xc9,0xfe,0xa5,0x3e,0xc6,0xe9,0x62,0xd5,0x83,0x39,0xd4,0x67,0xb0, +0xc9,0xfb,0x4d,0x66,0x92,0x96,0x58,0x70,0x4e,0x09,0xa3,0x02,0x73,0x28,0x05,0xa9, +0x20,0xe7,0xb9,0x34,0x98,0x94,0x0c,0x33,0x8c,0xa4,0xd5,0x22,0xd3,0x2a,0x7d,0x93, +0x68,0xdd,0xcb,0x65,0x1a,0xb4,0x99,0x7e,0x5b,0x81,0xcb,0x9c,0xba,0x22,0x3a,0x93, +0x40,0xb8,0x70,0x0f,0xd7,0x39,0x42,0x34,0x77,0xe9,0x89,0x28,0x2d,0xe7,0x6e,0x20, +0xb4,0xc1,0x2a,0x7d,0x9b,0x69,0x3e,0xbc,0xf4,0xf5,0xf4,0x7c,0x31,0xf2,0x0b,0x15, +0x8c,0x0b,0x21,0x08,0x47,0xd9,0xd2,0xae,0xd2,0xa6,0x59,0xfb,0x36,0x06,0xc6,0xb1, +0x38,0x8d,0x30,0x6c,0xb7,0xc3,0x8f,0x64,0xb3,0x1f,0xfa,0xd3,0xd1,0xc9,0x24,0xd9, +0xf4,0xd3,0x21,0x44,0x9d,0x74,0x7d,0xcd,0xc6,0xb9,0xd2,0xba,0x5e,0x99,0x77,0x00, +0x42,0x72,0x8b,0x99,0x07,0x68,0x05,0x27,0x52,0xed,0x07,0xb6,0xf6,0x6a,0xd3,0x1f, +0xd8,0xf4,0xd5,0xb6,0xaf,0x6d,0x81,0x11,0x72,0x04,0x78,0x15,0x42,0x7e,0xff,0x85, +0xee,0x26,0x78,0x52,0x69,0xd0,0x73,0xf4,0xd5,0x78,0x5a,0x8d,0x6d,0x6f,0xa1,0x40, +0x3c,0xcb,0x5c,0x61,0x2f,0x67,0xec,0xe0,0x5c,0x1b,0xe8,0x7a,0x57,0x9a,0x51,0x77, +0x8e,0xeb,0x30,0x4c,0xd6,0x9d,0xf7,0xe5,0x88,0xe5,0xc2,0xc3,0x38,0x0f,0xc3,0xcc, +0xf4,0x7c,0x84,0xc2,0x33,0xac,0xd2,0x20,0x43,0xb0,0xd3,0x6e,0x9b,0x95,0xe3,0x30, +0x88,0xc0,0xbc,0xb7,0xdc,0xf2,0x8e,0xff,0x98,0x77,0xf2,0xc9,0xbc,0x3b,0x98,0x31, +0x94,0x3c,0x67,0x8e,0xfb,0x8c,0x49,0xc0,0xd2,0x20,0xcc,0x40,0x0b,0x69,0x08,0x35, +0xbc,0x92,0xc2,0x7d,0x25,0x66,0xff,0x9e,0x77,0x60,0x19,0xa6,0xd6,0xd2,0x4c,0xd3, +0x8a,0x72,0x6b,0x44,0x25,0x01,0xa8,0x75,0xbf,0x81,0x81,0x32,0xd3,0xbc,0xd2,0xa2, +0xc4,0xc4,0xfe,0x13,0xef,0xf4,0xd3,0x78,0x47,0xf7,0xf1,0x8e,0xee,0xe3,0x1d,0xfd, +0x27,0xbc,0xe3,0xfc,0x5e,0xde,0xf1,0x3b,0xbc,0x3b,0x97,0xbf,0x6e,0x54,0x1a,0x2e, +0x9f,0x9f,0x00,0x00,0x00,0xff,0xff,0x03,0x00,0xe5,0xbe,0xed,0xcc,0x2a,0x10,0x73, +0x9e,0x84,0x13,0x2e,0x27,0xe1,0x8d,0x6f,0xf8,0x9e,0xae,0xd0,0x0a,0x8f,0x2a,0xca, +0xf7,0x78,0xda,0xcb,0xcf,0x4b,0x2d,0x29,0xcf,0x2f,0xc9,0x28,0x4a,0x4d,0xe5,0x02, +0x00,0x21,0x4c,0x04,0xbf,0x78,0xda,0x4b,0xcb,0x2f,0x2d,0x4a,0xcb,0x2c,0x4b,0x2d, +0xce,0xac,0xe0,0x02,0x00,0x20,0xfa,0x04,0xc5 +}; + enum enc { GZIP, BZIP2 @@ -685,6 +796,55 @@ static void verify(unsigned char *d, size_t s, free(buff); } +static void verifyB(unsigned char *d, size_t s) { + struct archive* a; + struct archive_entry *entry = NULL; + la_int64_t buf_size; + unsigned char *buf; + + assert((a = archive_read_new()) != NULL); + + if(ARCHIVE_OK != archive_read_support_filter_gzip(a)) { + skipping("Unsupported gzip"); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); + return; + } + + if(ARCHIVE_OK != archive_read_support_filter_bzip2(a)) { + skipping("Unsupported bzip2"); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); + return; + } + + if(ARCHIVE_OK != archive_read_support_format_xar(a)) { + skipping("Unsupported xar"); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); + return; + } + + assertA(0 == archive_read_open_memory(a, d, s)); + + // f1, content "onetwothree\n", size 12 bytes + assertA(0 == archive_read_next_header(a, &entry)); + buf_size = archive_entry_size(entry); + assertA(buf_size == 12); + buf = (unsigned char*) malloc(buf_size); + assertA(NULL != buf); + assertA(buf_size == archive_read_data(a, buf, buf_size)); + free(buf); + + // f2, content "fourfivesix\n", size 12 bytes + assertA(0 == archive_read_next_header(a, &entry)); + buf_size = archive_entry_size(entry); + assertA(buf_size == 12); + buf = (unsigned char*) malloc(buf_size); + assertA(NULL != buf); + assertA(buf_size == archive_read_data(a, buf, buf_size)); + free(buf); + + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); +} + DEFINE_TEST(test_read_format_xar) { verify(archive1, sizeof(archive1), verify0, verify1, GZIP); @@ -698,5 +858,6 @@ DEFINE_TEST(test_read_format_xar) verify(archive9, sizeof(archive9), verify0, NULL, GZIP); verify(archive10, sizeof(archive10), verify0, NULL, GZIP); verify(archive11, sizeof(archive11), verify0, NULL, GZIP); + verify(archive12, sizeof(archive12), verify12, NULL, GZIP); + verifyB(archive13, sizeof(archive13)); } - diff --git a/tar/bsdtar.c b/tar/bsdtar.c index 963bd4f9ad5e..e70b3929dea4 100644 --- a/tar/bsdtar.c +++ b/tar/bsdtar.c @@ -137,6 +137,7 @@ main(int argc, char **argv) char compression, compression2; const char *compression_name, *compression2_name; const char *compress_program; + char *tptr; char possible_help_request; char buff[16]; @@ -270,10 +271,15 @@ main(int argc, char **argv) /* libarchive doesn't need this; just ignore it. */ break; case 'b': /* SUSv2 */ - t = atoi(bsdtar->argument); - if (t <= 0 || t > 8192) - lafe_errc(1, 0, - "Argument to -b is out of range (1..8192)"); + errno = 0; + tptr = NULL; + t = (int)strtol(bsdtar->argument, &tptr, 10); + if (errno || t <= 0 || t > 8192 || + *(bsdtar->argument) == '\0' || tptr == NULL || + *tptr != '\0') { + lafe_errc(1, 0, "Invalid or out of range " + "(1..8192) argument to -b"); + } bsdtar->bytes_per_block = 512 * t; /* Explicit -b forces last block size. */ bsdtar->bytes_in_last_block = bsdtar->bytes_per_block; @@ -324,10 +330,13 @@ main(int argc, char **argv) bsdtar->filename = bsdtar->argument; break; case OPTION_GID: /* cpio */ - t = atoi(bsdtar->argument); - if (t < 0) - lafe_errc(1, 0, - "Argument to --gid must be positive"); + errno = 0; + tptr = NULL; + t = (int)strtol(bsdtar->argument, &tptr, 10); + if (errno || t < 0 || *(bsdtar->argument) == '\0' || + tptr == NULL || *tptr != '\0') { + lafe_errc(1, 0, "Invalid argument to --gid"); + } bsdtar->gid = t; break; case OPTION_GNAME: /* cpio */ @@ -623,12 +632,14 @@ main(int argc, char **argv) break; case OPTION_STRIP_COMPONENTS: /* GNU tar 1.15 */ errno = 0; - bsdtar->strip_components = strtol(bsdtar->argument, - NULL, 0); - if (errno) - lafe_errc(1, 0, - "Invalid --strip-components argument: %s", - bsdtar->argument); + tptr = NULL; + t = (int)strtol(bsdtar->argument, &tptr, 10); + if (errno || t < 0 || *(bsdtar->argument) == '\0' || + tptr == NULL || *tptr != '\0') { + lafe_errc(1, 0, "Invalid argument to " + "--strip-components"); + } + bsdtar->strip_components = t; break; case 'T': /* GNU tar */ bsdtar->names_from_file = bsdtar->argument; @@ -648,10 +659,13 @@ main(int argc, char **argv) set_mode(bsdtar, opt); break; case OPTION_UID: /* cpio */ - t = atoi(bsdtar->argument); - if (t < 0) - lafe_errc(1, 0, - "Argument to --uid must be positive"); + errno = 0; + tptr = NULL; + t = (int)strtol(bsdtar->argument, &tptr, 10); + if (errno || t < 0 || *(bsdtar->argument) == '\0' || + tptr == NULL || *tptr != '\0') { + lafe_errc(1, 0, "Invalid argument to --uid"); + } bsdtar->uid = t; break; case OPTION_UNAME: /* cpio */ diff --git a/test_utils/test_main.c b/test_utils/test_main.c index 2ff942c84a44..bb71217b232c 100644 --- a/test_utils/test_main.c +++ b/test_utils/test_main.c @@ -3260,7 +3260,11 @@ test_summarize(int failed, int skips_num) static int test_run(int i, const char *tmpdir) { +#ifdef PATH_MAX + char workdir[PATH_MAX]; +#else char workdir[1024]; +#endif char logfilename[64]; int failures_before = failures; int skips_before = skips; @@ -3509,8 +3513,13 @@ main(int argc, char **argv) const char *progname; char **saved_argv; const char *tmp, *option_arg, *p; - char tmpdir[256], *pwd, *testprogdir, *tmp2 = NULL, *vlevel = NULL; - char tmpdir_timestamp[256]; +#ifdef PATH_MAX + char tmpdir[PATH_MAX]; +#else + char tmpdir[256]; +#endif + char *pwd, *testprogdir, *tmp2 = NULL, *vlevel = NULL; + char tmpdir_timestamp[32]; (void)argc; /* UNUSED */ @@ -3734,8 +3743,15 @@ main(int argc, char **argv) strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp), "%Y-%m-%dT%H.%M.%S", localtime(&now)); - sprintf(tmpdir, "%s/%s.%s-%03d", tmp, progname, - tmpdir_timestamp, i); + if ((strlen(tmp) + 1 + strlen(progname) + 1 + + strlen(tmpdir_timestamp) + 1 + 3) > + (sizeof(tmpdir) / sizeof(char))) { + fprintf(stderr, + "ERROR: Temp directory pathname too long\n"); + exit(1); + } + snprintf(tmpdir, sizeof(tmpdir), "%s/%s.%s-%03d", tmp, + progname, tmpdir_timestamp, i); if (assertMakeDir(tmpdir,0755)) break; if (i >= 999) { |