blob: 5f136a60df74bbc8f0a0a78a7c5537d6c3d52c3a [file] [log] [blame]
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Contributor: Saul Ibarra Corretge <saghul@gmail.com>
# Contributor: Frode Solheim <frode@fs-uae.net>
# TODO :: subprocess.Popen .. specifically list2cmdline in subprocess.py
# needs a fix so it can handle running MSYS2 executables better.
# Arguments should not be quoted in the Windows fashion as-per:
# http://www.daviddeley.com/autohotkey/parameters/parameters.htm
# but instead how Cygwin expects them to be quoted. Checking for
# {cygwin,msys-2.0}.dll in the executable is the only way that I
# can think to do this at present.
# Any double quoted string will cause problems, e.g.
# -DGNOMELOCALEDIR=\"/mingw64/share/locale\"
_realname=python
pkgbase="mingw-w64-${_realname}"
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
_pybasever=3.8
pkgver=${_pybasever}.9
pkgrel=2
provides=("${MINGW_PACKAGE_PREFIX}-python3=${pkgver}")
conflicts=("${MINGW_PACKAGE_PREFIX}-python3"
"${MINGW_PACKAGE_PREFIX}-python2<2.7.16-7")
replaces=("${MINGW_PACKAGE_PREFIX}-python3")
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
license=('PSF')
url="https://www.python.org/"
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
"${MINGW_PACKAGE_PREFIX}-expat"
"${MINGW_PACKAGE_PREFIX}-bzip2"
"${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-mpdecimal"
"${MINGW_PACKAGE_PREFIX}-ncurses"
"${MINGW_PACKAGE_PREFIX}-openssl"
"${MINGW_PACKAGE_PREFIX}-sqlite3"
"${MINGW_PACKAGE_PREFIX}-tcl"
"${MINGW_PACKAGE_PREFIX}-tk"
"${MINGW_PACKAGE_PREFIX}-zlib"
"${MINGW_PACKAGE_PREFIX}-xz")
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc" "${MINGW_PACKAGE_PREFIX}-pkg-config" "autoconf-archive")
options=('makeflags') # 'debug' '!strip' )
source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"
0000-make-_sysconfigdata.py-relocatable.patch
0001-fix-_nt_quote_args-using-subprocess-list2cmdline.patch
0002-restore-setup-config.patch
0100-MINGW-BASE-use-NT-thread-model.patch
0110-MINGW-translate-gcc-internal-defines-to-python-platf.patch
0130-MINGW-configure-MACHDEP-and-platform-for-build.patch
0140-MINGW-preset-configure-defaults.patch
0150-MINGW-configure-largefile-support-for-windows-builds.patch
0170-MINGW-add-srcdir-PC-to-CPPFLAGS.patch
0180-MINGW-init-system-calls.patch
0200-MINGW-build-in-windows-modules-winreg.patch
0210-MINGW-determine-if-pwdmodule-should-be-used.patch
0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch
0260-MINGW-compiler-enable-new-dtags.patch
0290-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch
0300-MINGW-configure-for-shared-build.patch
0310-MINGW-dynamic-loading-support.patch
0330-MINGW-ignore-main-program-for-frozen-scripts.patch
0350-MINGW-setup-_multiprocessing-module.patch
0360-MINGW-setup-select-module.patch
0370-MINGW-setup-_ctypes-module-with-system-libffi.patch
0380-MINGW-defect-winsock2-and-setup-_socket-module.patch
0390-MINGW-exclude-unix-only-modules.patch
0400-MINGW-setup-msvcrt-and-_winapi-modules.patch
0410-MINGW-build-extensions-with-GCC.patch
0420-MINGW-use-Mingw32CCompiler-as-default-compiler-for-m.patch
0430-MINGW-find-import-library.patch
0440-MINGW-setup-_ssl-module.patch
0460-MINGW-generalization-of-posix-build-in-sysconfig.py.patch
0462-MINGW-support-stdcall-without-underscore.patch
0464-use-replace-instead-rename-to-avoid-failure-on-windo.patch
0470-MINGW-avoid-circular-dependency-from-time-module-dur.patch
0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch
0490-MINGW-customize-site.patch
0500-add-python-config-sh.patch
0510-cross-darwin-feature.patch
0520-py3k-mingw-ntthreads-vs-pthreads.patch
0530-mingw-system-libffi.patch
0555-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
0560-mingw-use-posix-getpath.patch
0565-mingw-add-ModuleFileName-dir-to-PATH.patch
0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch
0610-msys-cygwin-semi-native-build-sysconfig.patch
0620-mingw-sysconfig-like-posix.patch
0630-mingw-_winapi_as_builtin_for_Popen_in_cygwinccompiler.patch
0640-mingw-x86_64-size_t-format-specifier-pid_t.patch
0650-cross-dont-add-multiarch-paths-if-cross-compiling.patch
0660-mingw-use-backslashes-in-compileall-py.patch
0670-msys-convert_path-fix-and-root-hack.patch
0690-allow-static-tcltk.patch
0720-mingw-pdcurses_ISPAD.patch
0740-grammar-fixes.patch
0750-builddir-fixes.patch
0760-msys-monkeypatch-os-system-via-sh-exe.patch
0770-msys-replace-slashes-used-in-io-redirection.patch
0800-mingw-install-layout-as-posix.patch
0810-remove_path_max.default.patch
0820-dont-link-with-gettext.patch
0830-ctypes-python-dll.patch
0840-gdbm-module-includes.patch
0850-use-gnu_printf-in-format.patch
0870-mingw-fix-ssl-dont-use-enum_certificates.patch
0890-mingw-build-optimized-ext.patch
0900-cygwinccompiler-dont-strip-modules-if-pydebug.patch
0910-fix-using-dllhandle-and-winver-mingw.patch
0920-mingw-add-LIBPL-to-library-dirs.patch
0970-Add-AMD64-to-sys-config-so-msvccompiler-get_build_version-works.patch
0990-MINGW-link-with-additional-library.patch
1010-install-msilib.patch
1060-dont-include-system-ncurses-path.patch
1620-fix-signal-module-build.patch
1630-build-winconsoleio.patch
1650-expose-sem_unlink.patch
1700-cygpty-isatty.patch
1701-disable-broken-gdbm-module.patch
1800-link-win-resource-files-and-build-pythonw.patch
1810-3.7-mpdec-mingw.patch
1850-disable-readline.patch
1860-fix-isselectable.patch
1870-use-_wcsnicmp-instead-wcsncasecmp.patch
1890-_xxsubinterpretersmodule.patch
2010-configure-have-inet-pton.patch
2030-fix-msvc9-import.patch
2051-set-venv-activate-path-unix.patch
2052-venv-creation-fixes.patch
2060-pass-gen-profile-ldflags.patch
2070-distutils-add-windmc-to-cygwinccompiler.patch
2080-pkg-config-windows-must-link-ext-with-python-lib.patch
3000-importlib-bootstrap-path-sep.patch
3001-pathlib-path-sep.patch
3011-fix-build-testinternalcapi.patch
3020-extend-MS_WINDOWS-flag.patch
4000-clang-arm64.patch
5000-warnings-fixes.patch
smoketests.py)
# Helper macros to help make tasks easier #
apply_patch_with_msg() {
for _patch in "$@"
do
msg2 "Applying ${_patch}"
patch -Nbp1 -i "${srcdir}/${_patch}"
done
}
del_file_exists() {
for _fname in "$@"
do
if [ -f ${_fname} ]; then
rm -rf ${_fname}
fi
done
}
# =========================================== #
prepare() {
cd "${srcdir}/Python-${pkgver}"
plain "Apply Ray Donnelly's should-be-upstreamed patches"
apply_patch_with_msg \
0000-make-_sysconfigdata.py-relocatable.patch \
0001-fix-_nt_quote_args-using-subprocess-list2cmdline.patch \
0002-restore-setup-config.patch
plain "Apply Roumen Petrov's core patches (10)"
apply_patch_with_msg \
0100-MINGW-BASE-use-NT-thread-model.patch \
0110-MINGW-translate-gcc-internal-defines-to-python-platf.patch \
0130-MINGW-configure-MACHDEP-and-platform-for-build.patch \
0140-MINGW-preset-configure-defaults.patch \
0150-MINGW-configure-largefile-support-for-windows-builds.patch \
0170-MINGW-add-srcdir-PC-to-CPPFLAGS.patch \
0180-MINGW-init-system-calls.patch \
0200-MINGW-build-in-windows-modules-winreg.patch \
0210-MINGW-determine-if-pwdmodule-should-be-used.patch
plain "Apply Roumen Petrov's compiler patch (2)"
apply_patch_with_msg \
0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch \
0260-MINGW-compiler-enable-new-dtags.patch
plain "Apply Roumen Petrov's extensions patches (21)"
apply_patch_with_msg \
0290-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch \
0300-MINGW-configure-for-shared-build.patch \
0310-MINGW-dynamic-loading-support.patch \
0330-MINGW-ignore-main-program-for-frozen-scripts.patch \
0350-MINGW-setup-_multiprocessing-module.patch \
0360-MINGW-setup-select-module.patch \
0370-MINGW-setup-_ctypes-module-with-system-libffi.patch \
0380-MINGW-defect-winsock2-and-setup-_socket-module.patch \
0390-MINGW-exclude-unix-only-modules.patch \
0400-MINGW-setup-msvcrt-and-_winapi-modules.patch \
0410-MINGW-build-extensions-with-GCC.patch \
0420-MINGW-use-Mingw32CCompiler-as-default-compiler-for-m.patch \
0430-MINGW-find-import-library.patch \
0440-MINGW-setup-_ssl-module.patch \
0460-MINGW-generalization-of-posix-build-in-sysconfig.py.patch \
0462-MINGW-support-stdcall-without-underscore.patch \
0464-use-replace-instead-rename-to-avoid-failure-on-windo.patch \
0470-MINGW-avoid-circular-dependency-from-time-module-dur.patch \
0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch \
0490-MINGW-customize-site.patch
plain "Apply Ray Donnelly's general/cross patches (42)"
apply_patch_with_msg \
0500-add-python-config-sh.patch \
0510-cross-darwin-feature.patch \
0520-py3k-mingw-ntthreads-vs-pthreads.patch \
0530-mingw-system-libffi.patch \
0555-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch \
0560-mingw-use-posix-getpath.patch \
0565-mingw-add-ModuleFileName-dir-to-PATH.patch \
0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch
apply_patch_with_msg \
0610-msys-cygwin-semi-native-build-sysconfig.patch \
0620-mingw-sysconfig-like-posix.patch \
0630-mingw-_winapi_as_builtin_for_Popen_in_cygwinccompiler.patch \
0640-mingw-x86_64-size_t-format-specifier-pid_t.patch \
0650-cross-dont-add-multiarch-paths-if-cross-compiling.patch \
0660-mingw-use-backslashes-in-compileall-py.patch \
0670-msys-convert_path-fix-and-root-hack.patch \
0690-allow-static-tcltk.patch
apply_patch_with_msg \
0720-mingw-pdcurses_ISPAD.patch \
0740-grammar-fixes.patch \
0750-builddir-fixes.patch \
0760-msys-monkeypatch-os-system-via-sh-exe.patch \
0770-msys-replace-slashes-used-in-io-redirection.patch \
0800-mingw-install-layout-as-posix.patch \
0810-remove_path_max.default.patch \
0820-dont-link-with-gettext.patch \
0830-ctypes-python-dll.patch \
0840-gdbm-module-includes.patch \
0850-use-gnu_printf-in-format.patch \
0870-mingw-fix-ssl-dont-use-enum_certificates.patch \
0890-mingw-build-optimized-ext.patch \
0900-cygwinccompiler-dont-strip-modules-if-pydebug.patch \
0910-fix-using-dllhandle-and-winver-mingw.patch \
0920-mingw-add-LIBPL-to-library-dirs.patch \
0970-Add-AMD64-to-sys-config-so-msvccompiler-get_build_version-works.patch \
0990-MINGW-link-with-additional-library.patch \
1010-install-msilib.patch \
1060-dont-include-system-ncurses-path.patch
plain "New patches added for the update from 3.5.3 to 3.6.1"
apply_patch_with_msg \
1620-fix-signal-module-build.patch \
1630-build-winconsoleio.patch \
1650-expose-sem_unlink.patch
# Extend some isatty calls to check for mintty when checking for
# a terminal output.
# https://github.com/Alexpux/MINGW-packages/issues/2645
apply_patch_with_msg \
1700-cygpty-isatty.patch
# gdbm is broken and as a result breaks dbm/shelve.
# Don't include it so the dbm.dumb backend is used instead,
# like with the official CPython build.
apply_patch_with_msg \
1701-disable-broken-gdbm-module.patch
# https://github.com/Alexpux/MINGW-packages/issues/3139
apply_patch_with_msg \
1800-link-win-resource-files-and-build-pythonw.patch
apply_patch_with_msg \
1810-3.7-mpdec-mingw.patch \
1850-disable-readline.patch \
1860-fix-isselectable.patch \
1870-use-_wcsnicmp-instead-wcsncasecmp.patch \
1890-_xxsubinterpretersmodule.patch
# https://github.com/msys2/MINGW-packages/issues/5184
apply_patch_with_msg 2010-configure-have-inet-pton.patch
# https://github.com/msys2/MINGW-packages/issues/5155
apply_patch_with_msg 2030-fix-msvc9-import.patch
# https://github.com/msys2/MINGW-packages/issues/5001
apply_patch_with_msg 2051-set-venv-activate-path-unix.patch
apply_patch_with_msg 2052-venv-creation-fixes.patch
apply_patch_with_msg 2060-pass-gen-profile-ldflags.patch
apply_patch_with_msg 2070-distutils-add-windmc-to-cygwinccompiler.patch
apply_patch_with_msg 2080-pkg-config-windows-must-link-ext-with-python-lib.patch
# https://github.com/msys2/MINGW-packages/issues/6035
apply_patch_with_msg 3000-importlib-bootstrap-path-sep.patch
apply_patch_with_msg 3001-pathlib-path-sep.patch
apply_patch_with_msg 5000-warnings-fixes.patch
apply_patch_with_msg 3011-fix-build-testinternalcapi.patch
apply_patch_with_msg 3020-extend-MS_WINDOWS-flag.patch
apply_patch_with_msg 4000-clang-arm64.patch
autoreconf -vfi
}
check() {
cd "${srcdir}/build-${CARCH}"
# Some basic tests to ensure nothing major or MSYS2 specific features are
# broken
./python.exe "${srcdir}/smoketests.py"
MSYSTEM= ./python.exe "${srcdir}/smoketests.py"
# make test EXTRATESTOPTS="-v"
}
build() {
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then
export CC=clang CXX=clang++
fi
CFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -D_WIN32_WINNT=0x0601"
CXXFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -D_WIN32_WINNT=0x0601"
CPPFLAGS+=" -I${PREFIX_WIN}/include/ncurses "
declare -a _extra_config
if check_option "debug" "n"; then
CFLAGS+=" -DNDEBUG "
CXXFLAGS+=" -DNDEBUG "
_extra_config+=("--enable-optimizations")
_extra_config+=("--with-lto")
else
CFLAGS+=" -O0 -ggdb"
CXXFLAGS+=" -O0 -ggdb"
_extra_config+=("--with-pydebug")
fi
# Workaround for conftest error on 64-bit builds
export ac_cv_working_tzset=no
# Workaround for when dlfcn exists on Windows, which causes
# some conftests to succeed when they shouldn't (we don't use dlfcn).
export ac_cv_header_dlfcn_h=no
export ac_cv_lib_dl_dlopen=no
export ac_cv_have_decl_RTLD_GLOBAL=no
export ac_cv_have_decl_RTLD_LAZY=no
export ac_cv_have_decl_RTLD_LOCAL=no
export ac_cv_have_decl_RTLD_NOW=no
export ac_cv_have_decl_RTLD_DEEPBIND=no
export ac_cv_have_decl_RTLD_MEMBER=no
export ac_cv_have_decl_RTLD_NODELETE=no
export ac_cv_have_decl_RTLD_NOLOAD=no
[[ -d "${srcdir}/build-${CARCH}" ]] && rm -rf "${srcdir}/build-${CARCH}"
mkdir -p "${srcdir}/build-${CARCH}" && cd "${srcdir}/build-${CARCH}"
MSYSTEM=MINGW ../Python-${pkgver}/configure \
--prefix=${MINGW_PREFIX} \
--host=${MINGW_CHOST} \
--build=${MINGW_CHOST} \
--enable-shared \
--with-nt-threads \
--with-system-expat \
--with-system-ffi \
--with-system-libmpdec \
--without-ensurepip \
--without-c-locale-coercion \
--enable-loadable-sqlite-extensions \
"${_extra_config[@]}" \
OPT=""
# We patch importlib which is embedded in C headers, so regenerate them
make regen-importlib
make
# Add missing venvlauncher files (issue #7014)
# FIXME: build these from PC/launcher.c instead
cp python.exe venvlauncher.exe
cp pythonw.exe venvwlauncher.exe
}
package() {
cd "${srcdir}/build-${CARCH}"
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
MSYSTEM=MINGW \
MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
make -j1 install DESTDIR="${pkgdir}"
if check_option "debug" "n"; then
VERABI=${_pybasever}
else
VERABI=${_pybasever}d
fi
# gdb pretty printers for debugging Python itself; to use:
# python
# sys.path.append('C:/msys64/mingw64/share/gdb/python3')
# import python_gdb
# reload(python_gdb)
# end
[[ -d "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/ ]] || mkdir -p "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/
cp -f python.exe-gdb.py "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/python_gdb.py
rm "${pkgdir}${MINGW_PREFIX}"/bin/2to3
cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/libpython${VERABI}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${VERABI}.dll.a
# Need for building boost python module
cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/libpython${VERABI}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${_pybasever}.dll.a
# some useful "stuff"
install -dm755 "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/{i18n,scripts}
install -m755 "${srcdir}/Python-${pkgver}"/Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/i18n/
install -m755 "${srcdir}/Python-${pkgver}"/Tools/scripts/{README,*py} "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/scripts/
# clean up #!s
find "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/ -name '*.py' | \
xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/env python|"
# clean-up reference to build directory
sed -i "s#${srcdir}/Python-${pkgver}:##" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/Makefile
for fscripts in 2to3-${_pybasever} idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do
sed -i "s|$(cygpath -w ${MINGW_PREFIX} | sed 's|\\|\\\\|g')/bin/python${_pybasever}.exe|/usr/bin/env python${_pybasever}.exe|g" "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts}
done
# Default names are aliases for Python now
cp "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe "${pkgdir}${MINGW_PREFIX}"/bin/python.exe
cp "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe "${pkgdir}${MINGW_PREFIX}"/bin/pythonw.exe
cp "${pkgdir}${MINGW_PREFIX}"/bin/python3-config "${pkgdir}${MINGW_PREFIX}"/bin/python-config
cp "${pkgdir}${MINGW_PREFIX}"/bin/idle3 "${pkgdir}${MINGW_PREFIX}"/bin/idle
cp "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 "${pkgdir}${MINGW_PREFIX}"/bin/pydoc
cp "${pkgdir}${MINGW_PREFIX}"/bin/2to3-${_pybasever} "${pkgdir}${MINGW_PREFIX}"/bin/2to3
sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${VERABI}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${VERABI}/python-config.py
# fix permissons
find ${pkgdir}${MINGW_PREFIX} -type f \( -name "*.dll" -o -name "*.exe" \) | xargs chmod 0755
# Fix up two instances of MSYS2 paths in python-config.sh in-case the final consumer of the results are native executables.
sed -e "s|${MINGW_PREFIX}|${PREFIX_WIN}|" \
-i "${pkgdir}${MINGW_PREFIX}"/bin/python${VERABI}-config \
-i "${pkgdir}${MINGW_PREFIX}"/bin/python3-config \
-i "${pkgdir}${MINGW_PREFIX}"/bin/python-config
# replace paths in sysconfig
sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" \
"${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/lib-dynload/_sysconfigdata*.py \
"${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/smtpd.py
# install venv launchers
mkdir -p "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/venv/scripts/nt
cp venvlauncher.exe "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/venv/scripts/nt/python.exe
cp venvwlauncher.exe "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/venv/scripts/nt/pythonw.exe
}
sha256sums=('5e391f3ec45da2954419cab0beaefd8be38895ea5ce33577c3ec14940c4b9572'
'0ee1acf745d38d41fd098487b9595705fd8f6666d7b154d54ddba32d14f1253b'
'0d27f52bc514dbf2b730f62fa6c18c797a2f4cbad8698d95b15e2774d68e483d'
'd2d73d9fb9db48fecb3a6856e4606f444eaac7637fd4f65e192701e53ac422eb'
'abed03b63e0b498804b44d1cdf8b1ff0c3c4329d3ea9c0323b2512adcacb9b57'
'c2fb01aacfc5d96bdb69ef37282f300ecd8bfa3e11921caa1fce8e871f5a31f8'
'6446e0a5255d317d93c5c55094d4c797cf68fbd14bb08d38c94d7080837d1380'
'8e90c38ac27316781f8853fcbce300526d92732edf4cd08d1dc2a0438fd2d694'
'36f6e8b4320ee79b6ff7e84aefec3aec57293bcbacf08ea7847f3147d459b4a9'
'0a6a1ee72f3aa050f1ff0b8ff88845189309163ef1a5f70808f1ab351348cdae'
'56bdf305a3786ae50871045373e89f2e20df3055e1033197f122ee2c6c8b0966'
'910c84eb01cfe2207ee7fd8549247d9498be8b58c4dbbb6eaa2118037e77730e'
'da5057e58a4866e20c3c604153febb2b57a089d327a954ee5b51830af8204e17'
'265a3c99923b76210e0401bc0cafa88b99328343aec43d64aa94cb84fcdda6d8'
'4f1db216d6a2dad137b07ccdd4b2d71c37169083706addf90c3b0b850312632a'
'f07fc8cc9030c2adf9d7c301eadb8b182aad7f1f2cde102cce730f51a093bbdd'
'9f05613753a8b4ad8c5a6b32c257a318e9ff416345f4ebef3e69f56cf9a51578'
'9269a4d4dab6a0e93b8a0b5ed84c3e93bdfbaf99148e467daf993f6f767c8d45'
'1e89597d37838ad7c18463b83476b3cc6bec1480a052e757b9fbfb3264d4d890'
'03891c0fe4ad90a9926c0e04dc7bb0efbf0022cd6d7746cf2d173dbd739f6142'
'3b85b18922d21e8fc6e07a12e1c8d79c7ec271dddb75ed0fb4f44148b030b360'
'6d0119cd216b944927254598cfec1b85757000ab39f5ba987a86ed2216d6351b'
'ee3f515a3e4060b08b106d788039aa0abfb0424fdf09b613dbab06256405b7ef'
'9c6e64ba27d72e912be3486a0cc65d9f59f5d7ba71fb634fef0860a00311d12c'
'3842234d2c3aeece0416a670c789801ef76ce31841a9c1bfcbb26340aa346712'
'194ef359356d4d58bb15bafe8738c0586350d26e85cc39f5db833f428d67b41d'
'ce63ec2ec57db5fcfae332f8bb413d6c2f8888d29e449b8ae674cbcbe01a5f95'
'f7729d39c8eadce379b2b21cd253c604bfe3e4293945b4d6def9bf0c9b3c8f4f'
'7bd7cac5cc9424b934ae31e6aebf7a960fca8d6ac82778f107a4b16a4e7865c8'
'85ec670b8c0a8fc7a5dcafc19aa697d358c5bfe67cb3d7e17ec8070d4edb16f3'
'4804d854bb9fb3e6ff11c23e420b6ff34266bbc93ce33115129bf838171d49ee'
'a26997445938dd01a03a16a622d19adbc270e679df195407436c97246c96f99a'
'269fc7d93aeefc286009612604385ac2ec1d0304b97c858ffe123c282be8d94c'
'17341d1d4f654f8fbaea905dcf0f4091c66eefa6725b592632413fc77498b6c3'
'47613ba1b262d7c3dbe96ecff5543d0923ad874eec7aa7451e17b0b414691f83'
'1b3a27ea33b66efe3131dcb9951030aa7d4c18f9ec851e89a4582b69f8e673e7'
'90719b6f11be4be6e6df37a9699d87da9f5200090baf0276f0d6aeb717b9e06c'
'840cbf8fafa2cc230dd8a9f667dbad80d54ad573f929f9970252722b9183688b'
'fbae2e8121a027713ce9cf2197b4d702f512e65d028a2a71d4229a4c70f8410d'
'95cf0d30ad7f0f171da79187f1564b8b2796e9d76551cfb442c26ae4d9f1aafe'
'6b37b7d4ecd269abcf92ada988d4be48e0fee1473d6a2cc7d6562812c579095d'
'4bb617a956b783edfb1a4246580172c4f9eb2728ff14730618854a3be7840dad'
'65aff7e831f3bb4b37ed5d4db5dfa75ab6bd582d132dd197e658ccb699dbfac7'
'f2a7b6dce11311e3d318d5729258935a520dcb7ce4dc879ecb1738a2f8bfe434'
'0a81aa7fd5fa0b511fda81ce3345f3199d3be1c83fc660f7f365ef4ede88f3f7'
'27122f9db1be8b1efbccd6ab263313aa66c97dfcd0acb9499434a1fa4ecbb2bd'
'0c93d28bec11968da47b300fe8049d7e32c07c27ccde36ce5f1701306f3cbaf5'
'cef46c7e1afcaf9b6bacf723d5ae22f3f42045eb93bbd9bf5d2b1dba7638028a'
'819bd305734a8fe190afdd399e6158c041c5b9912b436375b2d8dc520f7376ba'
'f33d70071a232a2a3930aa0a2b3f032ef6a17e07acc7412000ceb25bdd339ade'
'5c56aa13fd3f18bd4b327d8cd540ff7fd9e0145e6358d6330103938655d3dfd7'
'ca3eea7fac20d160d9aa3a8e17c0b9ab169cfe16a685f78d2c4d1fd52f8f6784'
'7f2b4c0fcf4a78b983ae3c3a57c47748470370aa4bf17ea9b3ad53802d201afd'
'a55bd3b222d08dc6bb68d4e30ec3e544b303d93330131a310f3a2e20ca93f4b9'
'2b4e223aed8ec9df431806c54bd3df923dbd34805e311006aba3f62682eeca56'
'882d3ac8739184368a30991843db8581e3fd1aee639ddc110ac8cd9e8a89ea1f'
'5d1a85e93b4c7626aa2cfa68201c2d93574647ab6ef0679d3ff4b4cc5c2ba042'
'd06065357943599d515b7ea081da99981b68c4c6a9a5e6bb5e0f1019fea80104'
'b323e44874873591b763b1926cac00d354323d32ff06941eefa415dbdb643cfb'
'26fe3548c0e3997aa09077a5f4d1b4152c98c6c6e7ed64e26557704cc4758f73'
'2b33a669fc281b69d6d3683402ea8d83a86f6bf625a14944d0ac553f414688d3'
'86223efa8b47df1aec5bdecbe5321b29cfbba46e49bf268cf2d646423d8990c2'
'd817ee8eeb04450de6c313db4cde76cca92236e14b60fb0fdb30014250b76fdb'
'a8d7416f819963fb7d2e6800d51d27f5fdc74d804d2b559528eb6867c9e3b88a'
'a492d1366f130122e4e54bee722b65a3d8a2afb30768026e2922edec0d11c9e4'
'16ab24a074e2e06e6cee4bc06373b2b71e5d7990b71f60fa613a6e9bf55d6c12'
'3245dc7c2e65e15c981b5a9c6372210dae582e7c7dfee632ec92a40868f3a63b'
'168172f22ea13879b958179fee20d0b2d78136bc755501f108840a14a0b521f6'
'5f6de8a7646cf755df9f8666346dbcff1005b5165b7b9aea75921344b3eceee6'
'84d2457f89057d1f4c48cfe85a1fe4f397eaa6a4f2dd0bad36beccf9dfdb5819'
'8fe0d9cb7b36faa27d2bb41661f4f9ea0298901d261c5daf702e29e97e46bd4c'
'7e2652a26a8e7198b9b6fd2bfd476c514362f347ba75b1dd014faac443266fd7'
'8ea5b335b10bfb4e492646902db043aee06c953941b3eca7fe24603a3238abf8'
'a9977459a8e6c31f1643da7ede6ac7199dee96559d74188f5c9d3799787ac4fa'
'7bab1dfb1d5b288e3270a61f9b1892c151f1dd1f8e32c07ae6adc37ef14844bb'
'551047905350e113384f99e0e929e9381dc0a4ed514ca4ebe279dcdad798edce'
'afafaa920fee0bb11fb246b37956c71c0e68dadaf09e27ebdcd7097dd2c0f0ef'
'fc6164a90f0ca2a9341aaf4448b4334c3393459ca5cbad6d7149f8bcf70da5fe'
'181672743d9e2449064a1b18764fa400af5d3cd268098e7b7e5069d0b128caa2'
'6f2032347bb40e2ebe9b3a03062147ffa2f656d47c87821623c3b7d46dc15ddb'
'c4670070e546317295071350872e1a00918fd3284609620f84beb44ed54c1ebd'
'17bf1ea04f476ee66555bc4386ffbebfe6be6f75e67947b7f85511241ac46407'
'0ded9e2792b95902d898aba91020103875f2987a9566b353f3e6988b08848f4a'
'd3a0669c83e4df5d33606b4c3443d2c6c71b76cb4f6421d6d54ee630023be6c2'
'a7fbf65a86889f95138360ca4dbd4e51de2e214384ee39740d9c6c381ff997d9'
'ac0400fd7c9ceada1356fe4b7eae3892f35652f09f488b31fd011e0642d373a3'
'6f1a48380445406709ba5c6b4b9c6f0301ea645324feb429f3719dc29b8f28ff'
'b2f4083ada35c18876edf38220d84ca757cf710bc5c2d80ee8b5083dc6c2609f'
'487c92837717975ad6c63fe2a1f8e8c5c9e0554e96000102d83c82f4a77fd9bd'
'f6ecf2edc9468210111d77e396853af49cb8a43d9bc0d20212f88cf2bc33685d'
'6efc39323d14239f2a55576a8b3f32cb79eeefdd5881ba813493c14be2939f3c'
'005381222cfef42ccc21151845b6d43d25c861f35c2192e5e23c2a14df7938f0'
'b6b3f8f2c809dc7ef43bc26306516edf4a5d1e038343ad8c7a45f666011c2e8b'
'717167e9ca5563e04103871a3e489dd1cef77a83c5c6d20e7bda6dced7f3fc42'
'24151631c3e70306ae92ffb8fea38992a752cd0a76771a5e53445f56c2be1f00'
'7188e017a1efba4a87cb64a38b63ed2d8a469e2e74c3fd35b6538d5bc6e370e5')