diff options
Diffstat (limited to 'meta/recipes-support')
152 files changed, 4419 insertions, 10589 deletions
diff --git a/meta/recipes-support/apr/apr-util_1.5.3.bb b/meta/recipes-support/apr/apr-util_1.5.4.bb index 063a787396..6a14d14d41 100644 --- a/meta/recipes-support/apr/apr-util_1.5.3.bb +++ b/meta/recipes-support/apr/apr-util_1.5.4.bb @@ -3,7 +3,7 @@ HOMEPAGE = "http://apr.apache.org/" SECTION = "libs" DEPENDS = "apr expat gdbm" -BBCLASSEXTEND = "native" +BBCLASSEXTEND = "native nativesdk" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=519e0a18e03f7c023070568c14b077bb \ @@ -15,8 +15,8 @@ SRC_URI = "${APACHE_MIRROR}/apr/${BPN}-${PV}.tar.gz \ file://run-ptest \ " -SRC_URI[md5sum] = "71a11d037240b292f824ba1eb537b4e3" -SRC_URI[sha256sum] = "76db34cb508e346e3bf69347c29ed1500bf0b71bcc48d54271ad9d1c25703743" +SRC_URI[md5sum] = "866825c04da827c6e5f53daff5569f42" +SRC_URI[sha256sum] = "976a12a59bc286d634a21d7be0841cc74289ea9077aa1af46be19d1a6e844c19" EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS}/apr-1-config \ --without-odbc \ @@ -28,22 +28,36 @@ EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS}/apr-1-config \ --with-expat=${STAGING_DIR_HOST}${prefix}" -inherit autotools-brokensep lib_package binconfig +inherit autotools lib_package binconfig + +PR = "r1" OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'" do_configure_append() { if [ "${CLASSOVERRIDE}" = "class-target" ]; then - cp ${STAGING_DATADIR}/apr/apr_rules.mk ${S}/build/rules.mk + cp ${STAGING_DATADIR}/apr/apr_rules.mk ${B}/build/rules.mk fi } do_configure_prepend_class-native() { - cp ${STAGING_DATADIR_NATIVE}/apr/apr_rules.mk ${S}/build/rules.mk + mkdir ${B}/build + cp ${STAGING_DATADIR_NATIVE}/apr/apr_rules.mk ${B}/build/rules.mk } do_configure_append_class-native() { - sed -i "s#LIBTOOL=\$(SHELL) \$(apr_builddir)#LIBTOOL=\$(SHELL) ${STAGING_BINDIR_NATIVE}#" ${S}/build/rules.mk + sed -i "s#LIBTOOL=\$(SHELL) \$(apr_builddir)#LIBTOOL=\$(SHELL) ${STAGING_BINDIR_NATIVE}#" ${B}/build/rules.mk # sometimes there isn't SHELL - sed -i "s#LIBTOOL=\$(apr_builddir)#LIBTOOL=${STAGING_BINDIR_NATIVE}#" ${S}/build/rules.mk + sed -i "s#LIBTOOL=\$(apr_builddir)#LIBTOOL=${STAGING_BINDIR_NATIVE}#" ${B}/build/rules.mk +} + +do_configure_prepend_class-nativesdk() { + cp ${STAGING_DATADIR}/apr/apr_rules.mk ${S}/build/rules.mk +} + +do_configure_append_class-nativesdk() { + sed -i "s#\(apr_builddir\)=.*#\1=${STAGING_DATADIR}/build-1#" ${S}/build/rules.mk + sed -i "s#\(apr_builders\)=.*#\1=${STAGING_DATADIR}/build-1#" ${S}/build/rules.mk + sed -i "s#\(top_builddir\)=.*#\1=${STAGING_DATADIR}/build-1#" ${S}/build/rules.mk + sed -i "s#\(LIBTOOL=\$(apr_builddir)\).*#\1/libtool#" ${S}/build/rules.mk } FILES_${PN} += "${libdir}/apr-util-1/apr_dbm_gdbm-1.so" @@ -54,7 +68,7 @@ FILES_${PN}-staticdev += "${libdir}/apr-util-1/apr_dbm_gdbm.a" inherit ptest do_compile_ptest() { - cd ${S}/test + cd ${B}/test oe_runmake } @@ -62,6 +76,6 @@ do_install_ptest() { t=${D}${PTEST_PATH}/test mkdir $t for i in testall data; do \ - cp -r ${S}/test/$i $t; \ + cp -r ${B}/test/$i $t; \ done } diff --git a/meta/recipes-support/apr/apr_1.5.1.bb b/meta/recipes-support/apr/apr_1.5.1.bb index 2720b523f3..985ef67530 100644 --- a/meta/recipes-support/apr/apr_1.5.1.bb +++ b/meta/recipes-support/apr/apr_1.5.1.bb @@ -7,7 +7,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=4dfd4cd216828c8cae5de5a12f3844c8 \ file://include/apr_lib.h;endline=17;md5=ee42fa7575dc40580a9e01c1b75fae96" -BBCLASSEXTEND = "native" +BBCLASSEXTEND = "native nativesdk" SRC_URI = "${APACHE_MIRROR}/apr/${BPN}-${PV}.tar.bz2 \ file://configure_fixes.patch \ @@ -32,11 +32,17 @@ CACHED_CONFIGUREVARS += "apr_cv_mutex_recursive=yes" CACHED_CONFIGUREVARS += "ac_cv_header_netinet_sctp_h=no ac_cv_header_netinet_sctp_uio_h=no" do_configure_prepend() { + # Avoid absolute paths for grep since it causes failures + # when using sstate between different hosts with different + # install paths for grep. + export GREP="grep" + cd ${S} ./buildconf } FILES_${PN}-dev += "${libdir}/apr.exp ${datadir}/build-1/*" +RDEPENDS_${PN}-dev += "bash" #for some reason, build/libtool.m4 handled by buildconf still be overwritten #when autoconf, so handle it again. @@ -85,3 +91,5 @@ do_install_ptest() { cp ${S}/test/testall $t/ cp ${S}/test/tryread $t/ } + +export CONFIG_SHELL="/bin/bash" diff --git a/meta/recipes-support/aspell/aspell_0.60.6.1.bb b/meta/recipes-support/aspell/aspell_0.60.6.1.bb index 56dabd38eb..a4f0e140b2 100644 --- a/meta/recipes-support/aspell/aspell_0.60.6.1.bb +++ b/meta/recipes-support/aspell/aspell_0.60.6.1.bb @@ -15,6 +15,8 @@ PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses" PACKAGES += "libaspell libpspell libpspell-dev aspell-utils" +RDEPENDS_${PN}-utils += "perl" + FILES_${PN}-dbg += "${libdir}/aspell-0.60/.debu*" FILES_libaspell = "${libdir}/libaspell.so.* ${libdir}/aspell*" FILES_aspell-utils = "${bindir}/word-list-compress ${bindir}/aspell-import ${bindir}/run-with-aspell ${bindir}/pre*" diff --git a/meta/recipes-support/atk/at-spi2-atk_2.12.0.bb b/meta/recipes-support/atk/at-spi2-atk_2.14.1.bb index db6dc9032c..23913899ce 100644 --- a/meta/recipes-support/atk/at-spi2-atk_2.12.0.bb +++ b/meta/recipes-support/atk/at-spi2-atk_2.14.1.bb @@ -5,8 +5,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=e9f288ba982d60518f375b5898283886" MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}" SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz" -SRC_URI[md5sum] = "aafc5e1bb17cd3ad440f6350e7a021c1" -SRC_URI[sha256sum] = "3b5467c9f169812bc36a4245355b7deedea0a62eb22153df96ced88dcd1c3633" +SRC_URI[md5sum] = "5c6a085249a6d4e792ead86dca183504" +SRC_URI[sha256sum] = "058f34ea60edf0a5f831c9f2bdd280fe95c1bcafb76e466e44aa0fb356d17bcb" DEPENDS = "dbus glib-2.0 atk at-spi2-core" diff --git a/meta/recipes-support/atk/at-spi2-core_2.12.0.bb b/meta/recipes-support/atk/at-spi2-core_2.14.1.bb index 31e133fe43..1a1ce6c5ee 100644 --- a/meta/recipes-support/atk/at-spi2-core_2.12.0.bb +++ b/meta/recipes-support/atk/at-spi2-core_2.14.1.bb @@ -5,13 +5,16 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=e9f288ba982d60518f375b5898283886" MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}" SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz" -SRC_URI[md5sum] = "b12ad0e0924706f5e7f51216241068ef" -SRC_URI[sha256sum] = "db550edd98e53b4252521459c2dcaf0f3b060a9bad52489b9dbadbaedad3fb89" + +SRC_URI[md5sum] = "a37993cc50d90465c9aeed95e2ac439a" +SRC_URI[sha256sum] = "eef9660b14fdf0fb1f30d1be7c72d591fa7cbb87b00ca3a444425712f46ce657" DEPENDS = "dbus glib-2.0 virtual/libx11 libxi libxtst intltool-native" -inherit autotools gtk-doc pkgconfig +inherit autotools gtk-doc pkgconfig distro_features_check +# depends on virtual/libx11 +REQUIRED_DISTRO_FEATURES = "x11" -EXTRA_OECONF = "--disable-introspection --disable-xevie" +EXTRA_OECONF = "--disable-introspection --disable-xevie --with-dbus-daemondir=${bindir}" FILES_${PN} += "${datadir}/dbus-1/services/*.service" diff --git a/meta/recipes-support/atk/atk_2.12.0.bb b/meta/recipes-support/atk/atk_2.14.0.bb index 9112bbb6c2..e0e9be3be9 100644 --- a/meta/recipes-support/atk/atk_2.12.0.bb +++ b/meta/recipes-support/atk/atk_2.14.0.bb @@ -5,8 +5,8 @@ SECTION = "x11/libs" LICENSE = "GPLv2+ & LGPLv2+" LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \ - file://atk/atkutil.c;endline=20;md5=db21b0bdbef9da4dc6eb122debc9f9bc \ - file://atk/atk.h;endline=20;md5=c58238d688c24387376d6c69d06248a7" + file://atk/atkutil.c;endline=18;md5=6fd31cd2fdc9b30f619ca8d819bc12d3 \ + file://atk/atk.h;endline=18;md5=fcd7710187e0eae485e356c30d1b0c3b" DEPENDS = "glib-2.0" @@ -14,8 +14,8 @@ inherit gnomebase gtk-doc GNOME_COMPRESS_TYPE = "xz" -SRC_URI[archive.md5sum] = "930238dec55fdbf8eda9975b44f07b76" -SRC_URI[archive.sha256sum] = "48a8431974639c5a59c24fcd3ece1a19709872d5dfe78907524d9f5e9993f18f" +SRC_URI[archive.md5sum] = "ecb7ca8469a5650581b1227d78051b8b" +SRC_URI[archive.sha256sum] = "2875cc0b32bfb173c066c22a337f79793e0c99d2cc5e81c4dac0d5a523b8fbad" BBCLASSEXTEND = "native" diff --git a/meta/recipes-support/attr/acl.inc b/meta/recipes-support/attr/acl.inc index bc9fd6dda3..b2bc8bac28 100644 --- a/meta/recipes-support/attr/acl.inc +++ b/meta/recipes-support/attr/acl.inc @@ -36,4 +36,4 @@ do_install_ptest() { cp ${S}/include/builddefs ${S}/include/buildmacros ${S}/include/buildrules ${D}${PTEST_PATH}/include/ } -RDEPENDS_${PN}-ptest = "bash coreutils perl perl-module-filehandle perl-module-getopt-std perl-module-posix shadow" +RDEPENDS_${PN}-ptest = "acl bash coreutils perl perl-module-filehandle perl-module-getopt-std perl-module-posix shadow" diff --git a/meta/recipes-support/attr/attr.inc b/meta/recipes-support/attr/attr.inc index c37d34f23d..28c750f987 100644 --- a/meta/recipes-support/attr/attr.inc +++ b/meta/recipes-support/attr/attr.inc @@ -35,3 +35,5 @@ do_install_ptest() { } RDEPENDS_${PN}-ptest = "coreutils perl-module-filehandle perl-module-getopt-std perl-module-posix" + +BBCLASSEXTEND = "native nativesdk"
\ No newline at end of file diff --git a/meta/recipes-support/attr/ea-acl.inc b/meta/recipes-support/attr/ea-acl.inc index 72f623e593..b17e9b10a4 100644 --- a/meta/recipes-support/attr/ea-acl.inc +++ b/meta/recipes-support/attr/ea-acl.inc @@ -7,7 +7,7 @@ inherit autotools-brokensep gettext # the package comes with a custom config.h.in, it cannot be # overwritten by autoheader -export AUTOHEADER = "true" +EXTRA_AUTORECONF += "--exclude=autoheader" EXTRA_OECONF = "INSTALL_USER=root INSTALL_GROUP=root" EXTRA_OECONF_append_class-native = " --enable-gettext=no" diff --git a/meta/recipes-support/bdwgc/bdwgc_7.2d.bb b/meta/recipes-support/bdwgc/bdwgc_7.4.2.bb index 2ba7aa5a87..23ec95419c 100644 --- a/meta/recipes-support/bdwgc/bdwgc_7.2d.bb +++ b/meta/recipes-support/bdwgc/bdwgc_7.4.2.bb @@ -16,17 +16,15 @@ DESCRIPTION = "The Boehm-Demers-Weiser conservative garbage collector can be\ by replacing malloc with GC_malloc calls, replacing realloc with GC_realloc\ calls, and removing free calls." -HOMEPAGE = "http://www.hpl.hp.com/personal/Hans_Boehm/gc/" +HOMEPAGE = "http://www.hboehm.info/gc/" SECTION = "devel" -LICENSE = "MIT & FSF-Unlimited & GPL-2.0" -LIC_FILES_CHKSUM = "file://README.QUICK;md5=9b9dd874f6940641b6ab19893ee8f1cc \ - file://doc/README;md5=92e7dd0334d1f672b699cd0aca08bef0 \ - file://libatomic_ops/doc/LICENSING.txt;md5=607073e04548eac7d1f763e480477bab" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://README.QUICK;md5=55f5088f90a982fed7af9a4897047ef7" -SRC_URI = "http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-${PV}.tar.gz" +SRC_URI = "http://www.hboehm.info/gc/gc_source/gc-${PV}.tar.gz" -SRC_URI[md5sum] = "91340b28c61753a789eb6077675d87d2" -SRC_URI[sha256sum] = "d9fe0ae8650d43746a48bfb394cab01a319f3809cee19f8ebd16aa985b511c5e" +SRC_URI[md5sum] = "12c05fd2811d989341d8c6d81f66af87" +SRC_URI[sha256sum] = "63320ad7c45460e4a40e03f5aa4c6893783f21a16416c3282b994f933312afa2" FILES_${PN}-doc = "/usr/share" REAL_PV = "${@[d.getVar('PV',1)[:-1], d.getVar('PV',1)][(d.getVar('PV',1)[-1]).isdigit()]}" @@ -35,4 +33,9 @@ S = "${WORKDIR}/gc-${REAL_PV}" ARM_INSTRUCTION_SET = "arm" inherit autotools pkgconfig + +# by default use external libatomic-ops +PACKAGECONFIG ??= "libatomic-ops" +PACKAGECONFIG[libatomic-ops] = "--with-libatomic-ops=yes,--with-libatomic-ops=no,libatomics-ops" + BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-support/beecrypt/beecrypt/add-option-dev-dsp.patch b/meta/recipes-support/beecrypt/beecrypt/add-option-dev-dsp.patch new file mode 100644 index 0000000000..b3298ce2db --- /dev/null +++ b/meta/recipes-support/beecrypt/beecrypt/add-option-dev-dsp.patch @@ -0,0 +1,34 @@ +Add config option --with-dev-dsp. + +Upstream-Status: Pending + +Signed-off-by: Zhang Xiao <xiao.zhang@windriver.com> +--- +--- a/configure.ac ++++ b/configure.ac +@@ -106,6 +106,16 @@ AC_ARG_WITH(python,[ --with-python[[=AR + fi + ]) + ++AC_ARG_WITH(dev-dsp,[ --with-dev-dsp enables dev/dsp for entropy producing. auto for auto-detecting dev/dep on host. [[default=no]]],[ ++ if test "$withval" = yes; then ++ AC_DEFINE([HAVE_DEV_DSP], 1) ++ else ++ if test "$withval" = auto; then ++ ac_detect_dev_dsp=yes ++ fi ++ fi ++ ],[ac_detect_dev_dsp=no]) ++ + # Check for expert mode + if test "$ac_enable_expert_mode" = yes; then + BEE_EXPERT_MODE +@@ -464,7 +474,7 @@ linux*) + ac_cv_have_dev_dsp=no + fi + ]) +- if test "$ac_cv_have_dev_dsp" = yes; then ++ if test "$ac_cv_have_dev_dsp" = yes && test "$ac_detect_dev_dsp" = yes; then + AC_DEFINE([HAVE_DEV_DSP], 1) + fi + ;; diff --git a/meta/recipes-support/beecrypt/beecrypt/run-ptest b/meta/recipes-support/beecrypt/beecrypt/run-ptest index 5bc7460be9..2ee294d991 100644 --- a/meta/recipes-support/beecrypt/beecrypt/run-ptest +++ b/meta/recipes-support/beecrypt/beecrypt/run-ptest @@ -1,5 +1,5 @@ #!/bin/sh cd tests -for i in `ls`; do ./$i; if [ $? == 0 ]; then echo "PASS: $i"; \ +for i in `ls`; do ./$i; if [ $? -eq 0 ]; then echo "PASS: $i"; \ else echo "FAIL: $i"; fi; done diff --git a/meta/recipes-support/beecrypt/beecrypt_4.2.1.bb b/meta/recipes-support/beecrypt/beecrypt_4.2.1.bb index 209b92e653..1e626f154c 100644 --- a/meta/recipes-support/beecrypt/beecrypt_4.2.1.bb +++ b/meta/recipes-support/beecrypt/beecrypt_4.2.1.bb @@ -11,6 +11,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/beecrypt/beecrypt-${PV}.tar.gz \ file://fix-for-gcc-4.7.patch \ file://run-ptest \ file://beecrypt-enable-ptest-support.patch \ + file://add-option-dev-dsp.patch \ " SRC_URI[md5sum] = "8441c014170823f2dff97e33df55af1e" diff --git a/meta/recipes-support/boost/bjam-native_1.55.0.bb b/meta/recipes-support/boost/bjam-native_1.57.0.bb index d85d1a96cb..d85d1a96cb 100644 --- a/meta/recipes-support/boost/bjam-native_1.55.0.bb +++ b/meta/recipes-support/boost/bjam-native_1.57.0.bb diff --git a/meta/recipes-support/boost/boost-1.55.0.inc b/meta/recipes-support/boost/boost-1.57.0.inc index 7daadb6c9e..809419dbac 100644 --- a/meta/recipes-support/boost/boost-1.55.0.inc +++ b/meta/recipes-support/boost/boost-1.57.0.inc @@ -13,7 +13,7 @@ BOOST_P = "boost_${BOOST_VER}" SRC_URI = "${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2" -SRC_URI[md5sum] = "d6eef4b4cacb2183f2bf265a5a03a354" -SRC_URI[sha256sum] = "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52" +SRC_URI[md5sum] = "1be49befbdd9a5ce9def2983ba3e7b76" +SRC_URI[sha256sum] = "910c8c022a33ccec7f088bd65d4f14b466588dda94ba2124e78b8c57db264967" S = "${WORKDIR}/${BOOST_P}" diff --git a/meta/recipes-support/boost/boost.inc b/meta/recipes-support/boost/boost.inc index 0a44d79746..6b42133aed 100644 --- a/meta/recipes-support/boost/boost.inc +++ b/meta/recipes-support/boost/boost.inc @@ -5,6 +5,8 @@ DEPENDS = "bjam-native zlib bzip2" ARM_INSTRUCTION_SET = "arm" BOOST_LIBS = "\ + atomic \ + chrono \ date_time \ filesystem \ graph \ @@ -90,7 +92,8 @@ EQD = '\"' #boost.bb: "... '-sGCC=... '${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}config${EQD}'${SQD} ..." BJAM_CONF = "${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}boost/config/platform/${TARGET_OS}.hpp${EQD}'${SQD}" -BJAM_TOOLS = "-sTOOLS=gcc \ +BJAM_TOOLS = "--ignore-site-config \ + '-sTOOLS=gcc' \ '-sGCC=${CC} '${BJAM_CONF} \ '-sGXX=${CXX} '${BJAM_CONF} \ '-sGCC_INCLUDE_DIRECTORY=${STAGING_INCDIR}' \ @@ -106,21 +109,29 @@ BJAM_TOOLS = "-sTOOLS=gcc \ def get_boost_parallel_make(bb, d): pm = d.getVar('PARALLEL_MAKE', True) if pm: - # people are usually using "-jN" or "-j N", but let it work with something else appended to it - import re - pm_prefix = re.search("\D+", pm) - pm_val = re.search("\d+", pm) - if pm_prefix is None or pm_val is None: - bb.error("Unable to analyse format of PARALLEL_MAKE variable: %s" % pm) - pm_nval = min(64, int(pm_val.group(0))) - return pm_prefix.group(0) + str(pm_nval) + pm[pm_val.end():] - else: - return "" + # look for '-j' and throw other options (e.g. '-l') away + # because they might have different meaning in bjam + pm = pm.split() + while pm: + v = None + opt = pm.pop(0) + if opt == '-j': + v = pm.pop(0) + elif opt.startswith('-j'): + v = opt[2:].strip() + else: + v = None + + if v: + v = min(64, int(v)) + return '-j' + str(v) + + return "" BOOST_PARALLEL_MAKE = "${@get_boost_parallel_make(bb, d)}" BJAM_OPTS = '${BOOST_PARALLEL_MAKE} \ ${BJAM_TOOLS} \ - -sBOOST_BUILD_USER_CONFIG=${S}/tools/build/v2/user-config.jam \ + -sBOOST_BUILD_USER_CONFIG=${S}/tools/build/example/user-config.jam \ --builddir=${S}/${TARGET_SYS} \ --disable-icu \ ${BJAM_EXTRA}' @@ -132,12 +143,12 @@ do_boostconfig() { cp -f boost/config/platform/linux.hpp boost/config/platform/linux-gnueabi.hpp # D2194:Fixing the failure of "error: duplicate initialization of gcc with the following parameters" during compilation. - if ! grep -qe "^using gcc : 4.3.1" ${S}/tools/build/v2/user-config.jam + if ! grep -qe "^using gcc : 4.3.1" ${S}/tools/build/example/user-config.jam then - echo 'using gcc : 4.3.1 : ${CXX} : <cflags>"${CFLAGS}" <cxxflags>"${CXXFLAGS}" <linkflags>"${LDFLAGS}" ;' >> ${S}/tools/build/v2/user-config.jam + echo 'using gcc : 4.3.1 : ${CXX} : <cflags>"${CFLAGS}" <cxxflags>"${CXXFLAGS}" <linkflags>"${LDFLAGS}" ;' >> ${S}/tools/build/example/user-config.jam fi - echo "using python : ${PYTHON_BASEVERSION} : : ${STAGING_INCDIR}/python${PYTHON_BASEVERSION} ;" >> ${S}/tools/build/v2/user-config.jam + echo "using python : ${PYTHON_BASEVERSION} : : ${STAGING_INCDIR}/python${PYTHON_BASEVERSION} ;" >> ${S}/tools/build/example/user-config.jam CC="${BUILD_CC}" CFLAGS="${BUILD_CFLAGS}" ./bootstrap.sh --with-bjam=bjam --with-toolset=gcc --with-python-root=${PYTHON_ROOT} sed -i '/^using python/d' project-config.jam diff --git a/meta/recipes-support/boost/boost_1.55.0.bb b/meta/recipes-support/boost/boost_1.55.0.bb deleted file mode 100644 index b199c88577..0000000000 --- a/meta/recipes-support/boost/boost_1.55.0.bb +++ /dev/null @@ -1,4 +0,0 @@ -include boost-${PV}.inc -include boost.inc - -SRC_URI += "file://arm-intrinsics.patch" diff --git a/meta/recipes-support/boost/boost_1.57.0.bb b/meta/recipes-support/boost/boost_1.57.0.bb new file mode 100644 index 0000000000..c09d5f431f --- /dev/null +++ b/meta/recipes-support/boost/boost_1.57.0.bb @@ -0,0 +1,6 @@ +include boost-${PV}.inc +include boost.inc + +SRC_URI += "\ + file://arm-intrinsics.patch \ +" diff --git a/meta/recipes-support/ca-certificates/ca-certificates/default-sysroot.patch b/meta/recipes-support/ca-certificates/ca-certificates/default-sysroot.patch index 7e0ee4cd24..6a5d6da676 100644 --- a/meta/recipes-support/ca-certificates/ca-certificates/default-sysroot.patch +++ b/meta/recipes-support/ca-certificates/ca-certificates/default-sysroot.patch @@ -4,13 +4,15 @@ update-ca-certificates: find SYSROOT relative to its own location This makes the script relocatable. ---- ca-certificates-20130119.orig/sbin/update-ca-certificates -+++ ca-certificates-20130119/sbin/update-ca-certificates -@@ -37,11 +37,44 @@ do +Index: git/sbin/update-ca-certificates +=================================================================== +--- git.orig/sbin/update-ca-certificates ++++ git/sbin/update-ca-certificates +@@ -37,6 +37,39 @@ do shift done - --CERTSCONF=$SYSROOT/etc/ca-certificates.conf + ++ +if [ -z "$SYSROOT" ]; then + local_which () { + if [ $# -lt 1 ]; then @@ -43,13 +45,6 @@ This makes the script relocatable. + SYSROOT= + fi +fi -+ + CERTSCONF=$SYSROOT/etc/ca-certificates.conf CERTSDIR=$SYSROOT/usr/share/ca-certificates -+CERTSCONF=$SYSROOT/etc/ca-certificates.conf -+ETCCERTSDIR=$SYSROOT/etc/ssl/certs LOCALCERTSDIR=$SYSROOT/usr/local/share/ca-certificates - CERTBUNDLE=ca-certificates.crt --ETCCERTSDIR=$SYSROOT/etc/ssl/certs - - cleanup() { - rm -f "$TEMPBUNDLE" diff --git a/meta/recipes-support/ca-certificates/ca-certificates_20130610.bb b/meta/recipes-support/ca-certificates/ca-certificates_20141019.bb index c9ef07bfb7..e5a482138f 100644 --- a/meta/recipes-support/ca-certificates/ca-certificates_20130610.bb +++ b/meta/recipes-support/ca-certificates/ca-certificates_20141019.bb @@ -5,20 +5,21 @@ This derived from Debian's CA Certificates." HOMEPAGE = "http://packages.debian.org/sid/ca-certificates" SECTION = "misc" LICENSE = "GPL-2.0+ & MPL-2.0" -LIC_FILES_CHKSUM = "file://debian/copyright;md5=d8fc4ed45f01c31c87c9b496d4babcae" +LIC_FILES_CHKSUM = "file://debian/copyright;md5=48d2baf97986999e776b43c8dd9e0c5a" # This is needed to ensure we can run the postinst at image creation time DEPENDS = "ca-certificates-native" DEPENDS_class-native = "" -# tag: debian/20130610 -SRCREV = "9f3c12784eaee1e2b005a23ce8b5c38e1e851404" +# tag: debian/20140325 + 2 +SRCREV = "2b8a047c78aadbecd90bf8e49ccf68898a211610" SRC_URI = "git://anonscm.debian.org/collab-maint/ca-certificates.git \ file://0001-update-ca-certificates-remove-c-rehash.patch \ file://0002-update-ca-certificates-use-SYSROOT.patch \ file://default-sysroot.patch \ file://sbindir.patch" + S = "${WORKDIR}/git" inherit allarch diff --git a/meta/recipes-support/consolekit/consolekit/add-polkit-configure-argument.patch b/meta/recipes-support/consolekit/consolekit/add-polkit-configure-argument.patch new file mode 100644 index 0000000000..ad879d466b --- /dev/null +++ b/meta/recipes-support/consolekit/consolekit/add-polkit-configure-argument.patch @@ -0,0 +1,33 @@ +Upstream-Status: Pending + +--- ConsoleKit-0.4.6.orig/configure.ac ++++ ConsoleKit-0.4.6/configure.ac +@@ -56,10 +56,24 @@ PKG_CHECK_MODULES(CONSOLE_KIT, + gthread-2.0 >= $GLIB_REQUIRED_VERSION + ) + +-PKG_CHECK_MODULES(POLKIT, +- polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION, +- have_polkit=yes, +- have_polkit=no) ++AC_ARG_WITH([polkit], ++ [AS_HELP_STRING([--with-polkit], ++ [support PolicyKit @<:@default=check@:>@])], ++ [], ++ [with_polkit=check]) ++ ++AS_IF([test "x$with_polkit" != xno], ++ [PKG_CHECK_MODULES(POLKIT, ++ polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION, ++ have_polkit=yes, ++ [if test "x$with_polkit" != xcheck; then ++ AC_MSG_FAILURE( ++ [--with-polkit was given, but test for polkit failed]) ++ else ++ have_polkit=no ++ fi ++ ])]) ++ + if test "x$have_polkit" = "xyes" ; then + AC_DEFINE(HAVE_POLKIT, [], [Define if we have polkit]) + fi diff --git a/meta/recipes-support/consolekit/consolekit_0.4.6.bb b/meta/recipes-support/consolekit/consolekit_0.4.6.bb index 98516166cf..66a892a7df 100644 --- a/meta/recipes-support/consolekit/consolekit_0.4.6.bb +++ b/meta/recipes-support/consolekit/consolekit_0.4.6.bb @@ -6,13 +6,17 @@ LICENSE = "GPLv2+" LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ file://src/main.c;endline=21;md5=0a994e09769780220163255d8f9071c3" -DEPENDS = "glib-2.0 dbus dbus-glib virtual/libx11" +DEPENDS = "glib-2.0 glib-2.0-native dbus dbus-glib virtual/libx11" RDEPENDS_${PN} += "base-files" -inherit autotools pkgconfig +inherit autotools pkgconfig distro_features_check +# depends on virtual/libx11 +REQUIRED_DISTRO_FEATURES = "x11" SRC_URI = "http://www.freedesktop.org/software/ConsoleKit/dist/ConsoleKit-${PV}.tar.xz \ - file://sepbuildfix.patch" + file://sepbuildfix.patch \ + file://add-polkit-configure-argument.patch \ +" SRC_URI[md5sum] = "611792b4d616253a5bdec9175f8b7678" SRC_URI[sha256sum] = "b41d17e06f80059589fbeefe96ad07bcc564c49e65516da1caf975146475565c" @@ -23,8 +27,7 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)} ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)}" PACKAGECONFIG[pam] = "--enable-pam-module --with-pam-module-dir=${base_libdir}/security,--disable-pam-module,libpam" -# No option to turn it on or off, so rely on the build dependency for now. -PACKAGECONFIG[policykit] = ",,polkit" +PACKAGECONFIG[policykit] = "--with-polkit,--without-polkit,polkit" PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--with-systemdsystemunitdir=" FILES_${PN} += "${localstatedir}/log/ConsoleKit ${exec_prefix}/lib/ConsoleKit \ diff --git a/meta/recipes-support/createrepo/createrepo_0.4.11.bb b/meta/recipes-support/createrepo/createrepo_0.4.11.bb index 159a6c4b27..49b45fc3b8 100644 --- a/meta/recipes-support/createrepo/createrepo_0.4.11.bb +++ b/meta/recipes-support/createrepo/createrepo_0.4.11.bb @@ -5,6 +5,7 @@ LICENSE = "GPLv2+" LIC_FILES_CHKSUM = "file://COPYING;md5=18810669f13b87348459e611d31ab760" DEPENDS_class-native += "libxml2-native rpm-native" +RDEPENDS_${PN}_class-target = "libxml2-python" PR = "r9" diff --git a/meta/recipes-support/curl/curl/generate_code_for_disable_manual.patch b/meta/recipes-support/curl/curl/generate_code_for_disable_manual.patch deleted file mode 100644 index dc755e44ad..0000000000 --- a/meta/recipes-support/curl/curl/generate_code_for_disable_manual.patch +++ /dev/null @@ -1,38 +0,0 @@ -Upsteam-Status Backport [fixed in 7.37.0] -commit 38d582ff541353d738858299d4a2b78bafac03ed -Author: Daniel Stenberg <daniel@haxx.se> -Date: Wed Mar 26 13:22:10 2014 +0100 - - mkhelp: generate code for --disable-manual as well - - This allows configure --disable-manual to run and build without having - to regenerate the src/tool_hugehelp.c file which otherwise is necessary - since we ship tarballs with that file present. - - Reported-by: Remi Gacogne - Bug: http://curl.haxx.se/bug/view.cgi?id=1350 - -diff --git a/src/mkhelp.pl b/src/mkhelp.pl -index 444b669..7ed86f7 100644 ---- a/src/mkhelp.pl -+++ b/src/mkhelp.pl -@@ -6,7 +6,7 @@ - # | (__| |_| | _ <| |___ - # \___|\___/|_| \_\_____| - # --# Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. -+# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. - # - # This software is licensed as described in the file COPYING, which - # you should have received as part of this distribution. The terms -@@ -256,6 +256,10 @@ foot(); - - sub foot { - print <<FOOT -+#else /* !USE_MANUAL */ -+/* built-in manual is disabled, blank function */ -+#include "tool_hugehelp.h" -+void hugehelp(void) {} - #endif /* USE_MANUAL */ - FOOT - ; diff --git a/meta/recipes-support/curl/curl/remove_inappropriate_file_from_rel.patch b/meta/recipes-support/curl/curl/remove_inappropriate_file_from_rel.patch deleted file mode 100644 index e4b8fe2ab6..0000000000 --- a/meta/recipes-support/curl/curl/remove_inappropriate_file_from_rel.patch +++ /dev/null @@ -1,8203 +0,0 @@ -Upstream-Status: Backport [to be fixed in 7.37.0] -Signed-off-by: Tudor Florea <tudor.florea@enea.com> - -diff -ruN a/src/tool_hugehelp.c b/src/tool_hugehelp.c ---- a/src/tool_hugehelp.c 2014-03-25 11:29:49.000000000 +0100 -+++ b/src/tool_hugehelp.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,8196 +0,0 @@ --#include "tool_setup.h" --#ifndef HAVE_LIBZ --/* -- * NEVER EVER edit this manually, fix the mkhelp.pl script instead! -- * Generation time: Tue Mar 25 11:29:49 2014 -- */ --#ifdef USE_MANUAL --#include "tool_hugehelp.h" --void hugehelp(void) --{ -- fputs( --" _ _ ____ _\n" --" Project ___| | | | _ \\| |\n" --" / __| | | | |_) | |\n" --" | (__| |_| | _ <| |___\n" --" \\___|\\___/|_| \\_\\_____|\n" --"\n" --"NAME\n" --" curl - transfer a URL\n" --"\n" --"SYNOPSIS\n" --" curl [options] [URL...]\n" --"\n" --"DESCRIPTION\n" --" curl is a tool to transfer data from or to a server, using one of the\n" --" supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,\n" --, stdout); -- fputs( --" IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS,\n" --" TELNET and TFTP). The command is designed to work without user inter-\n" --" action.\n" --"\n" --" curl offers a busload of useful tricks like proxy support, user authen-\n" --" tication, FTP upload, HTTP post, SSL connections, cookies, file trans-\n" --" fer resume, Metalink, and more. As you will see below, the number of\n" --" features will make your head spin!\n" --"\n" --, stdout); -- fputs( --" curl is powered by libcurl for all transfer-related features. See\n" --" libcurl(3) for details.\n" --"\n" --"URL\n" --" The URL syntax is protocol-dependent. You'll find a detailed descrip-\n" --" tion in RFC 3986.\n" --"\n" --" You can specify multiple URLs or parts of URLs by writing part sets\n" --" within braces as in:\n" --"\n" --" http://site.{one,two,three}.com\n" --"\n" --" or you can get sequences of alphanumeric series by using [] as in:\n" --"\n" --" ftp://ftp.numericals.com/file[1-100].txt\n" --, stdout); -- fputs( --" ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)\n" --" ftp://ftp.letters.com/file[a-z].txt\n" --"\n" --" Nested sequences are not supported, but you can use several ones next\n" --" to each other:\n" --"\n" --" http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html\n" --"\n" --" You can specify any amount of URLs on the command line. They will be\n" --" fetched in a sequential manner in the specified order.\n" --"\n" --, stdout); -- fputs( --" You can specify a step counter for the ranges to get every Nth number\n" --" or letter:\n" --"\n" --" http://www.numericals.com/file[1-100:10].txt\n" --" http://www.letters.com/file[a-z:2].txt\n" --"\n" --" If you specify URL without protocol:// prefix, curl will attempt to\n" --" guess what protocol you might want. It will then default to HTTP but\n" --" try other protocols based on often-used host name prefixes. For exam-\n" --, stdout); -- fputs( --" ple, for host names starting with \"ftp.\" curl will assume you want to\n" --" speak FTP.\n" --"\n" --" curl will do its best to use what you pass to it as a URL. It is not\n" --" trying to validate it as a syntactically correct URL by any means but\n" --" is instead very liberal with what it accepts.\n" --"\n" --" curl will attempt to re-use connections for multiple file transfers, so\n" --" that getting many files from the same server will not do multiple con-\n" --, stdout); -- fputs( --" nects / handshakes. This improves speed. Of course this is only done on\n" --" files specified on a single command line and cannot be used between\n" --" separate curl invokes.\n" --"\n" --"PROGRESS METER\n" --" curl normally displays a progress meter during operations, indicating\n" --" the amount of transferred data, transfer speeds and estimated time\n" --" left, etc.\n" --"\n" --" curl displays this data to the terminal by default, so if you invoke\n" --, stdout); -- fputs( --" curl to do an operation and it is about to write data to the terminal,\n" --" it disables the progress meter as otherwise it would mess up the output\n" --" mixing progress meter and response data.\n" --"\n" --" If you want a progress meter for HTTP POST or PUT requests, you need to\n" --" redirect the response output to a file, using shell redirect (>), -o\n" --" [file] or similar.\n" --"\n" --" It is not the same case for FTP upload as that operation does not spit\n" --, stdout); -- fputs( --" out any response data to the terminal.\n" --"\n" --" If you prefer a progress \"bar\" instead of the regular meter, -# is your\n" --" friend.\n" --"OPTIONS\n" --" Options start with one or two dashes. Many of the options require an\n" --" addition value next to it.\n" --"\n" --" The short \"single-dash\" form of the options, -d for example, may be\n" --" used with or without a space between it and its value, although a space\n" --" is a recommended separator. The long \"double-dash\" form, --data for\n" --, stdout); -- fputs( --" example, requires a space between it and its value.\n" --"\n" --" Short version options that don't need any additional values can be used\n" --" immediately next to each other, like for example you can specify all\n" --" the options -O, -L and -v at once as -OLv.\n" --"\n" --" In general, all boolean options are enabled with --option and yet again\n" --" disabled with --no-option. That is, you use the exact same option name\n" --, stdout); -- fputs( --" but prefix it with \"no-\". However, in this list we mostly only list and\n" --" show the --option version of them. (This concept with --no options was\n" --" added in 7.19.0. Previously most options were toggled on/off on\n" --" repeated use of the same command line option.)\n" --"\n" --" -#, --progress-bar\n" --" Make curl display progress as a simple progress bar instead of\n" --" the standard, more informational, meter.\n" --"\n" --" -:, --next\n" --, stdout); -- fputs( --" Tells curl to use a separate operation for the following URL and\n" --" associated options. This allows you to send several URL\n" --" requests, each with their own specific options, for example,\n" --" such as different user names or custom requests for each. (Added\n" --" in 7.36.0)\n" --"\n" --" -0, --http1.0\n" --" (HTTP) Tells curl to use HTTP version 1.0 instead of using its\n" --" internally preferred: HTTP 1.1.\n" --"\n" --, stdout); -- fputs( --" --http1.1\n" --" (HTTP) Tells curl to use HTTP version 1.1. This is the internal\n" --" default version. (Added in 7.33.0)\n" --"\n" --" --http2\n" --" (HTTP) Tells curl to issue its requests using HTTP 2. This\n" --" requires that the underlying libcurl was built to support it.\n" --" (Added in 7.33.0)\n" --"\n" --" --no-npn\n" --" Disable the NPN TLS extension. NPN is enabled by default if\n" --, stdout); -- fputs( --" libcurl was built with an SSL library that supports NPN. NPN is\n" --" used by a libcurl that supports HTTP 2 to negotiate HTTP 2 sup-\n" --" port with the server during https sessions.\n" --"\n" --" (Added in 7.36.0)\n" --"\n" --" --no-alpn\n" --" Disable the ALPN TLS extension. ALPN is enabled by default if\n" --" libcurl was built with an SSL library that supports ALPN. ALPN\n" --, stdout); -- fputs( --" is used by a libcurl that supports HTTP 2 to negotiate HTTP 2\n" --" support with the server during https sessions.\n" --"\n" --" (Added in 7.36.0)\n" --"\n" --" -1, --tlsv1\n" --" (SSL) Forces curl to use TLS version 1.x when negotiating with a\n" --" remote TLS server. You can use options --tlsv1.0, --tlsv1.1,\n" --" and --tlsv1.2 to control the TLS version more precisely (if the\n" --" SSL backend in use supports such a level of control).\n" --"\n" --, stdout); -- fputs( --" -2, --sslv2\n" --" (SSL) Forces curl to use SSL version 2 when negotiating with a\n" --" remote SSL server.\n" --"\n" --" -3, --sslv3\n" --" (SSL) Forces curl to use SSL version 3 when negotiating with a\n" --" remote SSL server.\n" --"\n" --" -4, --ipv4\n" --" If curl is capable of resolving an address to multiple IP ver-\n" --" sions (which it is if it is IPv6-capable), this option tells\n" --" curl to resolve names to IPv4 addresses only.\n" --, stdout); -- fputs( --"\n" --" -6, --ipv6\n" --" If curl is capable of resolving an address to multiple IP ver-\n" --" sions (which it is if it is IPv6-capable), this option tells\n" --" curl to resolve names to IPv6 addresses only.\n" --"\n" --" -a, --append\n" --" (FTP/SFTP) When used in an upload, this will tell curl to append\n" --" to the target file instead of overwriting it. If the file\n" --" doesn't exist, it will be created. Note that this flag is\n" --, stdout); -- fputs( --" ignored by some SSH servers (including OpenSSH).\n" --"\n" --" -A, --user-agent <agent string>\n" --" (HTTP) Specify the User-Agent string to send to the HTTP server.\n" --" Some badly done CGIs fail if this field isn't set to\n" --" \"Mozilla/4.0\". To encode blanks in the string, surround the\n" --" string with single quote marks. This can also be set with the\n" --" -H, --header option of course.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" --anyauth\n" --" (HTTP) Tells curl to figure out authentication method by itself,\n" --" and use the most secure one the remote site claims to support.\n" --" This is done by first doing a request and checking the response-\n" --" headers, thus possibly inducing an extra network round-trip.\n" --" This is used instead of setting a specific authentication\n" --, stdout); -- fputs( --" method, which you can do with --basic, --digest, --ntlm, and\n" --" --negotiate.\n" --"\n" --" Note that using --anyauth is not recommended if you do uploads\n" --" from stdin, since it may require data to be sent twice and then\n" --" the client must be able to rewind. If the need should arise when\n" --" uploading from stdin, the upload operation will fail.\n" --"\n" --" -b, --cookie <name=data>\n" --, stdout); -- fputs( --" (HTTP) Pass the data to the HTTP server as a cookie. It is sup-\n" --" posedly the data previously received from the server in a \"Set-\n" --" Cookie:\" line. The data should be in the format \"NAME1=VALUE1;\n" --" NAME2=VALUE2\".\n" --"\n" --" If no '=' symbol is used in the line, it is treated as a file-\n" --" name to use to read previously stored cookie lines from, which\n" --, stdout); -- fputs( --" should be used in this session if they match. Using this method\n" --" also activates the \"cookie parser\" which will make curl record\n" --" incoming cookies too, which may be handy if you're using this in\n" --" combination with the -L, --location option. The file format of\n" --" the file to read cookies from should be plain HTTP headers or\n" --" the Netscape/Mozilla cookie file format.\n" --"\n" --, stdout); -- fputs( --" NOTE that the file specified with -b, --cookie is only used as\n" --" input. No cookies will be stored in the file. To store cookies,\n" --" use the -c, --cookie-jar option or you could even save the HTTP\n" --" headers to a file using -D, --dump-header!\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -B, --use-ascii\n" --" (FTP/LDAP) Enable ASCII transfer. For FTP, this can also be\n" --, stdout); -- fputs( --" enforced by using an URL that ends with \";type=A\". This option\n" --" causes data sent to stdout to be in text mode for win32 systems.\n" --"\n" --" --basic\n" --" (HTTP) Tells curl to use HTTP Basic authentication. This is the\n" --" default and this option is usually pointless, unless you use it\n" --" to override a previously set option that sets a different\n" --" authentication method (such as --ntlm, --digest, or --negoti-\n" --, stdout); -- fputs( --" ate).\n" --"\n" --" -c, --cookie-jar <file name>\n" --" (HTTP) Specify to which file you want curl to write all cookies\n" --" after a completed operation. Curl writes all cookies previously\n" --" read from a specified file as well as all cookies received from\n" --" remote server(s). If no cookies are known, no file will be writ-\n" --" ten. The file will be written using the Netscape cookie file\n" --, stdout); -- fputs( --" format. If you set the file name to a single dash, \"-\", the\n" --" cookies will be written to stdout.\n" --"\n" --" This command line option will activate the cookie engine that\n" --" makes curl record and use cookies. Another way to activate it is\n" --" to use the -b, --cookie option.\n" --"\n" --" If the cookie jar can't be created or written to, the whole curl\n" --" operation won't fail or even report an error clearly. Using -v\n" --, stdout); -- fputs( --" will get a warning displayed, but that is the only visible feed-\n" --" back you get about this possibly lethal situation.\n" --"\n" --" If this option is used several times, the last specified file\n" --" name will be used.\n" --"\n" --" -C, --continue-at <offset>\n" --" Continue/Resume a previous file transfer at the given offset.\n" --" The given offset is the exact number of bytes that will be\n" --, stdout); -- fputs( --" skipped, counting from the beginning of the source file before\n" --" it is transferred to the destination. If used with uploads, the\n" --" FTP server command SIZE will not be used by curl.\n" --"\n" --" Use \"-C -\" to tell curl to automatically find out where/how to\n" --" resume the transfer. It then uses the given output/input files\n" --" to figure that out.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --, stdout); -- fputs( --" --ciphers <list of ciphers>\n" --" (SSL) Specifies which ciphers to use in the connection. The list\n" --" of ciphers must specify valid ciphers. Read up on SSL cipher\n" --" list details on this URL:\n" --" http://www.openssl.org/docs/apps/ciphers.html\n" --"\n" --" NSS ciphers are done differently than OpenSSL and GnuTLS. The\n" --" full list of NSS ciphers is in the NSSCipherSuite entry at this\n" --, stdout); -- fputs( --" URL: http://git.fedora-\n" --" hosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --compressed\n" --" (HTTP) Request a compressed response using one of the algorithms\n" --" curl supports, and save the uncompressed document. If this\n" --" option is used and the server sends an unsupported encoding,\n" --, stdout); -- fputs( --" curl will report an error.\n" --"\n" --" --connect-timeout <seconds>\n" --" Maximum time in seconds that you allow the connection to the\n" --" server to take. This only limits the connection phase, once\n" --" curl has connected this option is of no more use. Since 7.32.0,\n" --" this option accepts decimal values, but the actual timeout will\n" --" decrease in accuracy as the specified timeout increases in deci-\n" --, stdout); -- fputs( --" mal precision. See also the -m, --max-time option.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --create-dirs\n" --" When used in conjunction with the -o option, curl will create\n" --" the necessary local directory hierarchy as needed. This option\n" --" creates the dirs mentioned with the -o option, nothing else. If\n" --" the -o file name uses no dir or if the dirs it mentions already\n" --, stdout); -- fputs( --" exist, no dir will be created.\n" --"\n" --" To create remote directories when using FTP or SFTP, try --ftp-\n" --" create-dirs.\n" --"\n" --" --crlf (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).\n" --"\n" --" --crlfile <file>\n" --" (HTTPS/FTPS) Provide a file using PEM format with a Certificate\n" --" Revocation List that may specify peer certificates that are to\n" --" be considered revoked.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" (Added in 7.19.7)\n" --" -d, --data <data>\n" --" (HTTP) Sends the specified data in a POST request to the HTTP\n" --" server, in the same way that a browser does when a user has\n" --" filled in an HTML form and presses the submit button. This will\n" --" cause curl to pass the data to the server using the content-type\n" --, stdout); -- fputs( --" application/x-www-form-urlencoded. Compare to -F, --form.\n" --"\n" --" -d, --data is the same as --data-ascii. To post data purely\n" --" binary, you should instead use the --data-binary option. To URL-\n" --" encode the value of a form field you may use --data-urlencode.\n" --"\n" --" If any of these options is used more than once on the same com-\n" --" mand line, the data pieces specified will be merged together\n" --, stdout); -- fputs( --" with a separating &-symbol. Thus, using '-d name=daniel -d\n" --" skill=lousy' would generate a post chunk that looks like\n" --" 'name=daniel&skill=lousy'.\n" --"\n" --" If you start the data with the letter @, the rest should be a\n" --" file name to read the data from, or - if you want curl to read\n" --" the data from stdin. Multiple files can also be specified. Post-\n" --, stdout); -- fputs( --" ing data from a file named 'foobar' would thus be done with\n" --" --data @foobar. When --data is told to read from a file like\n" --" that, carriage returns and newlines will be stripped out.\n" --"\n" --" -D, --dump-header <file>\n" --" Write the protocol headers to the specified file.\n" --"\n" --" This option is handy to use when you want to store the headers\n" --" that an HTTP site sends to you. Cookies from the headers could\n" --, stdout); -- fputs( --" then be read in a second curl invocation by using the -b,\n" --" --cookie option! The -c, --cookie-jar option is however a better\n" --" way to store cookies.\n" --"\n" --" When used in FTP, the FTP server response lines are considered\n" --" being \"headers\" and thus are saved there.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --data-ascii <data>\n" --" See -d, --data.\n" --"\n" --" --data-binary <data>\n" --, stdout); -- fputs( --" (HTTP) This posts data exactly as specified with no extra pro-\n" --" cessing whatsoever.\n" --"\n" --" If you start the data with the letter @, the rest should be a\n" --" filename. Data is posted in a similar manner as --data-ascii\n" --" does, except that newlines and carriage returns are preserved\n" --" and conversions are never done.\n" --"\n" --" If this option is used several times, the ones following the\n" --, stdout); -- fputs( --" first will append data as described in -d, --data.\n" --"\n" --" --data-urlencode <data>\n" --" (HTTP) This posts data, similar to the other --data options with\n" --" the exception that this performs URL-encoding. (Added in 7.18.0)\n" --" To be CGI-compliant, the <data> part should begin with a name\n" --" followed by a separator and a content specification. The <data>\n" --" part can be passed to curl using one of the following syntaxes:\n" --"\n" --, stdout); -- fputs( --" content\n" --" This will make curl URL-encode the content and pass that\n" --" on. Just be careful so that the content doesn't contain\n" --" any = or @ symbols, as that will then make the syntax\n" --" match one of the other cases below!\n" --"\n" --" =content\n" --" This will make curl URL-encode the content and pass that\n" --" on. The preceding = symbol is not included in the data.\n" --"\n" --, stdout); -- fputs( --" name=content\n" --" This will make curl URL-encode the content part and pass\n" --" that on. Note that the name part is expected to be URL-\n" --" encoded already.\n" --"\n" --" @filename\n" --" This will make curl load data from the given file\n" --" (including any newlines), URL-encode that data and pass\n" --" it on in the POST.\n" --"\n" --" name@filename\n" --, stdout); -- fputs( --" This will make curl load data from the given file\n" --" (including any newlines), URL-encode that data and pass\n" --" it on in the POST. The name part gets an equal sign\n" --" appended, resulting in name=urlencoded-file-content. Note\n" --" that the name is expected to be URL-encoded already.\n" --"\n" --" --delegation LEVEL\n" --" Set LEVEL to tell the server what it is allowed to delegate when\n" --, stdout); -- fputs( --" it comes to user credentials. Used with GSS/kerberos.\n" --"\n" --" none Don't allow any delegation.\n" --"\n" --" policy Delegates if and only if the OK-AS-DELEGATE flag is set\n" --" in the Kerberos service ticket, which is a matter of\n" --" realm policy.\n" --"\n" --" always Unconditionally allow the server to delegate.\n" --"\n" --" --digest\n" --" (HTTP) Enables HTTP Digest authentication. This is an authenti-\n" --, stdout); -- fputs( --" cation scheme that prevents the password from being sent over\n" --" the wire in clear text. Use this in combination with the normal\n" --" -u, --user option to set user name and password. See also\n" --" --ntlm, --negotiate and --anyauth for related options.\n" --"\n" --" If this option is used several times, only the first one is\n" --" used.\n" --"\n" --" --disable-eprt\n" --, stdout); -- fputs( --" (FTP) Tell curl to disable the use of the EPRT and LPRT commands\n" --" when doing active FTP transfers. Curl will normally always first\n" --" attempt to use EPRT, then LPRT before using PORT, but with this\n" --" option, it will use PORT right away. EPRT and LPRT are exten-\n" --" sions to the original FTP protocol, and may not work on all\n" --" servers, but they enable more functionality in a better way than\n" --, stdout); -- fputs( --" the traditional PORT command.\n" --"\n" --" --eprt can be used to explicitly enable EPRT again and --no-eprt\n" --" is an alias for --disable-eprt.\n" --"\n" --" Disabling EPRT only changes the active behavior. If you want to\n" --" switch to passive mode you need to not use -P, --ftp-port or\n" --" force it with --ftp-pasv.\n" --"\n" --" --disable-epsv\n" --" (FTP) Tell curl to disable the use of the EPSV command when\n" --, stdout); -- fputs( --" doing passive FTP transfers. Curl will normally always first\n" --" attempt to use EPSV before PASV, but with this option, it will\n" --" not try using EPSV.\n" --"\n" --" --epsv can be used to explicitly enable EPSV again and --no-epsv\n" --" is an alias for --disable-epsv.\n" --"\n" --" Disabling EPSV only changes the passive behavior. If you want to\n" --" switch to active mode you need to use -P, --ftp-port.\n" --"\n" --, stdout); -- fputs( --" --dns-interface <interface>\n" --" Tell curl to send outgoing DNS requests through <interface>.\n" --" This option is a counterpart to --interface (which does not\n" --" affect DNS). The supplied string must be an interface name (not\n" --" an address).\n" --"\n" --" This option requires that libcurl was built with a resolver\n" --" backend that supports this operation. The c-ares backend is the\n" --, stdout); -- fputs( --" only such one. (Added in 7.33.0)\n" --"\n" --" --dns-ipv4-addr <ip-address>\n" --" Tell curl to bind to <ip-address> when making IPv4 DNS requests,\n" --" so that the DNS requests originate from this address. The argu-\n" --" ment should be a single IPv4 address.\n" --"\n" --" This option requires that libcurl was built with a resolver\n" --" backend that supports this operation. The c-ares backend is the\n" --, stdout); -- fputs( --" only such one. (Added in 7.33.0)\n" --"\n" --" --dns-ipv6-addr <ip-address>\n" --" Tell curl to bind to <ip-address> when making IPv6 DNS requests,\n" --" so that the DNS requests originate from this address. The argu-\n" --" ment should be a single IPv6 address.\n" --"\n" --" This option requires that libcurl was built with a resolver\n" --" backend that supports this operation. The c-ares backend is the\n" --, stdout); -- fputs( --" only such one. (Added in 7.33.0)\n" --"\n" --" --dns-servers <ip-address,ip-address>\n" --" Set the list of DNS servers to be used instead of the system\n" --" default. The list of IP addresses should be separated with com-\n" --" mas. Port numbers may also optionally be given as :<port-number>\n" --" after each IP address.\n" --"\n" --" This option requires that libcurl was built with a resolver\n" --, stdout); -- fputs( --" backend that supports this operation. The c-ares backend is the\n" --" only such one. (Added in 7.33.0)\n" --"\n" --" -e, --referer <URL>\n" --" (HTTP) Sends the \"Referrer Page\" information to the HTTP server.\n" --" This can also be set with the -H, --header flag of course. When\n" --" used with -L, --location you can append \";auto\" to the --referer\n" --" URL to make curl automatically set the previous URL when it fol-\n" --, stdout); -- fputs( --" lows a Location: header. The \";auto\" string can be used alone,\n" --" even if you don't set an initial --referer.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -E, --cert <certificate[:password]>\n" --" (SSL) Tells curl to use the specified client certificate file\n" --" when getting a file with HTTPS, FTPS or another SSL-based proto-\n" --" col. The certificate must be in PKCS#12 format if using Secure\n" --, stdout); -- fputs( --" Transport, or PEM format if using any other engine. If the\n" --" optional password isn't specified, it will be queried for on the\n" --" terminal. Note that this option assumes a \"certificate\" file\n" --" that is the private key and the private certificate concate-\n" --" nated! See --cert and --key to specify them independently.\n" --"\n" --" If curl is built against the NSS SSL library then this option\n" --, stdout); -- fputs( --" can tell curl the nickname of the certificate to use within the\n" --" NSS database defined by the environment variable SSL_DIR (or by\n" --" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n" --" nsspem.so) is available then PEM files may be loaded. If you\n" --" want to use a file from the current directory, please precede it\n" --" with \"./\" prefix, in order to avoid confusion with a nickname.\n" --, stdout); -- fputs( --" If the nickname contains \":\", it needs to be preceded by \"\\\" so\n" --" that it is not recognized as password delimiter. If the nick-\n" --" name contains \"\\\", it needs to be escaped as \"\\\\\" so that it is\n" --" not recognized as an escape character.\n" --"\n" --" (iOS and Mac OS X only) If curl is built against Secure Trans-\n" --" port, then the certificate string can either be the name of a\n" --, stdout); -- fputs( --" certificate/private key in the system or user keychain, or the\n" --" path to a PKCS#12-encoded certificate and private key. If you\n" --" want to use a file from the current directory, please precede it\n" --" with \"./\" prefix, in order to avoid confusion with a nickname.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --engine <name>\n" --" Select the OpenSSL crypto engine to use for cipher operations.\n" --, stdout); -- fputs( --" Use --engine list to print a list of build-time supported\n" --" engines. Note that not all (or none) of the engines may be\n" --" available at run-time.\n" --"\n" --" --environment\n" --" (RISC OS ONLY) Sets a range of environment variables, using the\n" --" names the -w option supports, to allow easier extraction of use-\n" --" ful information after having run curl.\n" --"\n" --" --egd-file <file>\n" --, stdout); -- fputs( --" (SSL) Specify the path name to the Entropy Gathering Daemon\n" --" socket. The socket is used to seed the random engine for SSL\n" --" connections. See also the --random-file option.\n" --"\n" --" --cert-type <type>\n" --" (SSL) Tells curl what certificate type the provided certificate\n" --" is in. PEM, DER and ENG are recognized types. If not specified,\n" --" PEM is assumed.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" --cacert <CA certificate>\n" --" (SSL) Tells curl to use the specified certificate file to verify\n" --" the peer. The file may contain multiple CA certificates. The\n" --" certificate(s) must be in PEM format. Normally curl is built to\n" --" use a default file for this, so this option is typically used to\n" --" alter that default file.\n" --"\n" --, stdout); -- fputs( --" curl recognizes the environment variable named 'CURL_CA_BUNDLE'\n" --" if it is set, and uses the given path as a path to a CA cert\n" --" bundle. This option overrides that variable.\n" --"\n" --" The windows version of curl will automatically look for a CA\n" --" certs file named 'curl-ca-bundle.crt', either in the same direc-\n" --" tory as curl.exe, or in the Current Working Directory, or in any\n" --" folder along your PATH.\n" --"\n" --, stdout); -- fputs( --" If curl is built against the NSS SSL library, the NSS PEM\n" --" PKCS#11 module (libnsspem.so) needs to be available for this\n" --" option to work properly.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --capath <CA certificate directory>\n" --" (SSL) Tells curl to use the specified certificate directory to\n" --" verify the peer. Multiple paths can be provided by separating\n" --, stdout); -- fputs( --" them with \":\" (e.g. \"path1:path2:path3\"). The certificates must\n" --" be in PEM format, and if curl is built against OpenSSL, the\n" --" directory must have been processed using the c_rehash utility\n" --" supplied with OpenSSL. Using --capath can allow OpenSSL-powered\n" --" curl to make SSL-connections much more efficiently than using\n" --" --cacert if the --cacert file contains many CA certificates.\n" --"\n" --, stdout); -- fputs( --" If this option is set, the default capath value will be ignored,\n" --" and if it is used several times, the last one will be used.\n" --"\n" --" -f, --fail\n" --" (HTTP) Fail silently (no output at all) on server errors. This\n" --" is mostly done to better enable scripts etc to better deal with\n" --" failed attempts. In normal cases when an HTTP server fails to\n" --" deliver a document, it returns an HTML document stating so\n" --, stdout); -- fputs( --" (which often also describes why and more). This flag will pre-\n" --" vent curl from outputting that and return error 22.\n" --"\n" --" This method is not fail-safe and there are occasions where non-\n" --" successful response codes will slip through, especially when\n" --" authentication is involved (response codes 401 and 407).\n" --"\n" --" -F, --form <name=content>\n" --" (HTTP) This lets curl emulate a filled-in form in which a user\n" --, stdout); -- fputs( --" has pressed the submit button. This causes curl to POST data\n" --" using the Content-Type multipart/form-data according to RFC\n" --" 2388. This enables uploading of binary files etc. To force the\n" --" 'content' part to be a file, prefix the file name with an @\n" --" sign. To just get the content part from a file, prefix the file\n" --" name with the symbol <. The difference between @ and < is then\n" --, stdout); -- fputs( --" that @ makes a file get attached in the post as a file upload,\n" --" while the < makes a text field and just get the contents for\n" --" that text field from a file.\n" --"\n" --" Example, to send your password file to the server, where 'pass-\n" --" word' is the name of the form-field to which /etc/passwd will be\n" --" the input:\n" --"\n" --" curl -F password=@/etc/passwd www.mypasswords.com\n" --"\n" --, stdout); -- fputs( --" To read content from stdin instead of a file, use - as the file-\n" --" name. This goes for both @ and < constructs.\n" --"\n" --" You can also tell curl what Content-Type to use by using\n" --" 'type=', in a manner similar to:\n" --"\n" --" curl -F \"web=@index.html;type=text/html\" url.com\n" --"\n" --" or\n" --"\n" --" curl -F \"name=daniel;type=text/foo\" url.com\n" --"\n" --" You can also explicitly change the name field of a file upload\n" --, stdout); -- fputs( --" part by setting filename=, like this:\n" --"\n" --" curl -F \"file=@localfile;filename=nameinpost\" url.com\n" --"\n" --" If filename/path contains ',' or ';', it must be quoted by dou-\n" --" ble-quotes like:\n" --"\n" --" curl -F \"file=@\\\"localfile\\\";filename=\\\"nameinpost\\\"\" url.com\n" --"\n" --" or\n" --"\n" --" curl -F 'file=@\"localfile\";filename=\"nameinpost\"' url.com\n" --"\n" --" Note that if a filename/path is quoted by double-quotes, any\n" --, stdout); -- fputs( --" double-quote or backslash within the filename must be escaped by\n" --" backslash.\n" --"\n" --" See further examples and details in the MANUAL.\n" --"\n" --" This option can be used multiple times.\n" --"\n" --" --ftp-account [data]\n" --" (FTP) When an FTP server asks for \"account data\" after user name\n" --" and password has been provided, this data is sent off using the\n" --" ACCT command. (Added in 7.13.0)\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" --ftp-alternative-to-user <command>\n" --" (FTP) If authenticating with the USER and PASS commands fails,\n" --" send this command. When connecting to Tumbleweed's Secure\n" --" Transport server over FTPS using a client certificate, using\n" --" \"SITE AUTH\" will tell the server to retrieve the username from\n" --" the certificate. (Added in 7.15.5)\n" --"\n" --, stdout); -- fputs( --" --ftp-create-dirs\n" --" (FTP/SFTP) When an FTP or SFTP URL/operation uses a path that\n" --" doesn't currently exist on the server, the standard behavior of\n" --" curl is to fail. Using this option, curl will instead attempt to\n" --" create missing directories.\n" --"\n" --" --ftp-method [method]\n" --" (FTP) Control what method curl should use to reach a file on an\n" --" FTP(S) server. The method argument should be one of the follow-\n" --, stdout); -- fputs( --" ing alternatives:\n" --"\n" --" multicwd\n" --" curl does a single CWD operation for each path part in\n" --" the given URL. For deep hierarchies this means very many\n" --" commands. This is how RFC 1738 says it should be done.\n" --" This is the default but the slowest behavior.\n" --"\n" --" nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR\n" --, stdout); -- fputs( --" etc and give a full path to the server for all these com-\n" --" mands. This is the fastest behavior.\n" --"\n" --" singlecwd\n" --" curl does one CWD with the full target directory and then\n" --" operates on the file \"normally\" (like in the multicwd\n" --" case). This is somewhat more standards compliant than\n" --" 'nocwd' but without the full penalty of 'multicwd'.\n" --" (Added in 7.15.1)\n" --"\n" --, stdout); -- fputs( --" --ftp-pasv\n" --" (FTP) Use passive mode for the data connection. Passive is the\n" --" internal default behavior, but using this option can be used to\n" --" override a previous -P/-ftp-port option. (Added in 7.11.0)\n" --"\n" --" If this option is used several times, only the first one is\n" --" used. Undoing an enforced passive really isn't doable but you\n" --" must then instead enforce the correct -P, --ftp-port again.\n" --"\n" --, stdout); -- fputs( --" Passive mode means that curl will try the EPSV command first and\n" --" then PASV, unless --disable-epsv is used.\n" --"\n" --" --ftp-skip-pasv-ip\n" --" (FTP) Tell curl to not use the IP address the server suggests in\n" --" its response to curl's PASV command when curl connects the data\n" --" connection. Instead curl will re-use the same IP address it\n" --" already uses for the control connection. (Added in 7.14.2)\n" --"\n" --, stdout); -- fputs( --" This option has no effect if PORT, EPRT or EPSV is used instead\n" --" of PASV.\n" --"\n" --" --ftp-pret\n" --" (FTP) Tell curl to send a PRET command before PASV (and EPSV).\n" --" Certain FTP servers, mainly drftpd, require this non-standard\n" --" command for directory listings as well as up and downloads in\n" --" PASV mode. (Added in 7.20.x)\n" --"\n" --" --ftp-ssl-ccc\n" --, stdout); -- fputs( --" (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS\n" --" layer after authenticating. The rest of the control channel com-\n" --" munication will be unencrypted. This allows NAT routers to fol-\n" --" low the FTP transaction. The default mode is passive. See --ftp-\n" --" ssl-ccc-mode for other modes. (Added in 7.16.1)\n" --"\n" --" --ftp-ssl-ccc-mode [active/passive]\n" --, stdout); -- fputs( --" (FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The\n" --" passive mode will not initiate the shutdown, but instead wait\n" --" for the server to do it, and will not reply to the shutdown from\n" --" the server. The active mode initiates the shutdown and waits for\n" --" a reply from the server. (Added in 7.16.2)\n" --"\n" --" --ftp-ssl-control\n" --" (FTP) Require SSL/TLS for the FTP login, clear for transfer.\n" --, stdout); -- fputs( --" Allows secure authentication, but non-encrypted data transfers\n" --" for efficiency. Fails the transfer if the server doesn't sup-\n" --" port SSL/TLS. (Added in 7.16.0) that can still be used but will\n" --" be removed in a future version.\n" --"\n" --" --form-string <name=string>\n" --" (HTTP) Similar to --form except that the value string for the\n" --" named parameter is used literally. Leading '@' and '<' charac-\n" --, stdout); -- fputs( --" ters, and the ';type=' string in the value have no special mean-\n" --" ing. Use this in preference to --form if there's any possibility\n" --" that the string value may accidentally trigger the '@' or '<'\n" --" features of --form.\n" --"\n" --" -g, --globoff\n" --" This option switches off the \"URL globbing parser\". When you set\n" --" this option, you can specify URLs that contain the letters {}[]\n" --, stdout); -- fputs( --" without having them being interpreted by curl itself. Note that\n" --" these letters are not normal legal URL contents but they should\n" --" be encoded according to the URI standard.\n" --"\n" --" -G, --get\n" --" When used, this option will make all data specified with -d,\n" --" --data, --data-binary or --data-urlencode to be used in an HTTP\n" --" GET request instead of the POST request that otherwise would be\n" --, stdout); -- fputs( --" used. The data will be appended to the URL with a '?' separator.\n" --" If used in combination with -I, the POST data will instead be\n" --" appended to the URL with a HEAD request.\n" --"\n" --" If this option is used several times, only the first one is\n" --" used. This is because undoing a GET doesn't make sense, but you\n" --" should then instead enforce the alternative method you prefer.\n" --"\n" --" -H, --header <header>\n" --, stdout); -- fputs( --" (HTTP) Extra header to use when getting a web page. You may\n" --" specify any number of extra headers. Note that if you should add\n" --" a custom header that has the same name as one of the internal\n" --" ones curl would use, your externally set header will be used\n" --" instead of the internal one. This allows you to make even trick-\n" --" ier stuff than curl would normally do. You should not replace\n" --, stdout); -- fputs( --" internally set headers without knowing perfectly well what\n" --" you're doing. Remove an internal header by giving a replacement\n" --" without content on the right side of the colon, as in: -H\n" --" \"Host:\". If you send the custom header with no-value then its\n" --" header must be terminated with a semicolon, such as -H \"X-Cus-\n" --" tom-Header;\" to send \"X-Custom-Header:\".\n" --"\n" --, stdout); -- fputs( --" curl will make sure that each header you add/replace is sent\n" --" with the proper end-of-line marker, you should thus not add that\n" --" as a part of the header content: do not add newlines or carriage\n" --" returns, they will only mess things up for you.\n" --"\n" --" See also the -A, --user-agent and -e, --referer options.\n" --"\n" --" This option can be used multiple times to add/replace/remove\n" --" multiple headers.\n" --"\n" --, stdout); -- fputs( --" --hostpubmd5 <md5>\n" --" (SCP/SFTP) Pass a string containing 32 hexadecimal digits. The\n" --" string should be the 128 bit MD5 checksum of the remote host's\n" --" public key, curl will refuse the connection with the host unless\n" --" the md5sums match. (Added in 7.17.1)\n" --"\n" --" --ignore-content-length\n" --" (HTTP) Ignore the Content-Length header. This is particularly\n" --, stdout); -- fputs( --" useful for servers running Apache 1.x, which will report incor-\n" --" rect Content-Length for files larger than 2 gigabytes.\n" --"\n" --" -i, --include\n" --" (HTTP) Include the HTTP-header in the output. The HTTP-header\n" --" includes things like server-name, date of the document, HTTP-\n" --" version and more...\n" --"\n" --" -I, --head\n" --" (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature\n" --, stdout); -- fputs( --" the command HEAD which this uses to get nothing but the header\n" --" of a document. When used on an FTP or FILE file, curl displays\n" --" the file size and last modification time only.\n" --"\n" --" --interface <name>\n" --" Perform an operation using a specified interface. You can enter\n" --" interface name, IP address or host name. An example could look\n" --" like:\n" --"\n" --" curl --interface eth0:1 http://www.netscape.com/\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" -j, --junk-session-cookies\n" --" (HTTP) When curl is told to read cookies from a given file, this\n" --" option will make it discard all \"session cookies\". This will\n" --" basically have the same effect as if a new session is started.\n" --" Typical browsers always discard session cookies when they're\n" --" closed down.\n" --"\n" --" -J, --remote-header-name\n" --, stdout); -- fputs( --" (HTTP) This option tells the -O, --remote-name option to use the\n" --" server-specified Content-Disposition filename instead of\n" --" extracting a filename from the URL.\n" --"\n" --" There's no attempt to decode %-sequences (yet) in the provided\n" --" file name, so this option may provide you with rather unexpected\n" --" file names.\n" --"\n" --" -k, --insecure\n" --" (SSL) This option explicitly allows curl to perform \"insecure\"\n" --, stdout); -- fputs( --" SSL connections and transfers. All SSL connections are attempted\n" --" to be made secure by using the CA certificate bundle installed\n" --" by default. This makes all connections considered \"insecure\"\n" --" fail unless -k, --insecure is used.\n" --"\n" --" See this online resource for further details:\n" --" http://curl.haxx.se/docs/sslcerts.html\n" --"\n" --" -K, --config <config file>\n" --, stdout); -- fputs( --" Specify which config file to read curl arguments from. The con-\n" --" fig file is a text file in which command line arguments can be\n" --" written which then will be used as if they were written on the\n" --" actual command line.\n" --"\n" --" Options and their parameters must be specified on the same con-\n" --" fig file line, separated by whitespace, colon, or the equals\n" --, stdout); -- fputs( --" sign. Long option names can optionally be given in the config\n" --" file without the initial double dashes and if so, the colon or\n" --" equals characters can be used as separators. If the option is\n" --" specified with one or two dashes, there can be no colon or\n" --" equals character between the option and its parameter.\n" --"\n" --" If the parameter is to contain whitespace, the parameter must be\n" --, stdout); -- fputs( --" enclosed within quotes. Within double quotes, the following\n" --" escape sequences are available: \\\\, \\\", \\t, \\n, \\r and \\v. A\n" --" backslash preceding any other letter is ignored. If the first\n" --" column of a config line is a '#' character, the rest of the line\n" --" will be treated as a comment. Only write one option per physical\n" --" line in the config file.\n" --"\n" --, stdout); -- fputs( --" Specify the filename to -K, --config as '-' to make curl read\n" --" the file from stdin.\n" --"\n" --" Note that to be able to specify a URL in the config file, you\n" --" need to specify it using the --url option, and not by simply\n" --" writing the URL on its own line. So, it could look similar to\n" --" this:\n" --"\n" --" url = \"http://curl.haxx.se/docs/\"\n" --"\n" --, stdout); -- fputs( --" When curl is invoked, it always (unless -q is used) checks for a\n" --" default config file and uses it if found. The default config\n" --" file is checked for in the following places in this order:\n" --"\n" --" 1) curl tries to find the \"home dir\": It first checks for the\n" --" CURL_HOME and then the HOME environment variables. Failing that,\n" --" it uses getpwuid() on UNIX-like systems (which returns the home\n" --, stdout); -- fputs( --" dir given the current user in your system). On Windows, it then\n" --" checks for the APPDATA variable, or as a last resort the '%USER-\n" --" PROFILE%\\Application Data'.\n" --"\n" --" 2) On windows, if there is no _curlrc file in the home dir, it\n" --" checks for one in the same dir the curl executable is placed. On\n" --" UNIX-like systems, it will simply try to load .curlrc from the\n" --" determined home dir.\n" --"\n" --, stdout); -- fputs( --" # --- Example file ---\n" --" # this is a comment\n" --" url = \"curl.haxx.se\"\n" --" output = \"curlhere.html\"\n" --" user-agent = \"superagent/1.0\"\n" --"\n" --" # and fetch another URL too\n" --" url = \"curl.haxx.se/docs/manpage.html\"\n" --" -O\n" --" referer = \"http://nowhereatall.com/\"\n" --" # --- End of example file ---\n" --"\n" --" This option can be used multiple times to load multiple config\n" --" files.\n" --"\n" --, stdout); -- fputs( --" --keepalive-time <seconds>\n" --" This option sets the time a connection needs to remain idle\n" --" before sending keepalive probes and the time between individual\n" --" keepalive probes. It is currently effective on operating systems\n" --" offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options\n" --" (meaning Linux, recent AIX, HP-UX and more). This option has no\n" --" effect if --no-keepalive is used. (Added in 7.18.0)\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --" If unspecified, the option defaults to 60 seconds.\n" --"\n" --" --key <key>\n" --" (SSL/SSH) Private key file name. Allows you to provide your pri-\n" --" vate key in this separate file.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --key-type <type>\n" --" (SSL) Private key file type. Specify which type your --key pro-\n" --, stdout); -- fputs( --" vided private key is. DER, PEM, and ENG are supported. If not\n" --" specified, PEM is assumed.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --krb <level>\n" --" (FTP) Enable Kerberos authentication and use. The level must be\n" --" entered and should be one of 'clear', 'safe', 'confidential', or\n" --" 'private'. Should you use a level that is not one of these,\n" --, stdout); -- fputs( --" 'private' will instead be used.\n" --"\n" --" This option requires a library built with kerberos4 or GSSAPI\n" --" (GSS-Negotiate) support. This is not very common. Use -V, --ver-\n" --" sion to see if your curl supports it.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -l, --list-only\n" --" (FTP) When listing an FTP directory, this switch forces a name-\n" --, stdout); -- fputs( --" only view. This is especially useful if the user wants to\n" --" machine-parse the contents of an FTP directory since the normal\n" --" directory view doesn't use a standard look or format. When used\n" --" like this, the option causes a NLST command to be sent to the\n" --" server instead of LIST.\n" --"\n" --" Note: Some FTP servers list only files in their response to\n" --, stdout); -- fputs( --" NLST; they do not include sub-directories and symbolic links.\n" --"\n" --" (POP3) When retrieving a specific email from POP3, this switch\n" --" forces a LIST command to be performed instead of RETR. This is\n" --" particularly useful if the user wants to see if a specific mes-\n" --" sage id exists on the server and what size it is.\n" --"\n" --" Note: When combined with -X, --request <command>, this option\n" --, stdout); -- fputs( --" can be used to send an UIDL command instead, so the user may use\n" --" the email's unique identifier rather than it's message id to\n" --" make the request. (Added in 7.21.5)\n" --"\n" --" -L, --location\n" --" (HTTP/HTTPS) If the server reports that the requested page has\n" --" moved to a different location (indicated with a Location: header\n" --" and a 3XX response code), this option will make curl redo the\n" --, stdout); -- fputs( --" request on the new place. If used together with -i, --include or\n" --" -I, --head, headers from all requested pages will be shown. When\n" --" authentication is used, curl only sends its credentials to the\n" --" initial host. If a redirect takes curl to a different host, it\n" --" won't be able to intercept the user+password. See also --loca-\n" --" tion-trusted on how to change this. You can limit the amount of\n" --, stdout); -- fputs( --" redirects to follow by using the --max-redirs option.\n" --"\n" --" When curl follows a redirect and the request is not a plain GET\n" --" (for example POST or PUT), it will do the following request with\n" --" a GET if the HTTP response was 301, 302, or 303. If the response\n" --" code was any other 3xx code, curl will re-send the following\n" --" request using the same unmodified method.\n" --"\n" --" --libcurl <file>\n" --, stdout); -- fputs( --" Append this option to any ordinary curl command line, and you\n" --" will get a libcurl-using C source code written to the file that\n" --" does the equivalent of what your command-line operation does!\n" --"\n" --" If this option is used several times, the last given file name\n" --" will be used. (Added in 7.16.1)\n" --"\n" --" --limit-rate <speed>\n" --" Specify the maximum transfer rate you want curl to use. This\n" --, stdout); -- fputs( --" feature is useful if you have a limited pipe and you'd like your\n" --" transfer not to use your entire bandwidth.\n" --"\n" --" The given speed is measured in bytes/second, unless a suffix is\n" --" appended. Appending 'k' or 'K' will count the number as kilo-\n" --" bytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it\n" --" gigabytes. Examples: 200K, 3m and 1G.\n" --"\n" --, stdout); -- fputs( --" The given rate is the average speed counted during the entire\n" --" transfer. It means that curl might use higher transfer speeds in\n" --" short bursts, but over time it uses no more than the given rate.\n" --" If you also use the -Y, --speed-limit option, that option will\n" --" take precedence and might cripple the rate-limiting slightly, to\n" --" help keeping the speed-limit logic working.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" --local-port <num>[-num]\n" --" Set a preferred number or range of local port numbers to use for\n" --" the connection(s). Note that port numbers by nature are a\n" --" scarce resource that will be busy at times so setting this range\n" --" to something too narrow might cause unnecessary connection setup\n" --" failures. (Added in 7.15.2)\n" --"\n" --" --location-trusted\n" --, stdout); -- fputs( --" (HTTP/HTTPS) Like -L, --location, but will allow sending the\n" --" name + password to all hosts that the site may redirect to. This\n" --" may or may not introduce a security breach if the site redirects\n" --" you to a site to which you'll send your authentication info\n" --" (which is plaintext in the case of HTTP Basic authentication).\n" --"\n" --" -m, --max-time <seconds>\n" --, stdout); -- fputs( --" Maximum time in seconds that you allow the whole operation to\n" --" take. This is useful for preventing your batch jobs from hang-\n" --" ing for hours due to slow networks or links going down. Since\n" --" 7.32.0, this option accepts decimal values, but the actual time-\n" --" out will decrease in accuracy as the specified timeout increases\n" --" in decimal precision. See also the --connect-timeout option.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" --mail-auth <address>\n" --" (SMTP) Specify a single address. This will be used to specify\n" --" the authentication address (identity) of a submitted message\n" --" that is being relayed to another server.\n" --"\n" --" (Added in 7.25.0)\n" --"\n" --" --mail-from <address>\n" --" (SMTP) Specify a single address that the given mail should get\n" --" sent from.\n" --"\n" --, stdout); -- fputs( --" (Added in 7.20.0)\n" --"\n" --" --max-filesize <bytes>\n" --" Specify the maximum size (in bytes) of a file to download. If\n" --" the file requested is larger than this value, the transfer will\n" --" not start and curl will return with exit code 63.\n" --"\n" --" NOTE: The file size is not always known prior to download, and\n" --" for such files this option has no effect even if the file trans-\n" --, stdout); -- fputs( --" fer ends up being larger than this given limit. This concerns\n" --" both FTP and HTTP transfers.\n" --"\n" --" --mail-rcpt <address>\n" --" (SMTP) Specify a single address, user name or mailing list name.\n" --" When performing a mail transfer, the recipient should specify a\n" --" valid email address to send the mail to. (Added in 7.20.0)\n" --"\n" --" When performing an address verification (VRFY command), the\n" --, stdout); -- fputs( --" recipient should be specified as the user name or user name and\n" --" domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)\n" --"\n" --" When performing a mailing list expand (EXPN command), the recip-\n" --" ient should be specified using the mailing list name, such as\n" --" \"Friends\" or \"London-Office\". (Added in 7.34.0)\n" --"\n" --" --max-redirs <num>\n" --" Set maximum number of redirection-followings allowed. If -L,\n" --, stdout); -- fputs( --" --location is used, this option can be used to prevent curl from\n" --" following redirections \"in absurdum\". By default, the limit is\n" --" set to 50 redirections. Set this option to -1 to make it limit-\n" --" less.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --metalink\n" --" This option can tell curl to parse and process a given URI as\n" --, stdout); -- fputs( --" Metalink file (both version 3 and 4 (RFC 5854) are supported)\n" --" and make use of the mirrors listed within for failover if there\n" --" are errors (such as the file or server not being available). It\n" --" will also verify the hash of the file after the download com-\n" --" pletes. The Metalink file itself is downloaded and processed in\n" --" memory and not stored in the local file system.\n" --"\n" --, stdout); -- fputs( --" Example to use a remote Metalink file:\n" --"\n" --" curl --metalink http://www.example.com/example.metalink\n" --"\n" --" To use a Metalink file in the local file system, use FILE proto-\n" --" col (file://):\n" --"\n" --" curl --metalink file://example.metalink\n" --"\n" --" Please note that if FILE protocol is disabled, there is no way\n" --" to use a local Metalink file at the time of this writing. Also\n" --, stdout); -- fputs( --" note that if --metalink and --include are used together,\n" --" --include will be ignored. This is because including headers in\n" --" the response will break Metalink parser and if the headers are\n" --" included in the file described in Metalink file, hash check will\n" --" fail.\n" --"\n" --" (Added in 7.27.0, if built against the libmetalink library.)\n" --"\n" --" -n, --netrc\n" --, stdout); -- fputs( --" Makes curl scan the .netrc (_netrc on Windows) file in the\n" --" user's home directory for login name and password. This is typi-\n" --" cally used for FTP on UNIX. If used with HTTP, curl will enable\n" --" user authentication. See netrc(4) or ftp(1) for details on the\n" --" file format. Curl will not complain if that file doesn't have\n" --" the right permissions (it should not be either world- or group-\n" --, stdout); -- fputs( --" readable). The environment variable \"HOME\" is used to find the\n" --" home directory.\n" --"\n" --" A quick and very simple example of how to setup a .netrc to\n" --" allow curl to FTP to the machine host.domain.com with user name\n" --" 'myself' and password 'secret' should look similar to:\n" --"\n" --" machine host.domain.com login myself password secret\n" --"\n" --" -N, --no-buffer\n" --, stdout); -- fputs( --" Disables the buffering of the output stream. In normal work sit-\n" --" uations, curl will use a standard buffered output stream that\n" --" will have the effect that it will output the data in chunks, not\n" --" necessarily exactly when the data arrives. Using this option\n" --" will disable that buffering.\n" --"\n" --" Note that this is the negated option name documented. You can\n" --" thus use --buffer to enforce the buffering.\n" --"\n" --, stdout); -- fputs( --" --netrc-file\n" --" This option is similar to --netrc, except that you provide the\n" --" path (absolute or relative) to the netrc file that Curl should\n" --" use. You can only specify one netrc file per invocation. If\n" --" several --netrc-file options are provided, only the last one\n" --" will be used. (Added in 7.21.5)\n" --"\n" --" This option overrides any use of --netrc as they are mutually\n" --, stdout); -- fputs( --" exclusive. It will also abide by --netrc-optional if specified.\n" --"\n" --" --netrc-optional\n" --" Very similar to --netrc, but this option makes the .netrc usage\n" --" optional and not mandatory as the --netrc option does.\n" --"\n" --" --negotiate\n" --" (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate\n" --" method was designed by Microsoft and is used in their web appli-\n" --, stdout); -- fputs( --" cations. It is primarily meant as a support for Kerberos5\n" --" authentication but may be also used along with another authenti-\n" --" cation method. For more information see IETF draft draft-brezak-\n" --" spnego-http-04.txt.\n" --"\n" --" If you want to enable Negotiate for your proxy authentication,\n" --" then use --proxy-negotiate.\n" --"\n" --" This option requires a library built with GSSAPI support. This\n" --, stdout); -- fputs( --" is not very common. Use -V, --version to see if your version\n" --" supports GSS-Negotiate.\n" --"\n" --" When using this option, you must also provide a fake -u, --user\n" --" option to activate the authentication code properly. Sending a\n" --" '-u :' is enough as the user name and password from the -u\n" --" option aren't actually used.\n" --"\n" --" If this option is used several times, only the first one is\n" --" used.\n" --"\n" --, stdout); -- fputs( --" --no-keepalive\n" --" Disables the use of keepalive messages on the TCP connection, as\n" --" by default curl enables them.\n" --"\n" --" Note that this is the negated option name documented. You can\n" --" thus use --keepalive to enforce keepalive.\n" --"\n" --" --no-sessionid\n" --" (SSL) Disable curl's use of SSL session-ID caching. By default\n" --" all transfers are done using the cache. Note that while nothing\n" --, stdout); -- fputs( --" should ever get hurt by attempting to reuse SSL session-IDs,\n" --" there seem to be broken SSL implementations in the wild that may\n" --" require you to disable this in order for you to succeed. (Added\n" --" in 7.16.0)\n" --"\n" --" Note that this is the negated option name documented. You can\n" --" thus use --sessionid to enforce session-ID caching.\n" --"\n" --" --noproxy <no-proxy-list>\n" --, stdout); -- fputs( --" Comma-separated list of hosts which do not use a proxy, if one\n" --" is specified. The only wildcard is a single * character, which\n" --" matches all hosts, and effectively disables the proxy. Each name\n" --" in this list is matched as either a domain which contains the\n" --" hostname, or the hostname itself. For example, local.com would\n" --" match local.com, local.com:80, and www.local.com, but not\n" --, stdout); -- fputs( --" www.notlocal.com. (Added in 7.19.4).\n" --"\n" --" --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication\n" --" method was designed by Microsoft and is used by IIS web servers.\n" --" It is a proprietary protocol, reverse-engineered by clever peo-\n" --" ple and implemented in curl based on their efforts. This kind of\n" --" behavior should not be endorsed, you should encourage everyone\n" --, stdout); -- fputs( --" who uses NTLM to switch to a public and documented authentica-\n" --" tion method instead, such as Digest.\n" --"\n" --" If you want to enable NTLM for your proxy authentication, then\n" --" use --proxy-ntlm.\n" --"\n" --" This option requires a library built with SSL support. Use -V,\n" --" --version to see if your curl supports NTLM.\n" --"\n" --" If this option is used several times, only the first one is\n" --" used.\n" --"\n" --, stdout); -- fputs( --" -o, --output <file>\n" --" Write output to <file> instead of stdout. If you are using {} or\n" --" [] to fetch multiple documents, you can use '#' followed by a\n" --" number in the <file> specifier. That variable will be replaced\n" --" with the current string for the URL being fetched. Like in:\n" --"\n" --" curl http://{one,two}.site.com -o \"file_#1.txt\"\n" --"\n" --" or use several variables like:\n" --"\n" --, stdout); -- fputs( --" curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n" --"\n" --" You may use this option as many times as the number of URLs you\n" --" have.\n" --"\n" --" See also the --create-dirs option to create the local directo-\n" --" ries dynamically. Specifying the output as '-' (a single dash)\n" --" will force the output to be done to stdout.\n" --"\n" --" -O, --remote-name\n" --" Write output to a local file named like the remote file we get.\n" --, stdout); -- fputs( --" (Only the file part of the remote file is used, the path is cut\n" --" off.)\n" --"\n" --" The remote file name to use for saving is extracted from the\n" --" given URL, nothing else.\n" --"\n" --" Consequentially, the file will be saved in the current working\n" --" directory. If you want the file saved in a different directory,\n" --" make sure you change current working directory before you invoke\n" --, stdout); -- fputs( --" curl with the -O, --remote-name flag!\n" --"\n" --" There is no URL decoding done on the file name. If it has %20 or\n" --" other URL encoded parts of the name, they will end up as-is as\n" --" file name.\n" --"\n" --" You may use this option as many times as the number of URLs you\n" --" have.\n" --"\n" --" --oauth2-bearer\n" --" (IMAP, POP3, SMTP) Specify the Bearer Token for OAUTH 2.0 server\n" --, stdout); -- fputs( --" authentication. The Bearer Token is used in conjunction with the\n" --" user name which can be specified as part of the --url or -u,\n" --" --user options.\n" --"\n" --" The Bearer Token and user name are formatted according to RFC\n" --" 6750.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -p, --proxytunnel\n" --" When an HTTP proxy is used (-x, --proxy), this option will cause\n" --, stdout); -- fputs( --" non-HTTP protocols to attempt to tunnel through the proxy\n" --" instead of merely using it to do HTTP-like operations. The tun-\n" --" nel approach is made with the HTTP proxy CONNECT request and\n" --" requires that the proxy allows direct connect to the remote port\n" --" number curl wants to tunnel through to.\n" --"\n" --" -P, --ftp-port <address>\n" --" (FTP) Reverses the default initiator/listener roles when con-\n" --, stdout); -- fputs( --" necting with FTP. This switch makes curl use active mode. In\n" --" practice, curl then tells the server to connect back to the\n" --" client's specified address and port, while passive mode asks the\n" --" server to setup an IP address and port for it to connect to.\n" --" <address> should be one of:\n" --"\n" --" interface\n" --" i.e \"eth0\" to specify which interface's IP address you\n" --, stdout); -- fputs( --" want to use (Unix only)\n" --"\n" --" IP address\n" --" i.e \"192.168.10.1\" to specify the exact IP address\n" --"\n" --" host name\n" --" i.e \"my.host.domain\" to specify the machine\n" --"\n" --" - make curl pick the same IP address that is already used\n" --" for the control connection\n" --"\n" --" If this option is used several times, the last one will be used. Dis-\n" --, stdout); -- fputs( --" able the use of PORT with --ftp-pasv. Disable the attempt to use the\n" --" EPRT command instead of PORT by using --disable-eprt. EPRT is really\n" --" PORT++.\n" --"\n" --" Starting in 7.19.5, you can append \":[start]-[end]\" to the right of the\n" --" address, to tell curl what TCP port range to use. That means you spec-\n" --" ify a port range, from a lower to a higher number. A single number\n" --" works as well, but do note that it increases the risk of failure since\n" --, stdout); -- fputs( --" the port may not be available.\n" --"\n" --" --pass <phrase>\n" --" (SSL/SSH) Passphrase for the private key\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --post301\n" --" (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert\n" --" POST requests into GET requests when following a 301 redirect-\n" --" ion. The non-RFC behaviour is ubiquitous in web browsers, so\n" --, stdout); -- fputs( --" curl does the conversion by default to maintain consistency.\n" --" However, a server may require a POST to remain a POST after such\n" --" a redirection. This option is meaningful only when using -L,\n" --" --location (Added in 7.17.1)\n" --"\n" --" --post302\n" --" (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert\n" --" POST requests into GET requests when following a 302 redirect-\n" --, stdout); -- fputs( --" ion. The non-RFC behaviour is ubiquitous in web browsers, so\n" --" curl does the conversion by default to maintain consistency.\n" --" However, a server may require a POST to remain a POST after such\n" --" a redirection. This option is meaningful only when using -L,\n" --" --location (Added in 7.19.1)\n" --"\n" --" --post303\n" --" (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert\n" --, stdout); -- fputs( --" POST requests into GET requests when following a 303 redirect-\n" --" ion. The non-RFC behaviour is ubiquitous in web browsers, so\n" --" curl does the conversion by default to maintain consistency.\n" --" However, a server may require a POST to remain a POST after such\n" --" a redirection. This option is meaningful only when using -L,\n" --" --location (Added in 7.26.0)\n" --"\n" --" --proto <protocols>\n" --, stdout); -- fputs( --" Tells curl to use the listed protocols for its initial\n" --" retrieval. Protocols are evaluated left to right, are comma sep-\n" --" arated, and are each a protocol name or 'all', optionally pre-\n" --" fixed by zero or more modifiers. Available modifiers are:\n" --"\n" --" + Permit this protocol in addition to protocols already permit-\n" --" ted (this is the default if no modifier is used).\n" --"\n" --, stdout); -- fputs( --" - Deny this protocol, removing it from the list of protocols\n" --" already permitted.\n" --"\n" --" = Permit only this protocol (ignoring the list already permit-\n" --" ted), though subject to later modification by subsequent\n" --" entries in the comma separated list.\n" --"\n" --" For example:\n" --"\n" --" --proto -ftps uses the default protocols, but disables ftps\n" --"\n" --" --proto -all,https,+http\n" --, stdout); -- fputs( --" only enables http and https\n" --"\n" --" --proto =http,https\n" --" also only enables http and https\n" --"\n" --" Unknown protocols produce a warning. This allows scripts to\n" --" safely rely on being able to disable potentially dangerous pro-\n" --" tocols, without relying upon support for that protocol being\n" --" built into curl to avoid an error.\n" --"\n" --, stdout); -- fputs( --" This option can be used multiple times, in which case the effect\n" --" is the same as concatenating the protocols into one instance of\n" --" the option.\n" --"\n" --" (Added in 7.20.2)\n" --"\n" --" --proto-redir <protocols>\n" --" Tells curl to use the listed protocols after a redirect. See\n" --" --proto for how protocols are represented.\n" --"\n" --" (Added in 7.20.2)\n" --"\n" --" --proxy-anyauth\n" --, stdout); -- fputs( --" Tells curl to pick a suitable authentication method when commu-\n" --" nicating with the given proxy. This might cause an extra\n" --" request/response round-trip. (Added in 7.13.2)\n" --"\n" --" --proxy-basic\n" --" Tells curl to use HTTP Basic authentication when communicating\n" --" with the given proxy. Use --basic for enabling HTTP Basic with a\n" --" remote host. Basic is the default authentication method curl\n" --, stdout); -- fputs( --" uses with proxies.\n" --"\n" --" --proxy-digest\n" --" Tells curl to use HTTP Digest authentication when communicating\n" --" with the given proxy. Use --digest for enabling HTTP Digest with\n" --" a remote host.\n" --"\n" --" --proxy-negotiate\n" --" Tells curl to use HTTP Negotiate authentication when communicat-\n" --" ing with the given proxy. Use --negotiate for enabling HTTP\n" --" Negotiate with a remote host. (Added in 7.17.1)\n" --"\n" --, stdout); -- fputs( --" --proxy-ntlm\n" --" Tells curl to use HTTP NTLM authentication when communicating\n" --" with the given proxy. Use --ntlm for enabling NTLM with a remote\n" --" host.\n" --"\n" --" --proxy1.0 <proxyhost[:port]>\n" --" Use the specified HTTP 1.0 proxy. If the port number is not\n" --" specified, it is assumed at port 1080.\n" --"\n" --" The only difference between this and the HTTP proxy option (-x,\n" --, stdout); -- fputs( --" --proxy), is that attempts to use CONNECT through the proxy will\n" --" specify an HTTP 1.0 protocol instead of the default HTTP 1.1.\n" --"\n" --" --pubkey <key>\n" --" (SSH) Public key file name. Allows you to provide your public\n" --" key in this separate file.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -q If used as the first parameter on the command line, the curlrc\n" --, stdout); -- fputs( --" config file will not be read and used. See the -K, --config for\n" --" details on the default config file search path.\n" --"\n" --" -Q, --quote <command>\n" --" (FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP\n" --" server. Quote commands are sent BEFORE the transfer takes place\n" --" (just after the initial PWD command in an FTP transfer, to be\n" --" exact). To make commands take place after a successful transfer,\n" --, stdout); -- fputs( --" prefix them with a dash '-'. To make commands be sent after\n" --" curl has changed the working directory, just before the transfer\n" --" command(s), prefix the command with a '+' (this is only sup-\n" --" ported for FTP). You may specify any number of commands. If the\n" --" server returns failure for one of the commands, the entire oper-\n" --" ation will be aborted. You must send syntactically correct FTP\n" --, stdout); -- fputs( --" commands as RFC 959 defines to FTP servers, or one of the com-\n" --" mands listed below to SFTP servers. This option can be used\n" --" multiple times. When speaking to an FTP server, prefix the com-\n" --" mand with an asterisk (*) to make curl continue even if the com-\n" --" mand fails as by default curl will stop at first failure.\n" --"\n" --" SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP\n" --, stdout); -- fputs( --" quote commands itself before sending them to the server. File\n" --" names may be quoted shell-style to embed spaces or special char-\n" --" acters. Following is the list of all supported SFTP quote com-\n" --" mands:\n" --"\n" --" chgrp group file\n" --" The chgrp command sets the group ID of the file named by\n" --" the file operand to the group ID specified by the group\n" --, stdout); -- fputs( --" operand. The group operand is a decimal integer group ID.\n" --"\n" --" chmod mode file\n" --" The chmod command modifies the file mode bits of the\n" --" specified file. The mode operand is an octal integer mode\n" --" number.\n" --"\n" --" chown user file\n" --" The chown command sets the owner of the file named by the\n" --" file operand to the user ID specified by the user oper-\n" --, stdout); -- fputs( --" and. The user operand is a decimal integer user ID.\n" --"\n" --" ln source_file target_file\n" --" The ln and symlink commands create a symbolic link at the\n" --" target_file location pointing to the source_file loca-\n" --" tion.\n" --"\n" --" mkdir directory_name\n" --" The mkdir command creates the directory named by the\n" --" directory_name operand.\n" --"\n" --, stdout); -- fputs( --" pwd The pwd command returns the absolute pathname of the cur-\n" --" rent working directory.\n" --"\n" --" rename source target\n" --" The rename command renames the file or directory named by\n" --" the source operand to the destination path named by the\n" --" target operand.\n" --"\n" --" rm file\n" --" The rm command removes the file specified by the file op-\n" --" erand.\n" --"\n" --, stdout); -- fputs( --" rmdir directory\n" --" The rmdir command removes the directory entry specified\n" --" by the directory operand, provided it is empty.\n" --"\n" --" symlink source_file target_file\n" --" See ln.\n" --"\n" --" -r, --range <range>\n" --" (HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial docu-\n" --" ment) from a HTTP/1.1, FTP or SFTP server or a local FILE.\n" --" Ranges can be specified in a number of ways.\n" --"\n" --, stdout); -- fputs( --" 0-499 specifies the first 500 bytes\n" --"\n" --" 500-999 specifies the second 500 bytes\n" --"\n" --" -500 specifies the last 500 bytes\n" --"\n" --" 9500- specifies the bytes from offset 9500 and forward\n" --"\n" --" 0-0,-1 specifies the first and last byte only(*)(H)\n" --"\n" --" 500-700,600-799\n" --" specifies 300 bytes from offset 500(H)\n" --"\n" --" 100-199,500-599\n" --, stdout); -- fputs( --" specifies two separate 100-byte ranges(*)(H)\n" --"\n" --" (*) = NOTE that this will cause the server to reply with a multipart\n" --" response!\n" --"\n" --" Only digit characters (0-9) are valid in the 'start' and 'stop' fields\n" --" of the 'start-stop' range syntax. If a non-digit character is given in\n" --" the range, the server's response will be unspecified, depending on the\n" --" server's configuration.\n" --"\n" --, stdout); -- fputs( --" You should also be aware that many HTTP/1.1 servers do not have this\n" --" feature enabled, so that when you attempt to get a range, you'll\n" --" instead get the whole document.\n" --"\n" --" FTP and SFTP range downloads only support the simple 'start-stop' syn-\n" --" tax (optionally with one of the numbers omitted). FTP use depends on\n" --" the extended FTP command SIZE.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -R, --remote-time\n" --, stdout); -- fputs( --" When used, this will make curl attempt to figure out the time-\n" --" stamp of the remote file, and if that is available make the\n" --" local file get that same timestamp.\n" --"\n" --" --random-file <file>\n" --" (SSL) Specify the path name to file containing what will be con-\n" --" sidered as random data. The data is used to seed the random\n" --" engine for SSL connections. See also the --egd-file option.\n" --"\n" --, stdout); -- fputs( --" --raw (HTTP) When used, it disables all internal HTTP decoding of con-\n" --" tent or transfer encodings and instead makes them passed on\n" --" unaltered, raw. (Added in 7.16.2)\n" --"\n" --" --remote-name-all\n" --" This option changes the default action for all given URLs to be\n" --" dealt with as if -O, --remote-name were used for each one. So if\n" --" you want to disable that for a specific URL after --remote-name-\n" --, stdout); -- fputs( --" all has been used, you must use \"-o -\" or --no-remote-name.\n" --" (Added in 7.19.0)\n" --"\n" --" --resolve <host:port:address>\n" --" Provide a custom address for a specific host and port pair.\n" --" Using this, you can make the curl requests(s) use a specified\n" --" address and prevent the otherwise normally resolved address to\n" --" be used. Consider it a sort of /etc/hosts alternative provided\n" --, stdout); -- fputs( --" on the command line. The port number should be the number used\n" --" for the specific protocol the host will be used for. It means\n" --" you need several entries if you want to provide address for the\n" --" same host but different ports.\n" --"\n" --" This option can be used many times to add many host names to\n" --" resolve.\n" --"\n" --" (Added in 7.21.3)\n" --"\n" --" --retry <num>\n" --, stdout); -- fputs( --" If a transient error is returned when curl tries to perform a\n" --" transfer, it will retry this number of times before giving up.\n" --" Setting the number to 0 makes curl do no retries (which is the\n" --" default). Transient error means either: a timeout, an FTP 4xx\n" --" response code or an HTTP 5xx response code.\n" --"\n" --" When curl is about to retry a transfer, it will first wait one\n" --, stdout); -- fputs( --" second and then for all forthcoming retries it will double the\n" --" waiting time until it reaches 10 minutes which then will be the\n" --" delay between the rest of the retries. By using --retry-delay\n" --" you disable this exponential backoff algorithm. See also\n" --" --retry-max-time to limit the total time allowed for retries.\n" --" (Added in 7.12.3)\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" --retry-delay <seconds>\n" --" Make curl sleep this amount of time before each retry when a\n" --" transfer has failed with a transient error (it changes the\n" --" default backoff time algorithm between retries). This option is\n" --" only interesting if --retry is also used. Setting this delay to\n" --, stdout); -- fputs( --" zero will make curl use the default backoff time. (Added in\n" --" 7.12.3)\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --retry-max-time <seconds>\n" --" The retry timer is reset before the first transfer attempt.\n" --" Retries will be done as usual (see --retry) as long as the timer\n" --" hasn't reached this given limit. Notice that if the timer hasn't\n" --, stdout); -- fputs( --" reached the limit, the request will be made and while perform-\n" --" ing, it may take longer than this given time period. To limit a\n" --" single request's maximum time, use -m, --max-time. Set this\n" --" option to zero to not timeout retries. (Added in 7.12.3)\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -s, --silent\n" --" Silent or quiet mode. Don't show progress meter or error mes-\n" --, stdout); -- fputs( --" sages. Makes Curl mute. It will still output the data you ask\n" --" for, potentially even to the terminal/stdout unless you redirect\n" --" it.\n" --"\n" --" --sasl-ir\n" --" Enable initial response in SASL authentication. (Added in\n" --" 7.31.0)\n" --"\n" --" -S, --show-error\n" --" When used with -s it makes curl show an error message if it\n" --" fails.\n" --"\n" --" --ssl (FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.\n" --, stdout); -- fputs( --" Reverts to a non-secure connection if the server doesn't support\n" --" SSL/TLS. See also --ftp-ssl-control and --ssl-reqd for differ-\n" --" ent levels of encryption required. (Added in 7.20.0)\n" --"\n" --" This option was formerly known as --ftp-ssl (Added in 7.11.0).\n" --" That option name can still be used but will be removed in a\n" --" future version.\n" --"\n" --" --ssl-reqd\n" --, stdout); -- fputs( --" (FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.\n" --" Terminates the connection if the server doesn't support SSL/TLS.\n" --" (Added in 7.20.0)\n" --"\n" --" This option was formerly known as --ftp-ssl-reqd (added in\n" --" 7.15.5). That option name can still be used but will be removed\n" --" in a future version.\n" --"\n" --" --ssl-allow-beast\n" --" (SSL) This option tells curl to not work around a security flaw\n" --, stdout); -- fputs( --" in the SSL3 and TLS1.0 protocols known as BEAST. If this option\n" --" isn't used, the SSL layer may use workarounds known to cause\n" --" interoperability problems with some older SSL implementations.\n" --" WARNING: this option loosens the SSL security, and by using this\n" --" flag you ask for exactly that. (Added in 7.25.0)\n" --"\n" --" --socks4 <host[:port]>\n" --" Use the specified SOCKS4 proxy. If the port number is not speci-\n" --, stdout); -- fputs( --" fied, it is assumed at port 1080. (Added in 7.15.2)\n" --"\n" --" This option overrides any previous use of -x, --proxy, as they\n" --" are mutually exclusive.\n" --"\n" --" Since 7.21.7, this option is superfluous since you can specify a\n" --" socks4 proxy with -x, --proxy using a socks4:// protocol prefix.\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --socks4a <host[:port]>\n" --, stdout); -- fputs( --" Use the specified SOCKS4a proxy. If the port number is not spec-\n" --" ified, it is assumed at port 1080. (Added in 7.18.0)\n" --"\n" --" This option overrides any previous use of -x, --proxy, as they\n" --" are mutually exclusive.\n" --"\n" --" Since 7.21.7, this option is superfluous since you can specify a\n" --" socks4a proxy with -x, --proxy using a socks4a:// protocol pre-\n" --" fix.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" --socks5-hostname <host[:port]>\n" --" Use the specified SOCKS5 proxy (and let the proxy resolve the\n" --" host name). If the port number is not specified, it is assumed\n" --" at port 1080. (Added in 7.18.0)\n" --"\n" --" This option overrides any previous use of -x, --proxy, as they\n" --" are mutually exclusive.\n" --"\n" --, stdout); -- fputs( --" Since 7.21.7, this option is superfluous since you can specify a\n" --" socks5 hostname proxy with -x, --proxy using a socks5h:// proto-\n" --" col prefix.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --" (This option was previously wrongly documented and used as\n" --" --socks without the number appended.)\n" --"\n" --" --socks5 <host[:port]>\n" --, stdout); -- fputs( --" Use the specified SOCKS5 proxy - but resolve the host name\n" --" locally. If the port number is not specified, it is assumed at\n" --" port 1080.\n" --"\n" --" This option overrides any previous use of -x, --proxy, as they\n" --" are mutually exclusive.\n" --"\n" --" Since 7.21.7, this option is superfluous since you can specify a\n" --" socks5 proxy with -x, --proxy using a socks5:// protocol prefix.\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --" (This option was previously wrongly documented and used as\n" --" --socks without the number appended.)\n" --"\n" --" This option (as well as --socks4) does not work with IPV6, FTPS\n" --" or LDAP.\n" --"\n" --" --socks5-gssapi-service <servicename>\n" --" The default service name for a socks server is rcmd/server-fqdn.\n" --" This option allows you to change it.\n" --"\n" --, stdout); -- fputs( --" Examples: --socks5 proxy-name --socks5-gssapi-service sockd\n" --" would use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-\n" --" service sockd/real-name would use sockd/real-name for cases\n" --" where the proxy-name does not match the principal name. (Added\n" --" in 7.19.4).\n" --"\n" --" --socks5-gssapi-nec\n" --" As part of the gssapi negotiation a protection mode is negoti-\n" --, stdout); -- fputs( --" ated. RFC 1961 says in section 4.3/4.4 it should be protected,\n" --" but the NEC reference implementation does not. The option\n" --" --socks5-gssapi-nec allows the unprotected exchange of the pro-\n" --" tection mode negotiation. (Added in 7.19.4).\n" --"\n" --" --stderr <file>\n" --" Redirect all writes to stderr to the specified file instead. If\n" --" the file name is a plain '-', it is instead written to stdout.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" -t, --telnet-option <OPT=val>\n" --" Pass options to the telnet protocol. Supported options are:\n" --"\n" --" TTYPE=<term> Sets the terminal type.\n" --"\n" --" XDISPLOC=<X display> Sets the X display location.\n" --"\n" --" NEW_ENV=<var,val> Sets an environment variable.\n" --"\n" --" -T, --upload-file <file>\n" --" This transfers the specified local file to the remote URL. If\n" --, stdout); -- fputs( --" there is no file part in the specified URL, Curl will append the\n" --" local file name. NOTE that you must use a trailing / on the last\n" --" directory to really prove to Curl that there is no file name or\n" --" curl will think that your last directory name is the remote file\n" --" name to use. That will most likely cause the upload operation to\n" --" fail. If this is used on an HTTP(S) server, the PUT command will\n" --" be used.\n" --"\n" --, stdout); -- fputs( --" Use the file name \"-\" (a single dash) to use stdin instead of a\n" --" given file. Alternately, the file name \".\" (a single period)\n" --" may be specified instead of \"-\" to use stdin in non-blocking\n" --" mode to allow reading server output while stdin is being\n" --" uploaded.\n" --"\n" --" You can specify one -T for each URL on the command line. Each -T\n" --, stdout); -- fputs( --" + URL pair specifies what to upload and to where. curl also sup-\n" --" ports \"globbing\" of the -T argument, meaning that you can upload\n" --" multiple files to a single URL by using the same URL globbing\n" --" style supported in the URL, like this:\n" --"\n" --" curl -T \"{file1,file2}\" http://www.uploadtothissite.com\n" --"\n" --" or even\n" --"\n" --" curl -T \"img[1-1000].png\" ftp://ftp.picturemania.com/upload/\n" --"\n" --" --tcp-nodelay\n" --, stdout); -- fputs( --" Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n" --" page for details about this option. (Added in 7.11.2)\n" --"\n" --" --tftp-blksize <value>\n" --" (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block\n" --" size that curl will try to use when transferring data to or from\n" --" a TFTP server. By default 512 bytes will be used.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --, stdout); -- fputs( --" (Added in 7.20.0)\n" --"\n" --" --tlsauthtype <authtype>\n" --" Set TLS authentication type. Currently, the only supported\n" --" option is \"SRP\", for TLS-SRP (RFC 5054). If --tlsuser and\n" --" --tlspassword are specified but --tlsauthtype is not, then this\n" --" option defaults to \"SRP\". (Added in 7.21.4)\n" --"\n" --" --tlspassword <password>\n" --" Set password for use with the TLS authentication method speci-\n" --, stdout); -- fputs( --" fied with --tlsauthtype. Requires that --tlsuser also be set.\n" --" (Added in 7.21.4)\n" --"\n" --" --tlsuser <user>\n" --" Set username for use with the TLS authentication method speci-\n" --" fied with --tlsauthtype. Requires that --tlspassword also be\n" --" set. (Added in 7.21.4)\n" --"\n" --" --tlsv1.0\n" --" (SSL) Forces curl to use TLS version 1.0 when negotiating with a\n" --" remote TLS server. (Added in 7.34.0)\n" --"\n" --" --tlsv1.1\n" --, stdout); -- fputs( --" (SSL) Forces curl to use TLS version 1.1 when negotiating with a\n" --" remote TLS server. (Added in 7.34.0)\n" --"\n" --" --tlsv1.2\n" --" (SSL) Forces curl to use TLS version 1.2 when negotiating with a\n" --" remote TLS server. (Added in 7.34.0)\n" --"\n" --" --tr-encoding\n" --" (HTTP) Request a compressed Transfer-Encoding response using one\n" --" of the algorithms curl supports, and uncompress the data while\n" --" receiving it.\n" --"\n" --, stdout); -- fputs( --" (Added in 7.21.6)\n" --"\n" --" --trace <file>\n" --" Enables a full trace dump of all incoming and outgoing data,\n" --" including descriptive information, to the given output file. Use\n" --" \"-\" as filename to have the output sent to stdout.\n" --"\n" --" This option overrides previous uses of -v, --verbose or --trace-\n" --" ascii.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --trace-ascii <file>\n" --, stdout); -- fputs( --" Enables a full trace dump of all incoming and outgoing data,\n" --" including descriptive information, to the given output file. Use\n" --" \"-\" as filename to have the output sent to stdout.\n" --"\n" --" This is very similar to --trace, but leaves out the hex part and\n" --" only shows the ASCII part of the dump. It makes smaller output\n" --" that might be easier to read for untrained humans.\n" --"\n" --, stdout); -- fputs( --" This option overrides previous uses of -v, --verbose or --trace.\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --trace-time\n" --" Prepends a time stamp to each trace or verbose line that curl\n" --" displays. (Added in 7.14.0)\n" --"\n" --" -u, --user <user:password;options>\n" --" Specify the user name, password and optional login options to\n" --, stdout); -- fputs( --" use for server authentication. Overrides -n, --netrc and\n" --" --netrc-optional.\n" --"\n" --" If you simply specify the user name, with or without the login\n" --" options, curl will prompt for a password.\n" --"\n" --" If you use an SSPI-enabled curl binary and perform NTLM authen-\n" --" tication, you can force curl to select the user name and pass-\n" --" word from your environment by simply specifying a single colon\n" --, stdout); -- fputs( --" with this option: \"-u :\" or by specifying the login options on\n" --" their own, for example \"-u ;auth=NTLM\".\n" --"\n" --" You can use the optional login options part to specify protocol\n" --" specific options that may be used during authentication. At\n" --" present only IMAP, POP3 and SMTP support login options as part\n" --" of the user login information. For more information about the\n" --, stdout); -- fputs( --" login options please see RFC 2384, RFC 5092 and IETF draft\n" --" draft-earhart-url-smtp-00.txt (Added in 7.31.0).\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -U, --proxy-user <user:password>\n" --" Specify the user name and password to use for proxy authentica-\n" --" tion.\n" --"\n" --" If you use an SSPI-enabled curl binary and do NTLM authentica-\n" --, stdout); -- fputs( --" tion, you can force curl to pick up the user name and password\n" --" from your environment by simply specifying a single colon with\n" --" this option: \"-U :\".\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --url <URL>\n" --" Specify a URL to fetch. This option is mostly handy when you\n" --" want to specify URL(s) in a config file.\n" --"\n" --, stdout); -- fputs( --" This option may be used any number of times. To control where\n" --" this URL is written, use the -o, --output or the -O, --remote-\n" --" name options.\n" --" -v, --verbose\n" --" Makes the fetching more verbose/talkative. Mostly useful for\n" --" debugging. A line starting with '>' means \"header data\" sent by\n" --" curl, '<' means \"header data\" received by curl that is hidden in\n" --, stdout); -- fputs( --" normal cases, and a line starting with '*' means additional info\n" --" provided by curl.\n" --"\n" --" Note that if you only want HTTP headers in the output, -i,\n" --" --include might be the option you're looking for.\n" --"\n" --" If you think this option still doesn't give you enough details,\n" --" consider using --trace or --trace-ascii instead.\n" --"\n" --" This option overrides previous uses of --trace-ascii or --trace.\n" --"\n" --, stdout); -- fputs( --" Use -s, --silent to make curl quiet.\n" --"\n" --" -w, --write-out <format>\n" --" Defines what to display on stdout after a completed and success-\n" --" ful operation. The format is a string that may contain plain\n" --" text mixed with any number of variables. The string can be spec-\n" --" ified as \"string\", to get read from a particular file you spec-\n" --" ify it \"@filename\" and to tell curl to read the format from\n" --, stdout); -- fputs( --" stdin you write \"@-\".\n" --"\n" --" The variables present in the output format will be substituted\n" --" by the value or text that curl thinks fit, as described below.\n" --" All variables are specified as %{variable_name} and to output a\n" --" normal % you just write them as %%. You can output a newline by\n" --" using \\n, a carriage return with \\r and a tab space with \\t.\n" --"\n" --, stdout); -- fputs( --" NOTE: The %-symbol is a special symbol in the win32-environment,\n" --" where all occurrences of % must be doubled when using this\n" --" option.\n" --"\n" --" The variables available are:\n" --"\n" --" content_type The Content-Type of the requested document, if\n" --" there was any.\n" --"\n" --" filename_effective\n" --" The ultimate filename that curl writes out to.\n" --, stdout); -- fputs( --" This is only meaningful if curl is told to write\n" --" to a file with the --remote-name or --output\n" --" option. It's most useful in combination with the\n" --" --remote-header-name option. (Added in 7.25.1)\n" --"\n" --" ftp_entry_path The initial path curl ended up in when logging on\n" --" to the remote FTP server. (Added in 7.15.4)\n" --"\n" --, stdout); -- fputs( --" http_code The numerical response code that was found in the\n" --" last retrieved HTTP(S) or FTP(s) transfer. In\n" --" 7.18.2 the alias response_code was added to show\n" --" the same info.\n" --"\n" --" http_connect The numerical code that was found in the last\n" --" response (from a proxy) to a curl CONNECT\n" --" request. (Added in 7.12.4)\n" --"\n" --, stdout); -- fputs( --" local_ip The IP address of the local end of the most\n" --" recently done connection - can be either IPv4 or\n" --" IPv6 (Added in 7.29.0)\n" --"\n" --" local_port The local port number of the most recently done\n" --" connection (Added in 7.29.0)\n" --"\n" --" num_connects Number of new connects made in the recent trans-\n" --" fer. (Added in 7.12.3)\n" --"\n" --, stdout); -- fputs( --" num_redirects Number of redirects that were followed in the\n" --" request. (Added in 7.12.3)\n" --"\n" --" redirect_url When an HTTP request was made without -L to fol-\n" --" low redirects, this variable will show the actual\n" --" URL a redirect would take you to. (Added in\n" --" 7.18.2)\n" --"\n" --" remote_ip The remote IP address of the most recently done\n" --, stdout); -- fputs( --" connection - can be either IPv4 or IPv6 (Added in\n" --" 7.29.0)\n" --"\n" --" remote_port The remote port number of the most recently done\n" --" connection (Added in 7.29.0)\n" --"\n" --" size_download The total amount of bytes that were downloaded.\n" --"\n" --" size_header The total amount of bytes of the downloaded head-\n" --" ers.\n" --"\n" --, stdout); -- fputs( --" size_request The total amount of bytes that were sent in the\n" --" HTTP request.\n" --"\n" --" size_upload The total amount of bytes that were uploaded.\n" --"\n" --" speed_download The average download speed that curl measured for\n" --" the complete download. Bytes per second.\n" --"\n" --" speed_upload The average upload speed that curl measured for\n" --" the complete upload. Bytes per second.\n" --"\n" --, stdout); -- fputs( --" ssl_verify_result\n" --" The result of the SSL peer certificate verifica-\n" --" tion that was requested. 0 means the verification\n" --" was successful. (Added in 7.19.0)\n" --"\n" --" time_appconnect\n" --" The time, in seconds, it took from the start\n" --" until the SSL/SSH/etc connect/handshake to the\n" --, stdout); -- fputs( --" remote host was completed. (Added in 7.19.0)\n" --"\n" --" time_connect The time, in seconds, it took from the start\n" --" until the TCP connect to the remote host (or\n" --" proxy) was completed.\n" --"\n" --" time_namelookup\n" --" The time, in seconds, it took from the start\n" --" until the name resolving was completed.\n" --"\n" --" time_pretransfer\n" --, stdout); -- fputs( --" The time, in seconds, it took from the start\n" --" until the file transfer was just about to begin.\n" --" This includes all pre-transfer commands and nego-\n" --" tiations that are specific to the particular pro-\n" --" tocol(s) involved.\n" --"\n" --" time_redirect The time, in seconds, it took for all redirection\n" --, stdout); -- fputs( --" steps include name lookup, connect, pretransfer\n" --" and transfer before the final transaction was\n" --" started. time_redirect shows the complete execu-\n" --" tion time for multiple redirections. (Added in\n" --" 7.12.3)\n" --"\n" --" time_starttransfer\n" --" The time, in seconds, it took from the start\n" --, stdout); -- fputs( --" until the first byte was just about to be trans-\n" --" ferred. This includes time_pretransfer and also\n" --" the time the server needed to calculate the\n" --" result.\n" --"\n" --" time_total The total time, in seconds, that the full opera-\n" --" tion lasted. The time will be displayed with mil-\n" --" lisecond resolution.\n" --"\n" --, stdout); -- fputs( --" url_effective The URL that was fetched last. This is most mean-\n" --" ingful if you've told curl to follow location:\n" --" headers.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -x, --proxy <[protocol://][user:password@]proxyhost[:port]>\n" --" Use the specified proxy.\n" --"\n" --" The proxy string can be specified with a protocol:// prefix to\n" --, stdout); -- fputs( --" specify alternative proxy protocols. Use socks4://, socks4a://,\n" --" socks5:// or socks5h:// to request the specific SOCKS version to\n" --" be used. No protocol specified, http:// and all others will be\n" --" treated as HTTP proxies. (The protocol support was added in curl\n" --" 7.21.7)\n" --"\n" --" If the port number is not specified in the proxy string, it is\n" --" assumed to be 1080.\n" --"\n" --, stdout); -- fputs( --" This option overrides existing environment variables that set\n" --" the proxy to use. If there's an environment variable setting a\n" --" proxy, you can set proxy to \"\" to override it.\n" --"\n" --" All operations that are performed over an HTTP proxy will trans-\n" --" parently be converted to HTTP. It means that certain protocol\n" --" specific operations might not be available. This is not the case\n" --, stdout); -- fputs( --" if you can tunnel through the proxy, as one with the -p, --prox-\n" --" ytunnel option.\n" --"\n" --" User and password that might be provided in the proxy string are\n" --" URL decoded by curl. This allows you to pass in special charac-\n" --" ters such as @ by using %40 or pass in a colon with %3a.\n" --"\n" --" The proxy host can be specified the exact same way as the proxy\n" --" environment variables, including the protocol prefix (http://)\n" --, stdout); -- fputs( --" and the embedded user + password.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -X, --request <command>\n" --" (HTTP) Specifies a custom request method to use when communicat-\n" --" ing with the HTTP server. The specified request will be used\n" --" instead of the method otherwise used (which defaults to GET).\n" --" Read the HTTP 1.1 specification for details and explanations.\n" --, stdout); -- fputs( --" Common additional HTTP requests include PUT and DELETE, but\n" --" related technologies like WebDAV offers PROPFIND, COPY, MOVE and\n" --" more.\n" --"\n" --" Normally you don't need this option. All sorts of GET, HEAD,\n" --" POST and PUT requests are rather invoked by using dedicated com-\n" --" mand line options.\n" --"\n" --" This option only changes the actual word used in the HTTP\n" --, stdout); -- fputs( --" request, it does not alter the way curl behaves. So for example\n" --" if you want to make a proper HEAD request, using -X HEAD will\n" --" not suffice. You need to use the -I, --head option.\n" --"\n" --" (FTP) Specifies a custom FTP command to use instead of LIST when\n" --" doing file lists with FTP.\n" --"\n" --" (POP3) Specifies a custom POP3 command to use instead of LIST or\n" --" RETR. (Added in 7.26.0)\n" --"\n" --, stdout); -- fputs( --" (IMAP) Specifies a custom IMAP command to use instead of LIST.\n" --" (Added in 7.30.0)\n" --"\n" --" (SMTP) Specifies a custom SMTP command to use instead of HELP or\n" --" VRFY. (Added in 7.34.0)\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" --xattr\n" --" When saving output to a file, this option tells curl to store\n" --" certain file metadata in extended file attributes. Currently,\n" --, stdout); -- fputs( --" the URL is stored in the xdg.origin.url attribute and, for HTTP,\n" --" the content type is stored in the mime_type attribute. If the\n" --" file system does not support extended attributes, a warning is\n" --" issued.\n" --"\n" --" -y, --speed-time <time>\n" --" If a download is slower than speed-limit bytes per second during\n" --" a speed-time period, the download gets aborted. If speed-time is\n" --, stdout); -- fputs( --" used, the default speed-limit will be 1 unless set with -Y.\n" --"\n" --" This option controls transfers and thus will not affect slow\n" --" connects etc. If this is a concern for you, try the --connect-\n" --" timeout option.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -Y, --speed-limit <speed>\n" --" If a download is slower than this given speed (in bytes per sec-\n" --, stdout); -- fputs( --" ond) for speed-time seconds it gets aborted. speed-time is set\n" --" with -y and is 30 if not set.\n" --"\n" --" If this option is used several times, the last one will be used.\n" --"\n" --" -z, --time-cond <date expression>|<file>\n" --" (HTTP/FTP) Request a file that has been modified later than the\n" --" given time and date, or one that has been modified before that\n" --" time. The <date expression> can be all sorts of date strings or\n" --, stdout); -- fputs( --" if it doesn't match any internal ones, it is taken as a filename\n" --" and tries to get the modification date (mtime) from <file>\n" --" instead. See the curl_getdate(3) man pages for date expression\n" --" details.\n" --"\n" --" Start the date expression with a dash (-) to make it request for\n" --" a document that is older than the given date/time, default is a\n" --" document that is newer than the specified date/time.\n" --"\n" --, stdout); -- fputs( --" If this option is used several times, the last one will be used.\n" --"\n" --" -h, --help\n" --" Usage help.\n" --"\n" --" -M, --manual\n" --" Manual. Display the huge help text.\n" --"\n" --" -V, --version\n" --" Displays information about curl and the libcurl version it uses.\n" --" The first line includes the full version of curl, libcurl and\n" --" other 3rd party libraries linked with the executable.\n" --"\n" --, stdout); -- fputs( --" The second line (starts with \"Protocols:\") shows all protocols\n" --" that libcurl reports to support.\n" --"\n" --" The third line (starts with \"Features:\") shows specific features\n" --" libcurl reports to offer. Available features include:\n" --"\n" --" IPv6 You can use IPv6 with this.\n" --"\n" --" krb4 Krb4 for FTP is supported.\n" --"\n" --" SSL HTTPS and FTPS are supported.\n" --"\n" --, stdout); -- fputs( --" libz Automatic decompression of compressed files over HTTP is\n" --" supported.\n" --"\n" --" NTLM NTLM authentication is supported.\n" --"\n" --" GSS-Negotiate\n" --" Negotiate authentication and krb5 for FTP is supported.\n" --"\n" --" Debug This curl uses a libcurl built with Debug. This enables\n" --" more error-tracking and memory debugging etc. For curl-\n" --" developers only!\n" --"\n" --" AsynchDNS\n" --, stdout); -- fputs( --" This curl uses asynchronous name resolves.\n" --"\n" --" SPNEGO SPNEGO Negotiate authentication is supported.\n" --"\n" --" Largefile\n" --" This curl supports transfers of large files, files larger\n" --" than 2GB.\n" --"\n" --" IDN This curl supports IDN - international domain names.\n" --"\n" --" SSPI SSPI is supported. If you use NTLM and set a blank user\n" --, stdout); -- fputs( --" name, curl will authenticate with your current user and\n" --" password.\n" --"\n" --" TLS-SRP\n" --" SRP (Secure Remote Password) authentication is supported\n" --" for TLS.\n" --" Metalink\n" --" This curl supports Metalink (both version 3 and 4 (RFC\n" --" 5854)), which describes mirrors and hashes. curl will\n" --, stdout); -- fputs( --" use mirrors for failover if there are errors (such as the\n" --" file or server not being available).\n" --"\n" --"FILES\n" --" ~/.curlrc\n" --" Default config file, see -K, --config for details.\n" --"\n" --"ENVIRONMENT\n" --" The environment variables can be specified in lower case or upper case.\n" --" The lower case version has precedence. http_proxy is an exception as it\n" --" is only available in lower case.\n" --"\n" --, stdout); -- fputs( --" Using an environment variable to set the proxy has the same effect as\n" --" using the --proxy option.\n" --"\n" --" http_proxy [protocol://]<host>[:port]\n" --" Sets the proxy server to use for HTTP.\n" --" HTTPS_PROXY [protocol://]<host>[:port]\n" --" Sets the proxy server to use for HTTPS.\n" --"\n" --" [url-protocol]_PROXY [protocol://]<host>[:port]\n" --" Sets the proxy server to use for [url-protocol], where the pro-\n" --, stdout); -- fputs( --" tocol is a protocol that curl supports and as specified in a\n" --" URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP etc.\n" --"\n" --" ALL_PROXY [protocol://]<host>[:port]\n" --" Sets the proxy server to use if no protocol-specific proxy is\n" --" set.\n" --"\n" --" NO_PROXY <comma-separated list of hosts>\n" --" list of host names that shouldn't go through any proxy. If set\n" --" to a asterisk '*' only, it matches all hosts.\n" --"\n" --"PROXY PROTOCOL PREFIXES\n" --, stdout); -- fputs( --" Since curl version 7.21.7, the proxy string may be specified with a\n" --" protocol:// prefix to specify alternative proxy protocols.\n" --"\n" --" If no protocol is specified in the proxy string or if the string\n" --" doesn't match a supported one, the proxy will be treated as an HTTP\n" --" proxy.\n" --"\n" --" The supported proxy protocol prefixes are as follows:\n" --"\n" --" socks4://\n" --" Makes it the equivalent of --socks4\n" --"\n" --" socks4a://\n" --, stdout); -- fputs( --" Makes it the equivalent of --socks4a\n" --"\n" --" socks5://\n" --" Makes it the equivalent of --socks5\n" --"\n" --" socks5h://\n" --" Makes it the equivalent of --socks5-hostname\n" --"\n" --"EXIT CODES\n" --" There are a bunch of different error codes and their corresponding\n" --" error messages that may appear during bad conditions. At the time of\n" --" this writing, the exit codes are:\n" --"\n" --" 1 Unsupported protocol. This build of curl has no support for this\n" --, stdout); -- fputs( --" protocol.\n" --"\n" --" 2 Failed to initialize.\n" --"\n" --" 3 URL malformed. The syntax was not correct.\n" --"\n" --" 4 A feature or option that was needed to perform the desired\n" --" request was not enabled or was explicitly disabled at build-\n" --" time. To make curl able to do this, you probably need another\n" --" build of libcurl!\n" --"\n" --" 5 Couldn't resolve proxy. The given proxy host could not be\n" --" resolved.\n" --"\n" --, stdout); -- fputs( --" 6 Couldn't resolve host. The given remote host was not resolved.\n" --"\n" --" 7 Failed to connect to host.\n" --"\n" --" 8 FTP weird server reply. The server sent data curl couldn't\n" --" parse.\n" --"\n" --" 9 FTP access denied. The server denied login or denied access to\n" --" the particular resource or directory you wanted to reach. Most\n" --" often you tried to change to a directory that doesn't exist on\n" --" the server.\n" --"\n" --, stdout); -- fputs( --" 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the\n" --" PASS request.\n" --"\n" --" 13 FTP weird PASV reply, Curl couldn't parse the reply sent to the\n" --" PASV request.\n" --"\n" --" 14 FTP weird 227 format. Curl couldn't parse the 227-line the\n" --" server sent.\n" --"\n" --" 15 FTP can't get host. Couldn't resolve the host IP we got in the\n" --" 227-line.\n" --"\n" --, stdout); -- fputs( --" 17 FTP couldn't set binary. Couldn't change transfer method to\n" --" binary.\n" --"\n" --" 18 Partial file. Only a part of the file was transferred.\n" --"\n" --" 19 FTP couldn't download/access the given file, the RETR (or simi-\n" --" lar) command failed.\n" --"\n" --" 21 FTP quote error. A quote command returned error from the server.\n" --" 22 HTTP page not retrieved. The requested url was not found or\n" --, stdout); -- fputs( --" returned another error with the HTTP error code being 400 or\n" --" above. This return code only appears if -f, --fail is used.\n" --"\n" --" 23 Write error. Curl couldn't write data to a local filesystem or\n" --" similar.\n" --"\n" --" 25 FTP couldn't STOR file. The server denied the STOR operation,\n" --" used for FTP uploading.\n" --"\n" --" 26 Read error. Various reading problems.\n" --"\n" --" 27 Out of memory. A memory allocation request failed.\n" --"\n" --, stdout); -- fputs( --" 28 Operation timeout. The specified time-out period was reached\n" --" according to the conditions.\n" --"\n" --" 30 FTP PORT failed. The PORT command failed. Not all FTP servers\n" --" support the PORT command, try doing a transfer using PASV\n" --" instead!\n" --"\n" --" 31 FTP couldn't use REST. The REST command failed. This command is\n" --" used for resumed FTP transfers.\n" --"\n" --" 33 HTTP range error. The range \"command\" didn't work.\n" --"\n" --, stdout); -- fputs( --" 34 HTTP post error. Internal post-request generation error.\n" --"\n" --" 35 SSL connect error. The SSL handshaking failed.\n" --"\n" --" 36 FTP bad download resume. Couldn't continue an earlier aborted\n" --" download.\n" --"\n" --" 37 FILE couldn't read file. Failed to open the file. Permissions?\n" --"\n" --" 38 LDAP cannot bind. LDAP bind operation failed.\n" --"\n" --" 39 LDAP search failed.\n" --"\n" --" 41 Function not found. A required LDAP function was not found.\n" --"\n" --, stdout); -- fputs( --" 42 Aborted by callback. An application told curl to abort the oper-\n" --" ation.\n" --"\n" --" 43 Internal error. A function was called with a bad parameter.\n" --"\n" --" 45 Interface error. A specified outgoing interface could not be\n" --" used.\n" --"\n" --" 47 Too many redirects. When following redirects, curl hit the maxi-\n" --" mum amount.\n" --"\n" --" 48 Unknown option specified to libcurl. This indicates that you\n" --, stdout); -- fputs( --" passed a weird option to curl that was passed on to libcurl and\n" --" rejected. Read up in the manual!\n" --"\n" --" 49 Malformed telnet option.\n" --"\n" --" 51 The peer's SSL certificate or SSH MD5 fingerprint was not OK.\n" --"\n" --" 52 The server didn't reply anything, which here is considered an\n" --" error.\n" --"\n" --" 53 SSL crypto engine not found.\n" --"\n" --" 54 Cannot set SSL crypto engine as default.\n" --"\n" --" 55 Failed sending network data.\n" --"\n" --, stdout); -- fputs( --" 56 Failure in receiving network data.\n" --"\n" --" 58 Problem with the local certificate.\n" --"\n" --" 59 Couldn't use specified SSL cipher.\n" --"\n" --" 60 Peer certificate cannot be authenticated with known CA certifi-\n" --" cates.\n" --"\n" --" 61 Unrecognized transfer encoding.\n" --"\n" --" 62 Invalid LDAP URL.\n" --"\n" --" 63 Maximum file size exceeded.\n" --"\n" --" 64 Requested FTP SSL level failed.\n" --"\n" --" 65 Sending the data requires a rewind that failed.\n" --"\n" --, stdout); -- fputs( --" 66 Failed to initialise SSL Engine.\n" --"\n" --" 67 The user name, password, or similar was not accepted and curl\n" --" failed to log in.\n" --"\n" --" 68 File not found on TFTP server.\n" --"\n" --" 69 Permission problem on TFTP server.\n" --"\n" --" 70 Out of disk space on TFTP server.\n" --"\n" --" 71 Illegal TFTP operation.\n" --"\n" --" 72 Unknown TFTP transfer ID.\n" --"\n" --" 73 File already exists (TFTP).\n" --"\n" --" 74 No such user (TFTP).\n" --"\n" --, stdout); -- fputs( --" 75 Character conversion failed.\n" --"\n" --" 76 Character conversion functions required.\n" --"\n" --" 77 Problem with reading the SSL CA cert (path? access rights?).\n" --"\n" --" 78 The resource referenced in the URL does not exist.\n" --"\n" --" 79 An unspecified error occurred during the SSH session.\n" --"\n" --" 80 Failed to shut down the SSL connection.\n" --"\n" --" 82 Could not load CRL file, missing or wrong format (added in\n" --" 7.19.0).\n" --"\n" --, stdout); -- fputs( --" 83 Issuer check failed (added in 7.19.0).\n" --"\n" --" 84 The FTP PRET command failed\n" --"\n" --" 85 RTSP: mismatch of CSeq numbers\n" --"\n" --" 86 RTSP: mismatch of Session Identifiers\n" --"\n" --" 87 unable to parse FTP file list\n" --"\n" --" 88 FTP chunk callback reported error\n" --"\n" --" 89 No connection available, the session will be queued\n" --"\n" --" XX More error codes will appear here in future releases. The exist-\n" --" ing ones are meant to never change.\n" --"\n" --, stdout); -- fputs( --"AUTHORS / CONTRIBUTORS\n" --" Daniel Stenberg is the main author, but the whole list of contributors\n" --" is found in the separate THANKS file.\n" --"\n" --"WWW\n" --" http://curl.haxx.se\n" --"\n" --"FTP\n" --" ftp://ftp.sunet.se/pub/www/utilities/curl/\n" --"\n" --"SEE ALSO\n" --" ftp(1), wget(1)\n" --"\n" --"LATEST VERSION\n" --"\n" --" You always find news about what's going on as well as the latest versions\n" --" from the curl web pages, located at:\n" --"\n" --" http://curl.haxx.se\n" --"\n" --"SIMPLE USAGE\n" --"\n" --" Get the main page from Netscape's web-server:\n" --"\n" --, stdout); -- fputs( --" curl http://www.netscape.com/\n" --"\n" --" Get the README file the user's home directory at funet's ftp-server:\n" --"\n" --" curl ftp://ftp.funet.fi/README\n" --"\n" --" Get a web page from a server using port 8000:\n" --"\n" --" curl http://www.weirdserver.com:8000/\n" --"\n" --" Get a directory listing of an FTP site:\n" --"\n" --" curl ftp://cool.haxx.se/\n" --"\n" --" Get the definition of curl from a dictionary:\n" --"\n" --" curl dict://dict.org/m:curl\n" --"\n" --" Fetch two documents at once:\n" --"\n" --, stdout); -- fputs( --" curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/\n" --"\n" --" Get a file off an FTPS server:\n" --"\n" --" curl ftps://files.are.secure.com/secrets.txt\n" --"\n" --" or use the more appropriate FTPS way to get the same file:\n" --"\n" --" curl --ftp-ssl ftp://files.are.secure.com/secrets.txt\n" --"\n" --" Get a file from an SSH server using SFTP:\n" --"\n" --" curl -u username sftp://shell.example.com/etc/issue\n" --"\n" --" Get a file from an SSH server using SCP using a private key to authenticate:\n" --"\n" --, stdout); -- fputs( --" curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \\\n" --" scp://shell.example.com/~/personal.txt\n" --"\n" --" Get the main page from an IPv6 web server:\n" --"\n" --" curl -g \"http://[2001:1890:1112:1::20]/\"\n" --"\n" --"DOWNLOAD TO A FILE\n" --"\n" --" Get a web page and store in a local file with a specific name:\n" --"\n" --" curl -o thatpage.html http://www.netscape.com/\n" --"\n" --" Get a web page and store in a local file, make the local file get the name\n" --, stdout); -- fputs( --" of the remote document (if no file name part is specified in the URL, this\n" --" will fail):\n" --"\n" --" curl -O http://www.netscape.com/index.html\n" --"\n" --" Fetch two files and store them with their remote names:\n" --"\n" --" curl -O www.haxx.se/index.html -O curl.haxx.se/download.html\n" --"\n" --"USING PASSWORDS\n" --"\n" --" FTP\n" --"\n" --" To ftp files using name+passwd, include them in the URL like:\n" --"\n" --" curl ftp://name:passwd@machine.domain:port/full/path/to/file\n" --"\n" --" or specify them with the -u flag like\n" --"\n" --, stdout); -- fputs( --" curl -u name:passwd ftp://machine.domain:port/full/path/to/file\n" --"\n" --" FTPS\n" --"\n" --" It is just like for FTP, but you may also want to specify and use\n" --" SSL-specific options for certificates etc.\n" --"\n" --" Note that using FTPS:// as prefix is the \"implicit\" way as described in the\n" --" standards while the recommended \"explicit\" way is done by using FTP:// and\n" --" the --ftp-ssl option.\n" --"\n" --" SFTP / SCP\n" --"\n" --" This is similar to FTP, but you can specify a private key to use instead of\n" --, stdout); -- fputs( --" a password. Note that the private key may itself be protected by a password\n" --" that is unrelated to the login password of the remote system. If you\n" --" provide a private key file you must also provide a public key file.\n" --"\n" --" HTTP\n" --"\n" --" Curl also supports user and password in HTTP URLs, thus you can pick a file\n" --" like:\n" --"\n" --" curl http://name:passwd@machine.domain/full/path/to/file\n" --"\n" --" or specify user and password separately like in\n" --"\n" --, stdout); -- fputs( --" curl -u name:passwd http://machine.domain/full/path/to/file\n" --"\n" --" HTTP offers many different methods of authentication and curl supports\n" --" several: Basic, Digest, NTLM and Negotiate. Without telling which method to\n" --" use, curl defaults to Basic. You can also ask curl to pick the most secure\n" --" ones out of the ones that the server accepts for the given URL, by using\n" --" --anyauth.\n" --"\n" --" NOTE! According to the URL specification, HTTP URLs can not contain a user\n" --, stdout); -- fputs( --" and password, so that style will not work when using curl via a proxy, even\n" --" though curl allows it at other times. When using a proxy, you _must_ use\n" --" the -u style for user and password.\n" --"\n" --" HTTPS\n" --"\n" --" Probably most commonly used with private certificates, as explained below.\n" --"\n" --"PROXY\n" --"\n" --" curl supports both HTTP and SOCKS proxy servers, with optional authentication.\n" --" It does not have special support for FTP proxy servers since there are no\n" --, stdout); -- fputs( --" standards for those, but it can still be made to work with many of them. You\n" --" can also use both HTTP and SOCKS proxies to transfer files to and from FTP\n" --" servers.\n" --"\n" --" Get an ftp file using an HTTP proxy named my-proxy that uses port 888:\n" --"\n" --" curl -x my-proxy:888 ftp://ftp.leachsite.com/README\n" --"\n" --" Get a file from an HTTP server that requires user and password, using the\n" --" same proxy as above:\n" --"\n" --" curl -u user:passwd -x my-proxy:888 http://www.get.this/\n" --"\n" --, stdout); -- fputs( --" Some proxies require special authentication. Specify by using -U as above:\n" --"\n" --" curl -U user:passwd -x my-proxy:888 http://www.get.this/\n" --"\n" --" A comma-separated list of hosts and domains which do not use the proxy can\n" --" be specified as:\n" --"\n" --" curl --noproxy localhost,get.this -x my-proxy:888 http://www.get.this/\n" --"\n" --" If the proxy is specified with --proxy1.0 instead of --proxy or -x, then\n" --" curl will use HTTP/1.0 instead of HTTP/1.1 for any CONNECT attempts.\n" --"\n" --, stdout); -- fputs( --" curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.\n" --"\n" --" See also the environment variables Curl supports that offer further proxy\n" --" control.\n" --"\n" --" Most FTP proxy servers are set up to appear as a normal FTP server from the\n" --" client's perspective, with special commands to select the remote FTP server.\n" --" curl supports the -u, -Q and --ftp-account options that can be used to\n" --" set up transfers through many FTP proxies. For example, a file can be\n" --, stdout); -- fputs( --" uploaded to a remote FTP server using a Blue Coat FTP proxy with the\n" --" options:\n" --"\n" --" curl -u \"Remote-FTP-Username@remote.ftp.server Proxy-Username:Remote-Pass\" \\\n" --" --ftp-account Proxy-Password --upload-file local-file \\\n" --" ftp://my-ftp.proxy.server:21/remote/upload/path/\n" --"\n" --" See the manual for your FTP proxy to determine the form it expects to set up\n" --" transfers, and curl's -v option to see exactly what curl is sending.\n" --"\n" --"RANGES\n" --"\n" --" HTTP 1.1 introduced byte-ranges. Using this, a client can request\n" --, stdout); -- fputs( --" to get only one or more subparts of a specified document. Curl supports\n" --" this with the -r flag.\n" --"\n" --" Get the first 100 bytes of a document:\n" --"\n" --" curl -r 0-99 http://www.get.this/\n" --"\n" --" Get the last 500 bytes of a document:\n" --"\n" --" curl -r -500 http://www.get.this/\n" --"\n" --" Curl also supports simple ranges for FTP files as well. Then you can only\n" --" specify start and stop position.\n" --"\n" --" Get the first 100 bytes of a document using FTP:\n" --"\n" --" curl -r 0-99 ftp://www.get.this/README\n" --"\n" --"UPLOADING\n" --"\n" --, stdout); -- fputs( --" FTP / FTPS / SFTP / SCP\n" --"\n" --" Upload all data on stdin to a specified server:\n" --"\n" --" curl -T - ftp://ftp.upload.com/myfile\n" --"\n" --" Upload data from a specified file, login with user and password:\n" --"\n" --" curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile\n" --"\n" --" Upload a local file to the remote site, and use the local file name at the remote\n" --" site too:\n" --"\n" --" curl -T uploadfile -u user:passwd ftp://ftp.upload.com/\n" --"\n" --" Upload a local file to get appended to the remote file:\n" --"\n" --, stdout); -- fputs( --" curl -T localfile -a ftp://ftp.upload.com/remotefile\n" --"\n" --" Curl also supports ftp upload through a proxy, but only if the proxy is\n" --" configured to allow that kind of tunneling. If it does, you can run curl in\n" --" a fashion similar to:\n" --"\n" --" curl --proxytunnel -x proxy:port -T localfile ftp.upload.com\n" --"\n" --" HTTP\n" --"\n" --" Upload all data on stdin to a specified HTTP site:\n" --"\n" --" curl -T - http://www.upload.com/myfile\n" --"\n" --" Note that the HTTP server must have been configured to accept PUT before\n" --, stdout); -- fputs( --" this can be done successfully.\n" --"\n" --" For other ways to do HTTP data upload, see the POST section below.\n" --"\n" --"VERBOSE / DEBUG\n" --"\n" --" If curl fails where it isn't supposed to, if the servers don't let you in,\n" --" if you can't understand the responses: use the -v flag to get verbose\n" --" fetching. Curl will output lots of info and what it sends and receives in\n" --" order to let the user see all client-server interaction (but it won't show\n" --" you the actual data).\n" --"\n" --" curl -v ftp://ftp.upload.com/\n" --"\n" --, stdout); -- fputs( --" To get even more details and information on what curl does, try using the\n" --" --trace or --trace-ascii options with a given file name to log to, like\n" --" this:\n" --"\n" --" curl --trace trace.txt www.haxx.se\n" --"\n" --"\n" --"DETAILED INFORMATION\n" --"\n" --" Different protocols provide different ways of getting detailed information\n" --" about specific files/documents. To get curl to show detailed information\n" --" about a single file, you should use -I/--head option. It displays all\n" --, stdout); -- fputs( --" available info on a single file for HTTP and FTP. The HTTP information is a\n" --" lot more extensive.\n" --"\n" --" For HTTP, you can get the header information (the same as -I would show)\n" --" shown before the data by using -i/--include. Curl understands the\n" --" -D/--dump-header option when getting files from both FTP and HTTP, and it\n" --" will then store the headers in the specified file.\n" --"\n" --" Store the HTTP headers in a separate file (headers.txt in the example):\n" --"\n" --, stdout); -- fputs( --" curl --dump-header headers.txt curl.haxx.se\n" --"\n" --" Note that headers stored in a separate file can be very useful at a later\n" --" time if you want curl to use cookies sent by the server. More about that in\n" --" the cookies section.\n" --"\n" --"POST (HTTP)\n" --"\n" --" It's easy to post data using curl. This is done using the -d <data>\n" --" option. The post data must be urlencoded.\n" --"\n" --" Post a simple \"name\" and \"phone\" guestbook.\n" --"\n" --" curl -d \"name=Rafael%20Sagula&phone=3320780\" \\\n" --, stdout); -- fputs( --" http://www.where.com/guest.cgi\n" --"\n" --" How to post a form with curl, lesson #1:\n" --"\n" --" Dig out all the <input> tags in the form that you want to fill in. (There's\n" --" a perl program called formfind.pl on the curl site that helps with this).\n" --"\n" --" If there's a \"normal\" post, you use -d to post. -d takes a full \"post\n" --" string\", which is in the format\n" --"\n" --" <variable1>=<data1>&<variable2>=<data2>&...\n" --"\n" --" The 'variable' names are the names set with \"name=\" in the <input> tags, and\n" --, stdout); -- fputs( --" the data is the contents you want to fill in for the inputs. The data *must*\n" --" be properly URL encoded. That means you replace space with + and that you\n" --" replace weird letters with %XX where XX is the hexadecimal representation of\n" --" the letter's ASCII code.\n" --"\n" --" Example:\n" --"\n" --" (page located at http://www.formpost.com/getthis/\n" --"\n" --" <form action=\"post.cgi\" method=\"post\">\n" --" <input name=user size=10>\n" --" <input name=pass type=password size=10>\n" --, stdout); -- fputs( --" <input name=id type=hidden value=\"blablabla\">\n" --" <input name=ding value=\"submit\">\n" --" </form>\n" --"\n" --" We want to enter user 'foobar' with password '12345'.\n" --"\n" --" To post to this, you enter a curl command line like:\n" --"\n" --" curl -d \"user=foobar&pass=12345&id=blablabla&ding=submit\" (continues)\n" --" http://www.formpost.com/getthis/post.cgi\n" --"\n" --"\n" --" While -d uses the application/x-www-form-urlencoded mime-type, generally\n" --, stdout); -- fputs( --" understood by CGI's and similar, curl also supports the more capable\n" --" multipart/form-data type. This latter type supports things like file upload.\n" --"\n" --" -F accepts parameters like -F \"name=contents\". If you want the contents to\n" --" be read from a file, use <@filename> as contents. When specifying a file,\n" --" you can also specify the file content type by appending ';type=<mime type>'\n" --" to the file name. You can also post the contents of several files in one\n" --, stdout); -- fputs( --" field. For example, the field name 'coolfiles' is used to send three files,\n" --" with different content types using the following syntax:\n" --"\n" --" curl -F \"coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html\" \\\n" --" http://www.post.com/postit.cgi\n" --"\n" --" If the content-type is not specified, curl will try to guess from the file\n" --" extension (it only knows a few), or use the previously specified type (from\n" --" an earlier file if several files are specified in a list) or else it will\n" --, stdout); -- fputs( --" use the default type 'application/octet-stream'.\n" --"\n" --" Emulate a fill-in form with -F. Let's say you fill in three fields in a\n" --" form. One field is a file name which to post, one field is your name and one\n" --" field is a file description. We want to post the file we have written named\n" --" \"cooltext.txt\". To let curl do the posting of this data instead of your\n" --" favourite browser, you have to read the HTML source of the form page and\n" --, stdout); -- fputs( --" find the names of the input fields. In our example, the input field names\n" --" are 'file', 'yourname' and 'filedescription'.\n" --"\n" --" curl -F \"file=@cooltext.txt\" -F \"yourname=Daniel\" \\\n" --" -F \"filedescription=Cool text file with cool text inside\" \\\n" --" http://www.post.com/postit.cgi\n" --"\n" --" To send two files in one post you can do it in two ways:\n" --"\n" --" 1. Send multiple files in a single \"field\" with a single field name:\n" --"\n" --" curl -F \"pictures=@dog.gif,cat.gif\"\n" --"\n" --, stdout); -- fputs( --" 2. Send two fields with two field names:\n" --"\n" --" curl -F \"docpicture=@dog.gif\" -F \"catpicture=@cat.gif\"\n" --"\n" --" To send a field value literally without interpreting a leading '@'\n" --" or '<', or an embedded ';type=', use --form-string instead of\n" --" -F. This is recommended when the value is obtained from a user or\n" --" some other unpredictable source. Under these circumstances, using\n" --" -F instead of --form-string would allow a user to trick curl into\n" --" uploading a file.\n" --"\n" --"REFERRER\n" --"\n" --, stdout); -- fputs( --" An HTTP request has the option to include information about which address\n" --" referred it to the actual page. Curl allows you to specify the\n" --" referrer to be used on the command line. It is especially useful to\n" --" fool or trick stupid servers or CGI scripts that rely on that information\n" --" being available or contain certain data.\n" --"\n" --" curl -e www.coolsite.com http://www.showme.com/\n" --"\n" --" NOTE: The Referer: [sic] field is defined in the HTTP spec to be a full URL.\n" --"\n" --"USER AGENT\n" --"\n" --, stdout); -- fputs( --" An HTTP request has the option to include information about the browser\n" --" that generated the request. Curl allows it to be specified on the command\n" --" line. It is especially useful to fool or trick stupid servers or CGI\n" --" scripts that only accept certain browsers.\n" --"\n" --" Example:\n" --"\n" --" curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/\n" --"\n" --" Other common strings:\n" --" 'Mozilla/3.0 (Win95; I)' Netscape Version 3 for Windows 95\n" --, stdout); -- fputs( --" 'Mozilla/3.04 (Win95; U)' Netscape Version 3 for Windows 95\n" --" 'Mozilla/2.02 (OS/2; U)' Netscape Version 2 for OS/2\n" --" 'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)' NS for AIX\n" --" 'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)' NS for Linux\n" --"\n" --" Note that Internet Explorer tries hard to be compatible in every way:\n" --" 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)' MSIE for W95\n" --"\n" --" Mozilla is not the only possible User-Agent name:\n" --, stdout); -- fputs( --" 'Konqueror/1.0' KDE File Manager desktop client\n" --" 'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser\n" --"\n" --"COOKIES\n" --"\n" --" Cookies are generally used by web servers to keep state information at the\n" --" client's side. The server sets cookies by sending a response line in the\n" --" headers that looks like 'Set-Cookie: <data>' where the data part then\n" --" typically contains a set of NAME=VALUE pairs (separated by semicolons ';'\n" --, stdout); -- fputs( --" like \"NAME1=VALUE1; NAME2=VALUE2;\"). The server can also specify for what\n" --" path the \"cookie\" should be used for (by specifying \"path=value\"), when the\n" --" cookie should expire (\"expire=DATE\"), for what domain to use it\n" --" (\"domain=NAME\") and if it should be used on secure connections only\n" --" (\"secure\").\n" --"\n" --" If you've received a page from a server that contains a header like:\n" --" Set-Cookie: sessionid=boo123; path=\"/foo\";\n" --"\n" --, stdout); -- fputs( --" it means the server wants that first pair passed on when we get anything in\n" --" a path beginning with \"/foo\".\n" --"\n" --" Example, get a page that wants my name passed in a cookie:\n" --"\n" --" curl -b \"name=Daniel\" www.sillypage.com\n" --"\n" --" Curl also has the ability to use previously received cookies in following\n" --" sessions. If you get cookies from a server and store them in a file in a\n" --" manner similar to:\n" --"\n" --" curl --dump-header headers www.example.com\n" --"\n" --, stdout); -- fputs( --" ... you can then in a second connect to that (or another) site, use the\n" --" cookies from the 'headers' file like:\n" --"\n" --" curl -b headers www.example.com\n" --"\n" --" While saving headers to a file is a working way to store cookies, it is\n" --" however error-prone and not the preferred way to do this. Instead, make curl\n" --" save the incoming cookies using the well-known netscape cookie format like\n" --" this:\n" --"\n" --" curl -c cookies.txt www.example.com\n" --"\n" --, stdout); -- fputs( --" Note that by specifying -b you enable the \"cookie awareness\" and with -L\n" --" you can make curl follow a location: (which often is used in combination\n" --" with cookies). So that if a site sends cookies and a location, you can\n" --" use a non-existing file to trigger the cookie awareness like:\n" --"\n" --" curl -L -b empty.txt www.example.com\n" --"\n" --" The file to read cookies from must be formatted using plain HTTP headers OR\n" --" as netscape's cookie file. Curl will determine what kind it is based on the\n" --, stdout); -- fputs( --" file contents. In the above command, curl will parse the header and store\n" --" the cookies received from www.example.com. curl will send to the server the\n" --" stored cookies which match the request as it follows the location. The\n" --" file \"empty.txt\" may be a nonexistent file.\n" --"\n" --" Alas, to both read and write cookies from a netscape cookie file, you can\n" --" set both -b and -c to use the same file:\n" --"\n" --" curl -b cookies.txt -c cookies.txt www.example.com\n" --"\n" --"PROGRESS METER\n" --"\n" --, stdout); -- fputs( --" The progress meter exists to show a user that something actually is\n" --" happening. The different fields in the output have the following meaning:\n" --"\n" --" % Total % Received % Xferd Average Speed Time Curr.\n" --" Dload Upload Total Current Left Speed\n" --" 0 151M 0 38608 0 0 9406 0 4:41:43 0:00:04 4:41:39 9287\n" --"\n" --" From left-to-right:\n" --" % - percentage completed of the whole transfer\n" --, stdout); -- fputs( --" Total - total size of the whole expected transfer\n" --" % - percentage completed of the download\n" --" Received - currently downloaded amount of bytes\n" --" % - percentage completed of the upload\n" --" Xferd - currently uploaded amount of bytes\n" --" Average Speed\n" --" Dload - the average transfer speed of the download\n" --" Average Speed\n" --" Upload - the average transfer speed of the upload\n" --" Time Total - expected time to complete the operation\n" --, stdout); -- fputs( --" Time Current - time passed since the invoke\n" --" Time Left - expected time left to completion\n" --" Curr.Speed - the average transfer speed the last 5 seconds (the first\n" --" 5 seconds of a transfer is based on less time of course.)\n" --"\n" --" The -# option will display a totally different progress bar that doesn't\n" --" need much explanation!\n" --"\n" --"SPEED LIMIT\n" --"\n" --" Curl allows the user to set the transfer speed conditions that must be met\n" --, stdout); -- fputs( --" to let the transfer keep going. By using the switch -y and -Y you\n" --" can make curl abort transfers if the transfer speed is below the specified\n" --" lowest limit for a specified time.\n" --"\n" --" To have curl abort the download if the speed is slower than 3000 bytes per\n" --" second for 1 minute, run:\n" --"\n" --" curl -Y 3000 -y 60 www.far-away-site.com\n" --"\n" --" This can very well be used in combination with the overall time limit, so\n" --" that the above operation must be completed in whole within 30 minutes:\n" --"\n" --, stdout); -- fputs( --" curl -m 1800 -Y 3000 -y 60 www.far-away-site.com\n" --"\n" --" Forcing curl not to transfer data faster than a given rate is also possible,\n" --" which might be useful if you're using a limited bandwidth connection and you\n" --" don't want your transfer to use all of it (sometimes referred to as\n" --" \"bandwidth throttle\").\n" --"\n" --" Make curl transfer data no faster than 10 kilobytes per second:\n" --"\n" --" curl --limit-rate 10K www.far-away-site.com\n" --"\n" --" or\n" --"\n" --" curl --limit-rate 10240 www.far-away-site.com\n" --"\n" --, stdout); -- fputs( --" Or prevent curl from uploading data faster than 1 megabyte per second:\n" --"\n" --" curl -T upload --limit-rate 1M ftp://uploadshereplease.com\n" --"\n" --" When using the --limit-rate option, the transfer rate is regulated on a\n" --" per-second basis, which will cause the total transfer speed to become lower\n" --" than the given number. Sometimes of course substantially lower, if your\n" --" transfer stalls during periods.\n" --"\n" --"CONFIG FILE\n" --"\n" --" Curl automatically tries to read the .curlrc file (or _curlrc file on win32\n" --, stdout); -- fputs( --" systems) from the user's home dir on startup.\n" --"\n" --" The config file could be made up with normal command line switches, but you\n" --" can also specify the long options without the dashes to make it more\n" --" readable. You can separate the options and the parameter with spaces, or\n" --" with = or :. Comments can be used within the file. If the first letter on a\n" --" line is a '#'-symbol the rest of the line is treated as a comment.\n" --"\n" --" If you want the parameter to contain spaces, you must enclose the entire\n" --, stdout); -- fputs( --" parameter within double quotes (\"). Within those quotes, you specify a\n" --" quote as \\\".\n" --"\n" --" NOTE: You must specify options and their arguments on the same line.\n" --"\n" --" Example, set default time out and proxy in a config file:\n" --"\n" --" # We want a 30 minute timeout:\n" --" -m 1800\n" --" # ... and we use a proxy for all accesses:\n" --" proxy = proxy.our.domain.com:8080\n" --"\n" --" White spaces ARE significant at the end of lines, but all white spaces\n" --, stdout); -- fputs( --" leading up to the first characters of each line are ignored.\n" --"\n" --" Prevent curl from reading the default file by using -q as the first command\n" --" line parameter, like:\n" --"\n" --" curl -q www.thatsite.com\n" --"\n" --" Force curl to get and display a local help page in case it is invoked\n" --" without URL by making a config file similar to:\n" --"\n" --" # default url to get\n" --" url = \"http://help.with.curl.com/curlhelp.html\"\n" --"\n" --" You can specify another config file to be read by using the -K/--config\n" --, stdout); -- fputs( --" flag. If you set config file name to \"-\" it'll read the config from stdin,\n" --" which can be handy if you want to hide options from being visible in process\n" --" tables etc:\n" --"\n" --" echo \"user = user:passwd\" | curl -K - http://that.secret.site.com\n" --"\n" --"EXTRA HEADERS\n" --"\n" --" When using curl in your own very special programs, you may end up needing\n" --" to pass on your own custom headers when getting a web page. You can do\n" --" this by using the -H flag.\n" --"\n" --, stdout); -- fputs( --" Example, send the header \"X-you-and-me: yes\" to the server when getting a\n" --" page:\n" --"\n" --" curl -H \"X-you-and-me: yes\" www.love.com\n" --"\n" --" This can also be useful in case you want curl to send a different text in a\n" --" header than it normally does. The -H header you specify then replaces the\n" --" header curl would normally send. If you replace an internal header with an\n" --" empty one, you prevent that header from being sent. To prevent the Host:\n" --" header from being used:\n" --"\n" --, stdout); -- fputs( --" curl -H \"Host:\" www.server.com\n" --"\n" --"FTP and PATH NAMES\n" --"\n" --" Do note that when getting files with the ftp:// URL, the given path is\n" --" relative the directory you enter. To get the file 'README' from your home\n" --" directory at your ftp site, do:\n" --"\n" --" curl ftp://user:passwd@my.site.com/README\n" --"\n" --" But if you want the README file from the root directory of that very same\n" --" site, you need to specify the absolute file name:\n" --"\n" --" curl ftp://user:passwd@my.site.com//README\n" --"\n" --, stdout); -- fputs( --" (I.e with an extra slash in front of the file name.)\n" --"\n" --"SFTP and SCP and PATH NAMES\n" --"\n" --" With sftp: and scp: URLs, the path name given is the absolute name on the\n" --" server. To access a file relative to the remote user's home directory,\n" --" prefix the file with /~/ , such as:\n" --"\n" --" curl -u $USER sftp://home.example.com/~/.bashrc\n" --"\n" --"FTP and firewalls\n" --"\n" --" The FTP protocol requires one of the involved parties to open a second\n" --, stdout); -- fputs( --" connection as soon as data is about to get transferred. There are two ways to\n" --" do this.\n" --"\n" --" The default way for curl is to issue the PASV command which causes the\n" --" server to open another port and await another connection performed by the\n" --" client. This is good if the client is behind a firewall that doesn't allow\n" --" incoming connections.\n" --"\n" --" curl ftp.download.com\n" --"\n" --" If the server, for example, is behind a firewall that doesn't allow connections\n" --, stdout); -- fputs( --" on ports other than 21 (or if it just doesn't support the PASV command), the\n" --" other way to do it is to use the PORT command and instruct the server to\n" --" connect to the client on the given IP number and port (as parameters to the\n" --" PORT command).\n" --"\n" --" The -P flag to curl supports a few different options. Your machine may have\n" --" several IP-addresses and/or network interfaces and curl allows you to select\n" --" which of them to use. Default address can also be used:\n" --"\n" --, stdout); -- fputs( --" curl -P - ftp.download.com\n" --"\n" --" Download with PORT but use the IP address of our 'le0' interface (this does\n" --" not work on windows):\n" --"\n" --" curl -P le0 ftp.download.com\n" --"\n" --" Download with PORT but use 192.168.0.10 as our IP address to use:\n" --"\n" --" curl -P 192.168.0.10 ftp.download.com\n" --"\n" --"NETWORK INTERFACE\n" --"\n" --" Get a web page from a server using a specified port for the interface:\n" --"\n" --" curl --interface eth0:1 http://www.netscape.com/\n" --"\n" --" or\n" --"\n" --, stdout); -- fputs( --" curl --interface 192.168.1.10 http://www.netscape.com/\n" --"\n" --"HTTPS\n" --"\n" --" Secure HTTP requires SSL libraries to be installed and used when curl is\n" --" built. If that is done, curl is capable of retrieving and posting documents\n" --" using the HTTPS protocol.\n" --"\n" --" Example:\n" --"\n" --" curl https://www.secure-site.com\n" --"\n" --" Curl is also capable of using your personal certificates to get/post files\n" --" from sites that require valid certificates. The only drawback is that the\n" --, stdout); -- fputs( --" certificate needs to be in PEM-format. PEM is a standard and open format to\n" --" store certificates with, but it is not used by the most commonly used\n" --" browsers (Netscape and MSIE both use the so called PKCS#12 format). If you\n" --" want curl to use the certificates you use with your (favourite) browser, you\n" --" may need to download/compile a converter that can convert your browser's\n" --" formatted certificates to PEM formatted ones. This kind of converter is\n" --, stdout); -- fputs( --" included in recent versions of OpenSSL, and for older versions Dr Stephen\n" --" N. Henson has written a patch for SSLeay that adds this functionality. You\n" --" can get his patch (that requires an SSLeay installation) from his site at:\n" --" http://www.drh-consultancy.demon.co.uk/\n" --"\n" --" Example on how to automatically retrieve a document using a certificate with\n" --" a personal password:\n" --"\n" --" curl -E /path/to/cert.pem:password https://secure.site.com/\n" --"\n" --, stdout); -- fputs( --" If you neglect to specify the password on the command line, you will be\n" --" prompted for the correct password before any data can be received.\n" --"\n" --" Many older SSL-servers have problems with SSLv3 or TLS, which newer versions\n" --" of OpenSSL etc use, therefore it is sometimes useful to specify what\n" --" SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL\n" --" version to use (for SSLv3, SSLv2 or TLSv1 respectively):\n" --"\n" --" curl -2 https://secure.site.com/\n" --"\n" --, stdout); -- fputs( --" Otherwise, curl will first attempt to use v3 and then v2.\n" --"\n" --" To use OpenSSL to convert your favourite browser's certificate into a PEM\n" --" formatted one that curl can use, do something like this:\n" --"\n" --" In Netscape, you start with hitting the 'Security' menu button.\n" --"\n" --" Select 'certificates->yours' and then pick a certificate in the list\n" --"\n" --" Press the 'Export' button\n" --"\n" --" enter your PIN code for the certs\n" --"\n" --" select a proper place to save it\n" --"\n" --, stdout); -- fputs( --" Run the 'openssl' application to convert the certificate. If you cd to the\n" --" openssl installation, you can do it like:\n" --"\n" --" # ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]\n" --"\n" --" In Firefox, select Options, then Advanced, then the Encryption tab,\n" --" View Certificates. This opens the Certificate Manager, where you can\n" --" Export. Be sure to select PEM for the Save as type.\n" --"\n" --" In Internet Explorer, select Internet Options, then the Content tab, then\n" --, stdout); -- fputs( --" Certificates. Then you can Export, and depending on the format you may\n" --" need to convert to PEM.\n" --"\n" --" In Chrome, select Settings, then Show Advanced Settings. Under HTTPS/SSL\n" --" select Manage Certificates.\n" --"\n" --"RESUMING FILE TRANSFERS\n" --"\n" --" To continue a file transfer where it was previously aborted, curl supports\n" --" resume on HTTP(S) downloads as well as FTP uploads and downloads.\n" --"\n" --" Continue downloading a document:\n" --"\n" --" curl -C - -o file ftp://ftp.server.com/path/file\n" --"\n" --, stdout); -- fputs( --" Continue uploading a document(*1):\n" --"\n" --" curl -C - -T file ftp://ftp.server.com/path/file\n" --"\n" --" Continue downloading a document from a web server(*2):\n" --"\n" --" curl -C - -o file http://www.server.com/\n" --"\n" --" (*1) = This requires that the FTP server supports the non-standard command\n" --" SIZE. If it doesn't, curl will say so.\n" --"\n" --" (*2) = This requires that the web server supports at least HTTP/1.1. If it\n" --" doesn't, curl will say so.\n" --"\n" --"TIME CONDITIONS\n" --"\n" --, stdout); -- fputs( --" HTTP allows a client to specify a time condition for the document it\n" --" requests. It is If-Modified-Since or If-Unmodified-Since. Curl allows you to\n" --" specify them with the -z/--time-cond flag.\n" --"\n" --" For example, you can easily make a download that only gets performed if the\n" --" remote file is newer than a local copy. It would be made like:\n" --"\n" --" curl -z local.html http://remote.server.com/remote.html\n" --"\n" --" Or you can download a file only if the local file is newer than the remote\n" --, stdout); -- fputs( --" one. Do this by prepending the date string with a '-', as in:\n" --"\n" --" curl -z -local.html http://remote.server.com/remote.html\n" --"\n" --" You can specify a \"free text\" date as condition. Tell curl to only download\n" --" the file if it was updated since January 12, 2012:\n" --"\n" --" curl -z \"Jan 12 2012\" http://remote.server.com/remote.html\n" --"\n" --" Curl will then accept a wide range of date formats. You always make the date\n" --" check the other way around by prepending it with a dash '-'.\n" --"\n" --"DICT\n" --"\n" --" For fun try\n" --"\n" --, stdout); -- fputs( --" curl dict://dict.org/m:curl\n" --" curl dict://dict.org/d:heisenbug:jargon\n" --" curl dict://dict.org/d:daniel:web1913\n" --"\n" --" Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define'\n" --" and 'lookup'. For example,\n" --"\n" --" curl dict://dict.org/find:curl\n" --"\n" --" Commands that break the URL description of the RFC (but not the DICT\n" --" protocol) are\n" --"\n" --" curl dict://dict.org/show:db\n" --" curl dict://dict.org/show:strat\n" --"\n" --, stdout); -- fputs( --" Authentication is still missing (but this is not required by the RFC)\n" --"\n" --"LDAP\n" --"\n" --" If you have installed the OpenLDAP library, curl can take advantage of it\n" --" and offer ldap:// support.\n" --"\n" --" LDAP is a complex thing and writing an LDAP query is not an easy task. I do\n" --" advise you to dig up the syntax description for that elsewhere. Two places\n" --" that might suit you are:\n" --"\n" --" Netscape's \"Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10:\n" --" Working with LDAP URLs\":\n" --, stdout); -- fputs( --" http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm\n" --"\n" --" RFC 2255, \"The LDAP URL Format\" http://curl.haxx.se/rfc/rfc2255.txt\n" --"\n" --" To show you an example, this is how I can get all people from my local LDAP\n" --" server that has a certain sub-domain in their email address:\n" --"\n" --" curl -B \"ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se\"\n" --"\n" --" If I want the same info in HTML format, I can get it by not using the -B\n" --" (enforce ASCII) flag.\n" --"\n" --"ENVIRONMENT VARIABLES\n" --"\n" --, stdout); -- fputs( --" Curl reads and understands the following environment variables:\n" --"\n" --" http_proxy, HTTPS_PROXY, FTP_PROXY\n" --"\n" --" They should be set for protocol-specific proxies. General proxy should be\n" --" set with\n" --"\n" --" ALL_PROXY\n" --"\n" --" A comma-separated list of host names that shouldn't go through any proxy is\n" --" set in (only an asterisk, '*' matches all hosts)\n" --"\n" --" NO_PROXY\n" --"\n" --" If the host name matches one of these strings, or the host is within the\n" --, stdout); -- fputs( --" domain of one of these strings, transactions with that node will not be\n" --" proxied.\n" --"\n" --"\n" --" The usage of the -x/--proxy flag overrides the environment variables.\n" --"\n" --"NETRC\n" --"\n" --" Unix introduced the .netrc concept a long time ago. It is a way for a user\n" --" to specify name and password for commonly visited FTP sites in a file so\n" --" that you don't have to type them in each time you visit those sites. You\n" --" realize this is a big security risk if someone else gets hold of your\n" --, stdout); -- fputs( --" passwords, so therefore most unix programs won't read this file unless it is\n" --" only readable by yourself (curl doesn't care though).\n" --"\n" --" Curl supports .netrc files if told to (using the -n/--netrc and\n" --" --netrc-optional options). This is not restricted to just FTP,\n" --" so curl can use it for all protocols where authentication is used.\n" --"\n" --" A very simple .netrc file could look something like:\n" --"\n" --" machine curl.haxx.se login iamdaniel password mysecret\n" --"\n" --"CUSTOM OUTPUT\n" --"\n" --, stdout); -- fputs( --" To better allow script programmers to get to know about the progress of\n" --" curl, the -w/--write-out option was introduced. Using this, you can specify\n" --" what information from the previous transfer you want to extract.\n" --"\n" --" To display the amount of bytes downloaded together with some text and an\n" --" ending newline:\n" --"\n" --" curl -w 'We downloaded %{size_download} bytes\\n' www.download.com\n" --"\n" --"KERBEROS FTP TRANSFER\n" --"\n" --" Curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need\n" --, stdout); -- fputs( --" the kerberos package installed and used at curl build time for it to be\n" --" available.\n" --"\n" --" First, get the krb-ticket the normal way, like with the kinit/kauth tool.\n" --" Then use curl in way similar to:\n" --"\n" --" curl --krb private ftp://krb4site.com -u username:fakepwd\n" --"\n" --" There's no use for a password on the -u switch, but a blank one will make\n" --" curl ask for one and you already entered the real password to kinit/kauth.\n" --"\n" --"TELNET\n" --"\n" --, stdout); -- fputs( --" The curl telnet support is basic and very easy to use. Curl passes all data\n" --" passed to it on stdin to the remote server. Connect to a remote telnet\n" --" server using a command line similar to:\n" --"\n" --" curl telnet://remote.server.com\n" --"\n" --" And enter the data to pass to the server on stdin. The result will be sent\n" --" to stdout or to the file you specify with -o.\n" --"\n" --" You might want the -N/--no-buffer option to switch off the buffered output\n" --" for slow connections or similar.\n" --"\n" --, stdout); -- fputs( --" Pass options to the telnet protocol negotiation, by using the -t option. To\n" --" tell the server we use a vt100 terminal, try something like:\n" --"\n" --" curl -tTTYPE=vt100 telnet://remote.server.com\n" --"\n" --" Other interesting options for it -t include:\n" --"\n" --" - XDISPLOC=<X display> Sets the X display location.\n" --"\n" --" - NEW_ENV=<var,val> Sets an environment variable.\n" --"\n" --" NOTE: The telnet protocol does not specify any way to login with a specified\n" --, stdout); -- fputs( --" user and password so curl can't do that automatically. To do that, you need\n" --" to track when the login prompt is received and send the username and\n" --" password accordingly.\n" --"\n" --"PERSISTENT CONNECTIONS\n" --"\n" --" Specifying multiple files on a single command line will make curl transfer\n" --" all of them, one after the other in the specified order.\n" --"\n" --" libcurl will attempt to use persistent connections for the transfers so that\n" --" the second transfer to the same host can use the same connection that was\n" --, stdout); -- fputs( --" already initiated and was left open in the previous transfer. This greatly\n" --" decreases connection time for all but the first transfer and it makes a far\n" --" better use of the network.\n" --"\n" --" Note that curl cannot use persistent connections for transfers that are used\n" --" in subsequence curl invokes. Try to stuff as many URLs as possible on the\n" --" same command line if they are using the same host, as that'll make the\n" --" transfers faster. If you use an HTTP proxy for file transfers, practically\n" --, stdout); -- fputs( --" all transfers will be persistent.\n" --"\n" --"MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE\n" --"\n" --" As is mentioned above, you can download multiple files with one command line\n" --" by simply adding more URLs. If you want those to get saved to a local file\n" --" instead of just printed to stdout, you need to add one save option for each\n" --" URL you specify. Note that this also goes for the -O option (but not\n" --" --remote-name-all).\n" --"\n" --" For example: get two files and use -O for the first and a custom file\n" --, stdout); -- fputs( --" name for the second:\n" --"\n" --" curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg\n" --"\n" --" You can also upload multiple files in a similar fashion:\n" --"\n" --" curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt\n" --"\n" --"IPv6\n" --"\n" --" curl will connect to a server with IPv6 when a host lookup returns an IPv6\n" --" address and fall back to IPv4 if the connection fails. The --ipv4 and --ipv6\n" --" options can specify which address to use when both are available. IPv6\n" --, stdout); -- fputs( --" addresses can also be specified directly in URLs using the syntax:\n" --"\n" --" http://[2001:1890:1112:1::20]/overview.html\n" --"\n" --" When this style is used, the -g option must be given to stop curl from\n" --" interpreting the square brackets as special globbing characters. Link local\n" --" and site local addresses including a scope identifier, such as fe80::1234%1,\n" --" may also be used, but the scope portion must be numeric and the percent\n" --" character must be URL escaped. The previous example in an SFTP URL might\n" --, stdout); -- fputs( --" look like:\n" --"\n" --" sftp://[fe80::1234%251]/\n" --"\n" --" IPv6 addresses provided other than in URLs (e.g. to the --proxy, --interface\n" --" or --ftp-port options) should not be URL encoded.\n" --"\n" --"METALINK\n" --"\n" --" Curl supports Metalink (both version 3 and 4 (RFC 5854) are supported), a way\n" --" to list multiple URIs and hashes for a file. Curl will make use of the mirrors\n" --" listed within for failover if there are errors (such as the file or server not\n" --, stdout); -- fputs( --" being available). It will also verify the hash of the file after the download\n" --" completes. The Metalink file itself is downloaded and processed in memory and\n" --" not stored in the local file system.\n" --"\n" --" Example to use a remote Metalink file:\n" --"\n" --" curl --metalink http://www.example.com/example.metalink\n" --"\n" --" To use a Metalink file in the local file system, use FILE protocol (file://):\n" --"\n" --" curl --metalink file://example.metalink\n" --"\n" --, stdout); -- fputs( --" Please note that if FILE protocol is disabled, there is no way to use a local\n" --" Metalink file at the time of this writing. Also note that if --metalink and\n" --" --include are used together, --include will be ignored. This is because including\n" --" headers in the response will break Metalink parser and if the headers are included\n" --" in the file described in Metalink file, hash check will fail.\n" --"\n" --"MAILING LISTS\n" --"\n" --" For your convenience, we have several open mailing lists to discuss curl,\n" --, stdout); -- fputs( --" its development and things relevant to this. Get all info at\n" --" http://curl.haxx.se/mail/. Some of the lists available are:\n" --"\n" --" curl-users\n" --"\n" --" Users of the command line tool. How to use it, what doesn't work, new\n" --" features, related tools, questions, news, installations, compilations,\n" --" running, porting etc.\n" --"\n" --" curl-library\n" --"\n" --" Developers using or developing libcurl. Bugs, extensions, improvements.\n" --"\n" --" curl-announce\n" --"\n" --, stdout); -- fputs( --" Low-traffic. Only receives announcements of new public versions. At worst,\n" --" that makes something like one or two mails per month, but usually only one\n" --" mail every second month.\n" --"\n" --" curl-and-php\n" --"\n" --" Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP\n" --" with a curl angle.\n" --"\n" --" curl-and-python\n" --"\n" --" Python hackers using curl with or without the python binding pycurl.\n" --"\n" --" Please direct curl questions, feature requests and trouble reports to one of\n" --, stdout); -- fputs( --" these mailing lists instead of mailing any individual.\n" --, stdout) ; --} --#endif /* USE_MANUAL */ --#else --/* -- * NEVER EVER edit this manually, fix the mkhelp.pl script instead! -- * Generation time: Tue Mar 25 11:29:49 2014 -- */ --#ifdef USE_MANUAL --#include "tool_hugehelp.h" --#include <zlib.h> --#include "memdebug.h" /* keep this as LAST include */ --static const unsigned char hugehelpgz[] = { -- /* This mumbo-jumbo is the huge help text compressed with gzip. -- Thanks to this operation, the size of this data shrunk from 156972 -- to 47509 bytes. You can disable the use of compressed help -- texts by NOT passing -c to the mkhelp.pl tool. */ -- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd, -- 0x6b, 0x5b, 0x23, 0x57, 0x92, 0x2e, 0xfa, 0x9d, 0x5f, 0x91, 0xad, 0x3e, -- 0x3d, 0xc0, 0xb4, 0x24, 0x2e, 0x75, 0xb1, 0x8b, 0xae, 0xf2, 0x18, 0x53, -- 0x94, 0xcd, 0x36, 0x55, 0xb0, 0x81, 0xf2, 0x65, 0xdb, 0x7e, 0xea, 0x49, -- 0x49, 0x09, 0x64, 0x23, 0x29, 0xd5, 0x99, 0x29, 0x28, 0x7a, 0x66, 0xf6, -- 0x6f, 0x3f, 0x11, 0x6f, 0x44, 0xac, 0xb5, 0x32, 0x57, 0x0a, 0xca, 0x9e, -- 0x76, 0x9f, 0x39, 0xfb, 0x1c, 0xcf, 0x34, 0x05, 0x52, 0xe6, 0xba, 0xc6, -- 0x8a, 0x15, 0xd7, 0x37, 0x92, 0xe4, 0xb1, 0xff, 0x3e, 0xe0, 0x7f, 0x1f, -- 0xe8, 0x3f, 0xfa, 0x77, 0x2d, 0x49, 0x4e, 0xcb, 0xe2, 0xaf, 0xd9, 0xb8, -- 0xee, 0x7e, 0xf6, 0xc3, 0x87, 0xff, 0x48, 0xe4, 0xff, 0xe8, 0x9d, 0x9f, -- 0xe9, 0xdf, 0xb5, 0x07, 0xdb, 0xde, 0x4a, 0xfc, 0x0b, 0xff, 0xf1, 0x61, -- 0x33, 0x79, 0xec, 0x85, 0xff, 0x48, 0x36, 0xf0, 0xc2, 0x07, 0xed, 0xe1, -- 0x25, 0xff, 0xfe, 0xe1, 0xc3, 0xc3, 0x9d, 0xfc, 0xcc, 0xa3, 0xe2, 0x1f, -- 0x5b, 0xfc, 0xde, 0xcf, 0x1f, 0xf8, 0x57, 0xfa, 0x64, 0x6d, 0xed, 0xdd, -- 0xfe, 0xdb, 0x43, 0x7b, 0x75, 0xbc, 0x2c, 0xa7, 0xc9, 0x20, 0xa9, 0xcb, -- 0x74, 0x5e, 0x5d, 0x66, 0x65, 0x92, 0x26, 0xef, 0xcf, 0x8e, 0xd7, 0xd6, -- 0xce, 0x7f, 0x7c, 0x77, 0x72, 0x7a, 0x7e, 0x74, 0xde, 0x78, 0xec, 0xa7, -- 0x62, 0x51, 0xe7, 0xc5, 0xbc, 0xfa, 0x25, 0xf9, 0x89, 0x1e, 0x1a, 0x0e, -- 0x87, 0xbf, 0xac, 0xad, 0xbd, 0x3e, 0x3c, 0x3f, 0x38, 0x3b, 0x3a, 0xbd, -- 0x38, 0x3a, 0x79, 0xd7, 0x78, 0x36, 0xc9, 0xab, 0x84, 0x1a, 0xab, 0x8b, -- 0x62, 0x4a, 0x3f, 0x7c, 0xfb, 0x93, 0xb4, 0x4e, 0x93, 0xcb, 0xb2, 0x98, -- 0x25, 0x45, 0xc9, 0x5f, 0xa4, 0x49, 0x95, 0x95, 0xb7, 0x59, 0xd9, 0x4f, -- 0x96, 0x55, 0x3e, 0xbf, 0x4a, 0x8a, 0x79, 0x96, 0x14, 0x97, 0x49, 0x7d, -- 0x9d, 0x59, 0x73, 0xd5, 0x72, 0xb1, 0x28, 0xca, 0x3a, 0x9b, 0x24, 0x8b, -- 0xb2, 0xa8, 0x8b, 0x71, 0x31, 0xad, 0x92, 0x8d, 0xd7, 0x47, 0x07, 0x17, -- 0xfd, 0xe4, 0xcd, 0xd1, 0xf1, 0x21, 0xfd, 0xbc, 0x38, 0xc5, 0x8f, 0xf3, -- 0x7e, 0xf2, 0xf5, 0xc9, 0xe9, 0x37, 0x87, 0x67, 0xfd, 0xe4, 0x9b, 0x0b, -- 0xfe, 0x8c, 0x7f, 0xd2, 0x87, 0xc9, 0xd1, 0xdb, 0xfd, 0xd3, 0xbe, 0x35, -- 0xc7, 0x7f, 0xf0, 0x87, 0xc7, 0xaf, 0xe9, 0x43, 0xf9, 0x87, 0xff, 0x3c, -- 0x3d, 0x39, 0x7d, 0xd2, 0xc7, 0x4f, 0xfa, 0xeb, 0xec, 0xe2, 0xed, 0x29, -- 0xff, 0x3c, 0xa7, 0x9f, 0xe7, 0x07, 0xfc, 0x03, 0x7d, 0x9c, 0xbf, 0xb5, -- 0x9f, 0xe7, 0xae, 0xb9, 0x8b, 0xc3, 0xe3, 0x77, 0x87, 0x17, 0x49, 0x3a, -- 0x9f, 0x24, 0x17, 0xf4, 0xd0, 0xe6, 0x90, 0x3e, 0xba, 0xce, 0x92, 0x71, -- 0x31, 0x9b, 0xf1, 0x67, 0xb4, 0x0a, 0x93, 0xac, 0xca, 0xaf, 0xe6, 0x34, -- 0x7c, 0x9a, 0xed, 0x5d, 0x51, 0xde, 0x24, 0x77, 0x79, 0x7d, 0x5d, 0x2c, -- 0x6b, 0x9a, 0x30, 0xad, 0x47, 0x92, 0xcf, 0xeb, 0xac, 0x1c, 0x58, 0x73, -- 0xe9, 0x98, 0x57, 0x78, 0xb8, 0xd6, 0x58, 0xcb, 0xe2, 0x92, 0x56, 0xae, -- 0xa2, 0xa5, 0x1a, 0x2d, 0xab, 0x69, 0x91, 0x4e, 0x78, 0x81, 0xe8, 0xe5, -- 0xcb, 0x25, 0x2d, 0x6d, 0x99, 0x8f, 0x6f, 0xaa, 0x64, 0x9a, 0xdf, 0x64, -- 0xbc, 0x3c, 0x1f, 0xef, 0x6d, 0xb9, 0xfa, 0xd2, 0x7c, 0xba, 0xa4, 0x95, -- 0x9c, 0xbb, 0xe6, 0xeb, 0x7c, 0x9c, 0x72, 0x07, 0x58, 0xaf, 0x64, 0xb9, -- 0xe0, 0xd6, 0x64, 0x9d, 0x92, 0x45, 0x51, 0xd1, 0x4b, 0xe7, 0xe7, 0xc7, -- 0x34, 0xf6, 0xf9, 0x3c, 0xc3, 0x38, 0xaa, 0x3e, 0xfd, 0x51, 0xdc, 0xe4, -- 0x19, 0xfd, 0x72, 0x99, 0x4f, 0xb3, 0x44, 0xf6, 0xd1, 0x35, 0xc7, 0x1b, -- 0x9a, 0x94, 0x59, 0xb5, 0x9c, 0x65, 0xb4, 0x84, 0x6f, 0xb3, 0x3a, 0x9d, -- 0xe6, 0xf3, 0x1b, 0xfa, 0x95, 0xa7, 0x3e, 0x2b, 0xca, 0x6c, 0x98, 0xec, -- 0x57, 0xc9, 0x7d, 0xb1, 0xa4, 0x39, 0x4f, 0xa7, 0xb4, 0xd3, 0x59, 0x32, -- 0xca, 0xa6, 0xc5, 0x5d, 0x9f, 0xf7, 0x37, 0x99, 0x2f, 0x67, 0x23, 0x6a, -- 0xa0, 0xb8, 0xf4, 0xcd, 0xa5, 0xf5, 0x92, 0x9a, 0x93, 0xa7, 0x67, 0x29, -- 0xcd, 0x89, 0xde, 0x2d, 0x93, 0xeb, 0x8c, 0xe6, 0x5c, 0x2d, 0xf2, 0xf9, -- 0x1f, 0x9a, 0xeb, 0x42, 0x8b, 0xbb, 0x28, 0xee, 0xb2, 0x92, 0xd6, 0x76, -- 0x74, 0x9f, 0xd0, 0x22, 0x8c, 0x84, 0xf4, 0x2e, 0x89, 0xb4, 0x92, 0x94, -- 0x9a, 0x70, 0x64, 0x37, 0x28, 0xb3, 0x69, 0xca, 0x24, 0xe4, 0xfa, 0xa0, -- 0x7d, 0x3a, 0xcf, 0x1c, 0x8d, 0xe9, 0xab, 0x1b, 0x4f, 0x36, 0xf1, 0xf2, -- 0x84, 0x66, 0x92, 0x4f, 0x2b, 0xda, 0x06, 0x3e, 0x0c, 0xb6, 0xd3, 0x34, -- 0x64, 0x3e, 0x1c, 0x44, 0x91, 0xf7, 0xf3, 0x3a, 0xfd, 0x88, 0xee, 0x95, -- 0x22, 0x07, 0x93, 0x6c, 0x91, 0xcd, 0x27, 0xd9, 0xbc, 0x1e, 0x26, 0x3f, -- 0x16, 0xcb, 0x75, 0xea, 0xfb, 0x32, 0xa7, 0x35, 0x48, 0xb5, 0x29, 0xea, -- 0x99, 0xc8, 0x60, 0x5c, 0xe6, 0x8b, 0x60, 0x2b, 0x8a, 0x39, 0x6d, 0x7e, -- 0x72, 0xf6, 0xe6, 0x20, 0x79, 0xf2, 0xe2, 0xf3, 0xe7, 0x7e, 0xcf, 0xa9, -- 0x81, 0x64, 0x9c, 0xce, 0x69, 0xc6, 0xd9, 0x38, 0xbf, 0xbc, 0x4f, 0x66, -- 0xcb, 0x69, 0x9d, 0x2f, 0x68, 0xf5, 0xa9, 0xf3, 0x8a, 0x8f, 0xcd, 0x22, -- 0x2d, 0xeb, 0x8a, 0x89, 0x00, 0x1f, 0x60, 0xee, 0x77, 0x65, 0x5e, 0xf3, -- 0xf1, 0xc1, 0x77, 0x34, 0xc2, 0xac, 0xae, 0xac, 0x39, 0x26, 0x37, 0xea, -- 0x67, 0x54, 0xa6, 0x63, 0x5a, 0xda, 0xb4, 0xa2, 0x4e, 0xf7, 0x5c, 0x5f, -- 0xc9, 0x75, 0x5d, 0x2f, 0xf6, 0xb6, 0xb6, 0xaa, 0xbc, 0xce, 0x86, 0xff, -- 0x4e, 0x87, 0xaf, 0x5f, 0xdf, 0x15, 0xfd, 0xfa, 0xba, 0xcc, 0xb2, 0xff, -- 0x1c, 0x12, 0x11, 0xbb, 0x07, 0xa9, 0xdb, 0x7b, 0x1d, 0xd7, 0x55, 0x56, -- 0x53, 0x07, 0x7f, 0x5b, 0x66, 0x73, 0x6e, 0x90, 0x86, 0x91, 0x4e, 0x17, -- 0xd7, 0x29, 0xed, 0x66, 0x46, 0xc4, 0xc8, 0xc7, 0x99, 0xe8, 0x85, 0x07, -- 0x25, 0x07, 0xfa, 0xa7, 0x5f, 0xa2, 0x3e, 0x2f, 0xd1, 0x25, 0xfd, 0x1c, -- 0xea, 0x4b, 0x29, 0xad, 0x35, 0x75, 0xb6, 0xc5, 0x34, 0xf6, 0xd3, 0xce, -- 0x60, 0x67, 0x7b, 0xfb, 0x97, 0x61, 0xfd, 0xb1, 0xfe, 0xc4, 0x17, 0xb6, -- 0xb7, 0xfd, 0x2b, 0xfc, 0xf4, 0x06, 0xcf, 0x38, 0x99, 0x12, 0xd1, 0x70, -- 0xff, 0x7f, 0xcf, 0xca, 0xa2, 0xda, 0xec, 0x68, 0x6a, 0x9a, 0xd5, 0x74, -- 0xf2, 0x82, 0x76, 0xd2, 0xc1, 0xdf, 0xa5, 0x5b, 0x7b, 0xf8, 0x5d, 0x56, -- 0x81, 0x66, 0xfc, 0x64, 0x93, 0xb4, 0x24, 0xba, 0x2d, 0x6a, 0xcf, 0x94, -- 0xfa, 0x74, 0x28, 0x6b, 0xb7, 0x34, 0x74, 0xe6, 0xe8, 0x69, 0x62, 0x67, -- 0xe9, 0x94, 0x39, 0x59, 0x95, 0xcc, 0x33, 0x3f, 0x0d, 0x3a, 0xff, 0x59, -- 0x3a, 0xbe, 0x4e, 0x0a, 0x22, 0xfe, 0x32, 0xde, 0x82, 0x74, 0x7e, 0x3f, -- 0x2c, 0xca, 0xab, 0xad, 0xb4, 0x1c, 0x5f, 0xe7, 0xb7, 0xb4, 0x0e, 0x2f, -- 0x5e, 0x3c, 0x1f, 0xd0, 0x8f, 0x17, 0xbf, 0x6c, 0xdd, 0x16, 0x53, 0x5a, -- 0x96, 0xa7, 0xbf, 0x6c, 0xf1, 0xee, 0xfe, 0x7b, 0xda, 0x1f, 0xf5, 0xc7, -- 0xff, 0x39, 0xbc, 0xae, 0x67, 0xd3, 0x95, 0x34, 0x43, 0x8d, 0x25, 0xe9, -- 0xac, 0x58, 0xce, 0x6b, 0x47, 0x27, 0x44, 0x6e, 0x75, 0xc0, 0x99, 0xe8, -- 0xa4, 0x66, 0xc2, 0xac, 0x98, 0x7c, 0xf8, 0xc0, 0xd1, 0xd9, 0xf4, 0x27, -- 0xb1, 0x1e, 0x5f, 0xd3, 0xd4, 0x89, 0x6e, 0x52, 0x9d, 0x7e, 0x9d, 0xa7, -- 0x7c, 0x26, 0x89, 0x35, 0x94, 0xfc, 0x31, 0x37, 0x25, 0x9d, 0xe5, 0xf4, -- 0x5c, 0x51, 0x4e, 0xb2, 0xb2, 0x49, 0xc1, 0x18, 0x8e, 0x1f, 0x4f, 0x42, -- 0x4b, 0xb9, 0xa0, 0xce, 0x97, 0xcc, 0xee, 0x70, 0xc8, 0xb8, 0x05, 0x3a, -- 0x9e, 0x57, 0xb4, 0x4a, 0xb4, 0x32, 0x4c, 0x54, 0xbc, 0x70, 0xf7, 0xc9, -- 0x3b, 0xda, 0x3c, 0x61, 0x0d, 0x01, 0xed, 0xc9, 0x66, 0xc5, 0x8b, 0x76, -- 0x77, 0x77, 0xb7, 0x9a, 0x88, 0xf6, 0x76, 0x5a, 0x74, 0x14, 0xbc, 0xd4, -- 0xb5, 0xfb, 0x7b, 0xbb, 0xcd, 0xfd, 0x3f, 0xba, 0xc4, 0xc6, 0xda, 0x1c, -- 0xf8, 0xec, 0x1b, 0xef, 0xb6, 0x83, 0x4f, 0xad, 0xd1, 0xef, 0xd9, 0x65, -- 0xfe, 0xb1, 0x6f, 0x17, 0x9f, 0xac, 0x65, 0x4a, 0xcd, 0xcf, 0x16, 0x35, -- 0xef, 0xba, 0x35, 0x77, 0xb5, 0xcc, 0x2a, 0x22, 0xa1, 0xbb, 0xeb, 0x94, -- 0x3e, 0xb6, 0x06, 0x12, 0x74, 0x31, 0xcb, 0xaf, 0xae, 0xeb, 0xe4, 0x2e, -- 0x65, 0xfe, 0x71, 0x54, 0x4b, 0x13, 0xcc, 0xb8, 0x89, 0x6b, 0x5c, 0xa6, -- 0x74, 0xfc, 0x79, 0x85, 0xc0, 0xa5, 0x89, 0xd8, 0x1c, 0x39, 0xd1, 0x5a, -- 0x81, 0x94, 0x82, 0x7b, 0x71, 0x94, 0x56, 0xbc, 0x1b, 0x73, 0xda, 0xf4, -- 0x9a, 0xd8, 0xfe, 0x92, 0xff, 0xba, 0x26, 0xc6, 0x9e, 0xcc, 0xd3, 0x59, -- 0xa6, 0x03, 0x05, 0xef, 0x7b, 0xc3, 0x2c, 0x32, 0xfb, 0x98, 0xce, 0x1c, -- 0x3f, 0x22, 0x06, 0xd3, 0x57, 0xd6, 0xe9, 0xde, 0xa8, 0x68, 0xd7, 0x88, -- 0xe2, 0xf8, 0x18, 0xe1, 0x4c, 0xf5, 0xf8, 0xdc, 0xf4, 0x64, 0x9e, 0x18, -- 0x63, 0x5a, 0x31, 0xef, 0x17, 0x0e, 0x4f, 0x83, 0x0f, 0x26, 0x4b, 0x8b, -- 0x96, 0xde, 0xf0, 0x2d, 0xd3, 0xba, 0xcb, 0xf0, 0xda, 0xa4, 0x48, 0x72, -- 0xe2, 0x60, 0x23, 0x3a, 0x5f, 0x3c, 0x33, 0x3e, 0x35, 0x58, 0x15, 0x6e, -- 0x67, 0x41, 0x6d, 0xf2, 0x87, 0x79, 0xcd, 0x7c, 0x03, 0xe2, 0x08, 0x8d, -- 0x97, 0x16, 0x05, 0x12, 0x05, 0x9d, 0xbd, 0x60, 0xfe, 0xe0, 0x78, 0xf4, -- 0x6c, 0x72, 0x4b, 0x17, 0x0f, 0x49, 0x16, 0x99, 0x7b, 0x0b, 0x2c, 0x7a, -- 0xcc, 0xd7, 0xdd, 0x74, 0x7a, 0x4f, 0x64, 0x57, 0x96, 0x2c, 0xba, 0xf1, -- 0x0e, 0x8e, 0xe4, 0x70, 0xcc, 0x32, 0xba, 0x19, 0xc2, 0xe5, 0xcc, 0x99, -- 0x49, 0x11, 0x91, 0xd2, 0x55, 0x03, 0x32, 0xa4, 0x2b, 0x01, 0xc7, 0x18, -- 0x13, 0xc7, 0xe8, 0xb8, 0xed, 0xf1, 0x38, 0x5b, 0xd4, 0x55, 0xd7, 0x9c, -- 0x6c, 0xc3, 0x69, 0x38, 0x65, 0xc6, 0x2b, 0x1f, 0xde, 0xa3, 0x58, 0x57, -- 0xc7, 0xc7, 0x71, 0x95, 0xda, 0xd5, 0x44, 0x57, 0x6b, 0xe5, 0x56, 0xad, -- 0x06, 0x6d, 0xd0, 0x59, 0xc0, 0x9a, 0xcf, 0x78, 0xa0, 0xfc, 0x70, 0x25, -- 0x12, 0x13, 0xce, 0x1c, 0x6f, 0xa4, 0x88, 0x4c, 0xd2, 0x2f, 0x73, 0x23, -- 0x5a, 0x4f, 0xd7, 0x38, 0xf5, 0xea, 0xf6, 0x94, 0xbb, 0xaf, 0x48, 0xd8, -- 0x24, 0xee, 0x3c, 0xa9, 0xae, 0xe9, 0x3e, 0xa5, 0xad, 0xbf, 0xb8, 0xe6, -- 0x99, 0xce, 0x88, 0x66, 0x6e, 0x79, 0x7f, 0x17, 0x59, 0x36, 0x19, 0x26, -- 0x27, 0x97, 0x7c, 0x34, 0x4b, 0x1a, 0x74, 0x8d, 0xaf, 0x99, 0x5b, 0xd0, -- 0xba, 0x4d, 0x20, 0x8d, 0xcd, 0x1d, 0x57, 0xc0, 0x50, 0x82, 0x63, 0xcf, -- 0x94, 0x46, 0x8b, 0x9d, 0x30, 0xa3, 0x9f, 0x36, 0x59, 0x0b, 0x44, 0x00, -- 0x62, 0x01, 0x3c, 0xbc, 0x51, 0x96, 0x80, 0x12, 0x47, 0x59, 0x7d, 0x97, -- 0x65, 0xae, 0xb9, 0x2a, 0x23, 0x76, 0xc6, 0x9b, 0x26, 0x97, 0xf9, 0xfc, -- 0xb6, 0xe0, 0x01, 0xae, 0xad, 0x9d, 0x9e, 0x9d, 0x7c, 0x7d, 0x76, 0x78, -- 0x7e, 0x9e, 0xbc, 0x3d, 0xbc, 0x38, 0x3c, 0x6b, 0xac, 0xf4, 0xbc, 0x28, -- 0x67, 0xd8, 0xd1, 0x49, 0x5e, 0x2d, 0xa6, 0xe9, 0x3d, 0x6f, 0x35, 0xcd, -- 0xe4, 0xaa, 0xe4, 0x93, 0x35, 0xcb, 0x98, 0xb5, 0x4c, 0x96, 0x25, 0xc8, -- 0xa2, 0x58, 0xd0, 0xf6, 0xa9, 0x10, 0x43, 0x8d, 0x4f, 0x20, 0xf9, 0xcc, -- 0xaf, 0xfc, 0x4a, 0xd3, 0x6d, 0xae, 0x1c, 0x92, 0x59, 0xa4, 0xdb, 0x0f, -- 0x96, 0x26, 0x20, 0xa5, 0xf6, 0xfd, 0x67, 0xb2, 0x4c, 0x15, 0xe6, 0x44, -- 0x34, 0x9b, 0xcf, 0x20, 0x4b, 0xd0, 0xbf, 0x5e, 0x80, 0xc8, 0x2e, 0x49, -- 0x7a, 0x22, 0xae, 0xd9, 0x22, 0x0d, 0x37, 0x4e, 0xac, 0x2b, 0x84, 0x5f, -- 0x96, 0x86, 0xa9, 0x73, 0x1a, 0xeb, 0x2c, 0x9f, 0x13, 0x81, 0x11, 0x41, -- 0xea, 0x29, 0x67, 0x4a, 0xa0, 0xb1, 0x5e, 0x0a, 0x4f, 0xd0, 0x15, 0x69, -- 0x4a, 0xd5, 0xf4, 0x32, 0x6d, 0x36, 0x71, 0x56, 0x37, 0x3d, 0x0c, 0x8a, -- 0x48, 0x93, 0x9a, 0x4f, 0x47, 0xcc, 0x9a, 0x58, 0xcc, 0x24, 0x69, 0x20, -- 0xeb, 0xec, 0xcd, 0xc9, 0xad, 0xf4, 0x06, 0x8d, 0x2d, 0x1d, 0xf1, 0x8e, -- 0xf2, 0x03, 0xad, 0x55, 0xa4, 0x43, 0x04, 0xde, 0x72, 0x97, 0x57, 0x38, -- 0x54, 0x77, 0xc5, 0x72, 0x4a, 0x22, 0x1d, 0x3f, 0xb0, 0x5c, 0xe0, 0x05, -- 0xea, 0x6a, 0xe1, 0x4f, 0xcf, 0x2c, 0xff, 0xc8, 0xab, 0xde, 0x6e, 0x85, -- 0x86, 0x46, 0x7f, 0x2e, 0x68, 0x13, 0x64, 0x38, 0xc3, 0x36, 0x6f, 0x05, -- 0xd7, 0x88, 0xf6, 0x90, 0x4f, 0x0b, 0xd8, 0xdd, 0xe9, 0xc9, 0xf9, 0x05, -- 0xb3, 0xff, 0xd3, 0xf7, 0x17, 0xd4, 0x10, 0x5d, 0x43, 0x55, 0x4d, 0xdb, -- 0xc9, 0x2f, 0xce, 0x33, 0x48, 0xd4, 0xd6, 0x1c, 0xed, 0x5a, 0x8e, 0x23, -- 0x8e, 0x5b, 0xc5, 0xba, 0x94, 0x31, 0x8a, 0x9a, 0xc1, 0xc4, 0x6b, 0x4a, -- 0x46, 0x75, 0x9d, 0x31, 0x8f, 0x76, 0x2f, 0x25, 0x1b, 0x5f, 0x6c, 0xd2, -- 0x76, 0x0f, 0x5c, 0x73, 0x3f, 0xf1, 0xd3, 0xbf, 0x70, 0xcf, 0x55, 0x3e, -- 0xcb, 0xa7, 0x69, 0x70, 0xb7, 0x29, 0x27, 0x62, 0xba, 0x76, 0xe7, 0x71, -- 0x4c, 0x6c, 0x17, 0x83, 0xf6, 0x52, 0x35, 0xaf, 0x20, 0x4e, 0xb3, 0xdf, -- 0xa8, 0x49, 0x91, 0xc9, 0x7b, 0x24, 0xca, 0xba, 0x85, 0xe3, 0x1d, 0xe3, -- 0x63, 0xde, 0x58, 0xa6, 0xf6, 0xae, 0x45, 0xcb, 0xc6, 0x9c, 0x1c, 0xca, -- 0x9a, 0x5b, 0xb8, 0xde, 0x28, 0x2d, 0x7b, 0x8e, 0x83, 0x89, 0x06, 0x45, -- 0x8d, 0x5e, 0x2d, 0x69, 0xf0, 0xb2, 0xaa, 0xfd, 0x64, 0xf0, 0x47, 0x1e, -- 0x39, 0x8b, 0xd4, 0xee, 0x44, 0x93, 0xac, 0x36, 0x9f, 0x0c, 0xd7, 0x4e, -- 0xa0, 0xc0, 0x39, 0x6d, 0xef, 0x44, 0xf4, 0xbc, 0x44, 0xd8, 0xbf, 0x88, -- 0x90, 0x89, 0xa8, 0x66, 0x74, 0x6f, 0xdf, 0x11, 0x0d, 0xa6, 0xb4, 0x84, -- 0xc4, 0x4c, 0xde, 0xf2, 0xd0, 0xb5, 0x33, 0x55, 0x0e, 0xb1, 0x4f, 0xb4, -- 0xac, 0x34, 0x2b, 0xa7, 0xd4, 0x4c, 0x26, 0x39, 0x56, 0x80, 0xd8, 0xf4, -- 0x32, 0x83, 0x4c, 0x24, 0x1c, 0xde, 0xcf, 0x8b, 0x85, 0xeb, 0xea, 0x9a, -- 0x24, 0xaa, 0xa4, 0x27, 0xcc, 0x64, 0xc0, 0x5d, 0xf4, 0x78, 0x51, 0x67, -- 0xad, 0x0e, 0x68, 0x1e, 0x13, 0xbd, 0xa8, 0xf8, 0x02, 0x93, 0x7b, 0x6b, -- 0x96, 0xde, 0x87, 0xf2, 0x0b, 0xd8, 0x0d, 0x46, 0x5d, 0x94, 0xee, 0xce, -- 0xa6, 0x5b, 0x61, 0x41, 0x32, 0xb0, 0xb1, 0x21, 0xf0, 0x73, 0x9c, 0x9d, -- 0x4a, 0x06, 0xd6, 0x27, 0x41, 0x96, 0x9f, 0xbc, 0xba, 0xb6, 0x47, 0x83, -- 0xbb, 0x21, 0xa5, 0x79, 0x31, 0x7f, 0x63, 0x29, 0x7f, 0x62, 0xac, 0xab, -- 0x28, 0x87, 0x18, 0xf9, 0xb4, 0x60, 0x8e, 0xd3, 0x9b, 0x14, 0xcb, 0x91, -- 0x1b, 0x39, 0x86, 0xce, 0x44, 0x35, 0xc0, 0x8e, 0xf2, 0x9f, 0xd6, 0x9c, -- 0x1b, 0xb6, 0x2e, 0x55, 0xf5, 0xe8, 0xd0, 0xfc, 0x42, 0x9d, 0x63, 0x91, -- 0x88, 0xfb, 0x57, 0xbc, 0xa0, 0xb6, 0xe6, 0xa0, 0x34, 0xe2, 0xd6, 0xeb, -- 0xb5, 0x1c, 0x0c, 0x88, 0x7f, 0xba, 0xea, 0xc4, 0x62, 0xd0, 0x46, 0x05, -- 0x89, 0x4c, 0x79, 0xb1, 0x9b, 0x19, 0xcd, 0x68, 0x92, 0x13, 0x3b, 0x23, -- 0x9e, 0x6a, 0xfb, 0xe2, 0x85, 0xd4, 0xbe, 0x28, 0x96, 0xbc, 0xd6, 0x3a, -- 0x66, 0xe1, 0x4c, 0x0d, 0xd1, 0x8e, 0x35, 0xad, 0x90, 0xab, 0xda, 0x98, -- 0x06, 0x27, 0xb4, 0x53, 0xc7, 0x98, 0xc7, 0xe0, 0x36, 0xe1, 0x93, 0x40, -- 0x22, 0x34, 0x1f, 0x8b, 0xc1, 0xc9, 0xf1, 0x6d, 0x40, 0xd1, 0xac, 0x50, -- 0xcc, 0xf9, 0xaa, 0xed, 0x43, 0x67, 0x1b, 0x15, 0x05, 0x89, 0xee, 0x7e, -- 0x6a, 0x2c, 0x71, 0x67, 0x73, 0x66, 0x54, 0xba, 0xa3, 0x83, 0x81, 0x7c, -- 0x85, 0x96, 0xef, 0x49, 0x6c, 0x4c, 0xaf, 0xd2, 0xdc, 0xd1, 0x9a, 0x32, -- 0x35, 0xf7, 0xec, 0xbc, 0xd0, 0xc7, 0x79, 0xa7, 0xf8, 0x12, 0x57, 0xfe, -- 0xb1, 0xc4, 0x5d, 0x97, 0xf1, 0xbc, 0x88, 0x01, 0xe0, 0x14, 0x6b, 0xb3, -- 0x90, 0x7c, 0xac, 0xb9, 0x11, 0x64, 0x3d, 0x16, 0x9b, 0xc0, 0x05, 0x21, -- 0x04, 0x51, 0x93, 0xbd, 0x61, 0xf2, 0x0d, 0x69, 0x9e, 0xb0, 0x5b, 0x40, -- 0x18, 0xce, 0x59, 0x07, 0x27, 0x69, 0xe6, 0x2e, 0x23, 0xbd, 0xb7, 0xaa, -- 0x69, 0x35, 0x71, 0x81, 0xe2, 0x33, 0x1a, 0xa7, 0xbb, 0xf2, 0xae, 0x8b, -- 0x3b, 0x74, 0xeb, 0x26, 0xe1, 0x76, 0x12, 0x34, 0x3e, 0x1b, 0x26, 0x1b, -- 0xb8, 0xa0, 0xc7, 0xbc, 0x58, 0x8b, 0xda, 0xcf, 0xc2, 0xad, 0x07, 0xb1, -- 0xcc, 0x2a, 0x38, 0x58, 0x7c, 0x5b, 0xd1, 0x08, 0x92, 0xcf, 0x86, 0x3b, -- 0x2f, 0x86, 0xdb, 0x43, 0x36, 0x53, 0x65, 0xb7, 0x79, 0xb1, 0xac, 0xa8, -- 0x77, 0x0c, 0x25, 0x09, 0xde, 0x24, 0x55, 0x99, 0xaf, 0x90, 0xab, 0xab, -- 0xa9, 0x5c, 0xde, 0x5b, 0xc5, 0xe5, 0x65, 0x70, 0xbf, 0x97, 0xa4, 0xc4, -- 0xe2, 0x66, 0xe3, 0xc5, 0xd1, 0x43, 0x27, 0xfc, 0x2d, 0xbc, 0xd8, 0x75, -- 0x39, 0x37, 0xdd, 0x0e, 0x0e, 0xfe, 0x48, 0x1b, 0x3d, 0x30, 0x4e, 0x34, -- 0x20, 0x46, 0xd4, 0xb2, 0x4b, 0xbd, 0x65, 0x4d, 0x3e, 0xbc, 0x0e, 0x3d, -- 0xdb, 0x12, 0x61, 0x2d, 0x07, 0x69, 0xb9, 0x0f, 0xa9, 0x85, 0xc4, 0xb1, -- 0xb2, 0xc0, 0x3e, 0x10, 0x10, 0x19, 0x31, 0xa6, 0xf9, 0x24, 0x2d, 0x49, -- 0xfd, 0x62, 0x33, 0x03, 0x3d, 0xcc, 0xa7, 0x2d, 0x15, 0x72, 0xef, 0x0b, -- 0xbf, 0xf3, 0x24, 0x36, 0xd8, 0xe3, 0x01, 0x86, 0xaa, 0x98, 0x71, 0x1d, -- 0xba, 0x06, 0x2a, 0x19, 0x99, 0x8a, 0xa1, 0xa9, 0x97, 0x4a, 0x3c, 0xe3, -- 0x36, 0x6d, 0xe5, 0xb2, 0x98, 0x4e, 0x8b, 0x3b, 0xbe, 0x40, 0x58, 0x90, -- 0x0c, 0xb6, 0xd5, 0xb6, 0xa3, 0xaa, 0x8a, 0x71, 0x2e, 0x76, 0x06, 0x5d, -- 0x74, 0x68, 0x58, 0x30, 0x85, 0xf1, 0xab, 0x95, 0xde, 0xec, 0x2c, 0xb2, -- 0x56, 0xc4, 0x49, 0x12, 0xa7, 0x2c, 0xc2, 0xb2, 0xd0, 0x6a, 0xce, 0x5f, -- 0x78, 0x72, 0x24, 0x95, 0x0d, 0xd3, 0x48, 0x72, 0x5a, 0x9f, 0xe2, 0xce, -- 0xb4, 0x3d, 0x52, 0xba, 0x1d, 0x6b, 0x0c, 0x8e, 0x6a, 0xbf, 0xd5, 0x5c, -- 0xb5, 0xa4, 0x36, 0x68, 0xbd, 0x27, 0x39, 0x9b, 0x93, 0x48, 0xa1, 0x13, -- 0x0b, 0x91, 0xc8, 0xf9, 0xf4, 0xda, 0x78, 0x59, 0xd5, 0x24, 0x64, 0x5a, -- 0xaf, 0xd2, 0x14, 0xf5, 0x4b, 0x24, 0xb9, 0xcf, 0x74, 0xd6, 0x6a, 0x8e, -- 0x88, 0xee, 0xb3, 0xe1, 0x93, 0xe7, 0xc3, 0xed, 0x80, 0x10, 0xb6, 0x79, -- 0x9d, 0x59, 0xc9, 0xda, 0x19, 0x6e, 0xb7, 0x1e, 0xdf, 0xe0, 0xfb, 0x7c, -- 0xd3, 0x96, 0xbc, 0xb1, 0xe6, 0xb8, 0xe9, 0xed, 0x1c, 0xd0, 0x9b, 0xe1, -- 0x2d, 0x26, 0xf7, 0x75, 0xee, 0xad, 0x19, 0xae, 0x77, 0xda, 0xe1, 0x39, -- 0x44, 0x41, 0xb9, 0x0b, 0xe9, 0x2e, 0xdf, 0x93, 0x96, 0x76, 0x86, 0x3b, -- 0xc1, 0xd6, 0xeb, 0x70, 0x76, 0xba, 0x87, 0x13, 0x13, 0x40, 0x6b, 0x30, -- 0x3b, 0x26, 0x30, 0x8b, 0x94, 0xe4, 0xfa, 0x6d, 0x35, 0x67, 0x6a, 0x9a, -- 0xbe, 0x68, 0x4b, 0xa6, 0x8b, 0xf4, 0xa4, 0xb1, 0x48, 0x18, 0xd1, 0xee, -- 0x27, 0x2c, 0x0f, 0xc8, 0x24, 0x27, 0x0d, 0x8b, 0xfb, 0xa5, 0x0d, 0xf1, -- 0x5b, 0x23, 0xab, 0x82, 0xa1, 0xee, 0xca, 0x00, 0x3b, 0x48, 0x07, 0x17, -- 0x0b, 0x2e, 0x06, 0x1e, 0xf9, 0x92, 0xee, 0xad, 0x72, 0x0a, 0x8d, 0xc9, -- 0xec, 0x64, 0xc4, 0x48, 0x88, 0xbf, 0xe5, 0xd3, 0x5a, 0x09, 0x52, 0x4c, -- 0x1a, 0x09, 0xee, 0xe5, 0xd6, 0xe8, 0x1e, 0x98, 0x0d, 0x71, 0xc3, 0xf9, -- 0x62, 0xde, 0x7a, 0xe1, 0xb5, 0x70, 0x61, 0x15, 0xb3, 0xdf, 0x9d, 0xbe, -- 0xa3, 0x99, 0x1d, 0x9f, 0xf3, 0xcd, 0x47, 0x6a, 0xa9, 0xac, 0x10, 0x3e, -- 0xa5, 0x65, 0x35, 0xde, 0xee, 0xc5, 0x60, 0x92, 0x80, 0x5b, 0xcd, 0xc5, -- 0x23, 0xc6, 0x51, 0xa0, 0x5b, 0x82, 0xed, 0x95, 0xf4, 0x6d, 0x99, 0x92, -- 0xc6, 0x86, 0xb9, 0xea, 0x2c, 0x2a, 0x6e, 0x7e, 0x28, 0x3d, 0x47, 0xab, -- 0x03, 0xe9, 0x00, 0x8a, 0xa0, 0x6b, 0xb9, 0xf9, 0xae, 0xac, 0x2c, 0xaf, -- 0xca, 0x3c, 0xbb, 0x2a, 0x6a, 0x3e, 0xd2, 0xf6, 0x19, 0x3d, 0x33, 0x68, -- 0x35, 0x87, 0x55, 0xc3, 0x80, 0xc0, 0x99, 0x44, 0x37, 0x53, 0x35, 0x84, -- 0xf7, 0x9a, 0xb4, 0x2c, 0xe2, 0x6a, 0xe0, 0x06, 0x6b, 0x0f, 0x2d, 0xec, -- 0xf3, 0x68, 0x61, 0xd3, 0xe9, 0xca, 0x95, 0xe5, 0xae, 0xf6, 0x8f, 0x69, -- 0x7a, 0xbc, 0xae, 0xc1, 0xb2, 0xe2, 0xb3, 0x60, 0x59, 0x61, 0x1d, 0xb4, -- 0x85, 0x5d, 0xbd, 0xb2, 0x58, 0xda, 0x4f, 0x5e, 0x5b, 0xee, 0x44, 0xba, -- 0x6a, 0x1f, 0xcb, 0x4a, 0x35, 0xbd, 0x4f, 0x59, 0xdb, 0x60, 0x71, 0xe5, -- 0xd3, 0x64, 0x37, 0x62, 0x59, 0x8b, 0xdf, 0x67, 0x71, 0x77, 0x98, 0x51, -- 0xd5, 0xd3, 0xea, 0x36, 0xe2, 0x0b, 0x34, 0xe9, 0x4d, 0xb6, 0x8e, 0xb0, -- 0xb5, 0x2f, 0xe4, 0x0b, 0xbc, 0xcc, 0x9e, 0x2d, 0x7c, 0x4c, 0xee, 0xd8, -- 0x3a, 0x63, 0x13, 0x70, 0x06, 0x92, 0x34, 0x3a, 0x87, 0xb3, 0xa2, 0x96, -- 0x97, 0x65, 0xe8, 0x43, 0x6f, 0xaa, 0xe3, 0x56, 0xfd, 0xdd, 0xac, 0xc3, -- 0x19, 0x6e, 0xf7, 0xfd, 0xef, 0x3b, 0x6d, 0x16, 0xce, 0x77, 0xb0, 0xfb, -- 0x16, 0x6b, 0x48, 0x72, 0x42, 0x5d, 0x16, 0x30, 0x16, 0x35, 0x86, 0x88, -- 0x5b, 0x91, 0x38, 0xe3, 0x98, 0xf4, 0x37, 0xe2, 0x91, 0x1b, 0x79, 0xc3, -- 0xa5, 0x62, 0xb2, 0x24, 0x6d, 0xf0, 0x28, 0x1d, 0xdf, 0xf0, 0x4d, 0x94, -- 0xab, 0xf1, 0xd2, 0xb6, 0x49, 0x6e, 0x0b, 0xd2, 0x6b, 0x6f, 0x33, 0x76, -- 0x40, 0x58, 0x47, 0x9b, 0x01, 0x6b, 0xdd, 0xe5, 0x45, 0xac, 0xaa, 0xe9, -- 0xed, 0xee, 0xa7, 0x2e, 0x22, 0x77, 0x68, 0x23, 0xdc, 0x8d, 0x97, 0x50, -- 0x2f, 0xb8, 0x15, 0x8b, 0xc8, 0x2f, 0xeb, 0x22, 0xfa, 0x31, 0x3c, 0xb1, -- 0x31, 0x3c, 0xe9, 0x1c, 0x83, 0x0d, 0x62, 0xe5, 0x28, 0x9e, 0xfc, 0xba, -- 0x8d, 0xec, 0x1c, 0xc3, 0x53, 0x1e, 0x43, 0xbe, 0xb8, 0x7d, 0xda, 0x7a, -- 0x87, 0x74, 0x35, 0x73, 0x53, 0x8c, 0xd3, 0x05, 0x4e, 0x2d, 0x2d, 0x24, -- 0x71, 0xe5, 0x62, 0x7a, 0xcb, 0x1d, 0x11, 0x0d, 0x90, 0x00, 0x07, 0x89, -- 0xa7, 0x0e, 0x0c, 0x38, 0xc9, 0x11, 0x9d, 0x84, 0xdb, 0xc0, 0x27, 0x64, -- 0x87, 0x41, 0x08, 0x65, 0xe3, 0xee, 0x3a, 0x67, 0x61, 0x20, 0x57, 0x8b, -- 0x18, 0xed, 0xac, 0x68, 0xff, 0x47, 0xa7, 0xb7, 0xcf, 0x07, 0xda, 0xd1, -- 0x66, 0x5f, 0x64, 0x52, 0x15, 0x32, 0x6b, 0xbe, 0x55, 0x5a, 0xcd, 0xd9, -- 0x8a, 0xc8, 0x78, 0x32, 0x95, 0x03, 0xe8, 0x03, 0x6a, 0xe7, 0xa9, 0x0d, -- 0x2c, 0x13, 0x43, 0x50, 0x30, 0xd9, 0xe7, 0x3a, 0xd9, 0xe7, 0xff, 0xc7, -- 0x4c, 0xf6, 0xf9, 0xea, 0xc9, 0xa6, 0x3c, 0xd9, 0x74, 0xc1, 0xae, 0x9d, -- 0x36, 0x79, 0x91, 0xa6, 0xbf, 0xc5, 0x5e, 0xc1, 0xcd, 0xe4, 0x7b, 0x26, -- 0x20, 0x70, 0x3d, 0xb6, 0x96, 0xcf, 0x9d, 0x57, 0x0d, 0x63, 0x12, 0x4b, -- 0x2e, 0x5b, 0x1b, 0x6c, 0x08, 0x9d, 0xcd, 0x31, 0x37, 0xc4, 0x55, 0x49, -- 0xfa, 0x36, 0x5b, 0xc2, 0xd5, 0xdb, 0x16, 0xc8, 0xc0, 0xf4, 0x3f, 0x5a, -- 0x26, 0xe7, 0xe6, 0xc9, 0xd9, 0x50, 0x2c, 0x12, 0x3a, 0x3f, 0xda, 0x16, -- 0x47, 0x8a, 0xac, 0x62, 0x5d, 0x30, 0xfb, 0x98, 0xb3, 0x53, 0x2f, 0x57, -- 0x8b, 0x32, 0xe9, 0x7e, 0xc9, 0xb8, 0x84, 0x88, 0x3f, 0x64, 0xf7, 0x06, -- 0x53, 0xb4, 0x9a, 0x1c, 0x31, 0xd8, 0xe4, 0x72, 0x9a, 0x5e, 0x75, 0xdc, -- 0x97, 0xf9, 0xd5, 0xbc, 0x50, 0x27, 0x5b, 0x55, 0xcc, 0xf8, 0x14, 0x7c, -- 0xa3, 0xa7, 0xa0, 0x22, 0xce, 0x32, 0x1f, 0x4f, 0x97, 0xf0, 0xb4, 0x9c, -- 0xd0, 0xc4, 0xe8, 0xab, 0x90, 0x45, 0xec, 0xf3, 0x02, 0xb2, 0x98, 0x39, -- 0x48, 0xaf, 0x58, 0xe2, 0x7c, 0x29, 0xff, 0x54, 0x35, 0xf3, 0xef, 0x2f, -- 0xba, 0x65, 0xa0, 0x73, 0xd5, 0x2b, 0x79, 0x6e, 0xef, 0xf9, 0xd5, 0xfd, -- 0xe0, 0x1d, 0x5e, 0x29, 0x48, 0xce, 0x6a, 0x21, 0xc1, 0xbd, 0x61, 0x27, -- 0xb2, 0xc5, 0xdd, 0x78, 0xa8, 0xc4, 0xdf, 0x26, 0xac, 0x09, 0xc1, 0x92, -- 0x99, 0x1c, 0x7c, 0x7d, 0xc4, 0xb3, 0x4c, 0xf3, 0xa9, 0x98, 0xd9, 0x74, -- 0xd6, 0x79, 0x36, 0x65, 0x2d, 0x0a, 0x4b, 0x06, 0xdf, 0x59, 0x12, 0x9a, -- 0xed, 0xf5, 0xbf, 0xde, 0xdb, 0xe2, 0xef, 0xb4, 0x88, 0xe9, 0xd6, 0xd3, -- 0xe1, 0x76, 0x8f, 0xc5, 0x7a, 0xda, 0xb2, 0x6c, 0x3e, 0x2e, 0x26, 0xdc, -- 0xc9, 0x34, 0x9d, 0xdf, 0x54, 0xa2, 0x88, 0x89, 0x76, 0xc2, 0x63, 0xed, -- 0x13, 0x13, 0x2d, 0xcb, 0x62, 0xc9, 0xa3, 0x8d, 0x78, 0xaf, 0x4e, 0x07, -- 0xcc, 0x46, 0xcd, 0xa7, 0x7f, 0x5b, 0xf2, 0x86, 0xcc, 0xd2, 0xf2, 0xc6, -- 0xcc, 0xb4, 0x7c, 0x4d, 0xa4, 0xd3, 0xaa, 0xc0, 0xce, 0x61, 0x5c, 0x4e, -- 0x05, 0x68, 0x35, 0x37, 0xf8, 0x06, 0xa2, 0x37, 0x11, 0x0b, 0x7b, 0x54, -- 0xe5, 0x20, 0x14, 0x66, 0xd4, 0x8d, 0x6e, 0x46, 0x50, 0x8e, 0x3f, 0x31, -- 0x76, 0x6b, 0x9b, 0x32, 0xc2, 0x86, 0xcd, 0x4a, 0x7c, 0xb4, 0xd3, 0xb4, -- 0xaa, 0x61, 0xf8, 0x31, 0x02, 0xe2, 0x07, 0x43, 0xf1, 0x3a, 0x9d, 0xdf, -- 0xb3, 0x8f, 0xf9, 0x53, 0xc4, 0xeb, 0xcb, 0xfc, 0x6a, 0x59, 0x66, 0x62, -- 0xf1, 0x82, 0x5b, 0xda, 0xbc, 0xd1, 0xac, 0xaf, 0x5d, 0x17, 0xa0, 0x2f, -- 0x92, 0x73, 0xb3, 0xe9, 0x65, 0xd7, 0xbd, 0x67, 0x0a, 0x3b, 0x74, 0xda, -- 0x2a, 0x1b, 0xa3, 0xa9, 0x79, 0xa6, 0x76, 0x2e, 0x70, 0x67, 0x76, 0x62, -- 0x26, 0xe3, 0x69, 0x9a, 0xcf, 0xaa, 0x86, 0x48, 0xdb, 0xa6, 0x0c, 0x93, -- 0xe8, 0x41, 0x14, 0x23, 0x36, 0xb1, 0x97, 0x15, 0x9b, 0x4f, 0xc0, 0xa7, -- 0x4c, 0xca, 0x16, 0x03, 0xf6, 0x75, 0x36, 0xbe, 0x01, 0xd9, 0x05, 0x66, -- 0xc5, 0x36, 0xaf, 0x92, 0x55, 0xc7, 0x82, 0x2d, 0xd9, 0x23, 0x4d, 0xe2, -- 0xc8, 0x88, 0x68, 0x2e, 0x9f, 0x4f, 0x96, 0x63, 0x1c, 0x56, 0xb6, 0x96, -- 0x90, 0x88, 0x56, 0xa6, 0x2c, 0xf2, 0xd4, 0x88, 0x01, 0x48, 0x40, 0x17, -- 0x03, 0x22, 0x82, 0x45, 0xe7, 0xe8, 0xc0, 0xed, 0x44, 0x4e, 0x6d, 0x30, -- 0x81, 0x4a, 0x5d, 0x03, 0xb0, 0xba, 0x9b, 0xf6, 0xd7, 0x5c, 0xcd, 0x56, -- 0x73, 0xb2, 0xb6, 0xfd, 0x44, 0x38, 0xa9, 0x39, 0x2a, 0x27, 0x85, 0x92, -- 0xd2, 0x80, 0xf4, 0xf5, 0x2a, 0x1f, 0x8b, 0xa1, 0x2a, 0xbf, 0xca, 0x98, -- 0x5f, 0xb0, 0xf0, 0x59, 0x4f, 0x67, 0xe2, 0xc7, 0x6f, 0x13, 0xda, 0xc0, -- 0x49, 0x6d, 0x11, 0x59, 0x85, 0x0c, 0x45, 0x54, 0x14, 0x47, 0x1f, 0x66, -- 0x32, 0x0d, 0x8d, 0x68, 0xb9, 0xd8, 0x32, 0x69, 0x28, 0xc2, 0x32, 0xdb, -- 0x6c, 0x07, 0x3e, 0x8f, 0xaa, 0x26, 0xde, 0xd2, 0xe7, 0x23, 0x32, 0x86, -- 0x21, 0x9a, 0x0d, 0x7d, 0x66, 0x61, 0x34, 0x53, 0xe9, 0x88, 0x05, 0x43, -- 0xf6, 0x3e, 0xdd, 0xe5, 0x63, 0x71, 0x3c, 0xc0, 0x79, 0xd6, 0x61, 0x36, -- 0x18, 0x4f, 0x73, 0x7e, 0x70, 0x46, 0xaa, 0x2e, 0xbf, 0x25, 0x92, 0x34, -- 0x5f, 0x0b, 0xa4, 0xd5, 0x4f, 0x1c, 0x47, 0x85, 0x09, 0xad, 0xba, 0x86, -- 0xc9, 0x3b, 0x2d, 0x73, 0x78, 0xa7, 0xa2, 0xe6, 0x64, 0xcc, 0x3c, 0xc9, -- 0x70, 0x9c, 0x50, 0xb5, 0xc4, 0x00, 0xec, 0xed, 0x07, 0x38, 0x3b, 0xcc, -- 0x75, 0x82, 0x83, 0x33, 0xe2, 0xf3, 0x2a, 0xc1, 0x15, 0xc9, 0x4b, 0xbe, -- 0x8e, 0x5e, 0xf1, 0x6c, 0x56, 0xb0, 0xc4, 0x53, 0xf8, 0xc4, 0xae, 0x9b, -- 0xc6, 0xe1, 0x80, 0xf5, 0x89, 0x19, 0x45, 0x5a, 0x83, 0x03, 0x91, 0xa9, -- 0xa7, 0x53, 0x53, 0x21, 0x8a, 0x62, 0x76, 0xe8, 0xda, 0x5a, 0x78, 0x6b, -- 0x11, 0x6d, 0x4d, 0x96, 0xdf, 0xd2, 0xcc, 0xbd, 0xaf, 0x49, 0x1a, 0x87, -- 0x13, 0xb8, 0x77, 0x9e, 0xd5, 0xed, 0xe6, 0x0e, 0xd0, 0xe1, 0x5e, 0x2f, -- 0xf0, 0x25, 0x4b, 0xab, 0xba, 0x76, 0xa3, 0xcc, 0x3c, 0xc5, 0x62, 0x9d, -- 0x21, 0x26, 0xca, 0xa1, 0x47, 0x3b, 0xaf, 0xbe, 0xdb, 0x3f, 0x7e, 0x7f, -- 0xb8, 0xf3, 0x97, 0x36, 0xf9, 0xd0, 0x77, 0xbb, 0xf2, 0xdd, 0x6e, 0xaf, -- 0x8b, 0x67, 0x11, 0x05, 0x25, 0xc9, 0xfa, 0xab, 0xf5, 0xa4, 0xba, 0x9f, -- 0x8d, 0x8a, 0xa9, 0xe3, 0x5b, 0xda, 0x09, 0x8f, 0xa2, 0xaf, 0xf2, 0x41, -- 0x2d, 0xd7, 0x9c, 0x2c, 0x0c, 0xdf, 0x90, 0xed, 0xb1, 0xc3, 0x21, 0xaa, -- 0x02, 0x21, 0x28, 0x20, 0x9d, 0x84, 0x8b, 0x51, 0xd5, 0xb8, 0xf1, 0x74, -- 0x83, 0xb8, 0xe5, 0x4a, 0x08, 0xb2, 0x9f, 0xc8, 0x49, 0x6a, 0xb3, 0x73, -- 0x99, 0xb1, 0x73, 0x75, 0x99, 0x51, 0x50, 0x95, 0x93, 0x44, 0xe4, 0xef, -- 0x7b, 0x22, 0xdf, 0x9a, 0x2d, 0x2a, 0xef, 0x2b, 0x61, 0x2a, 0x79, 0xa5, -- 0xe7, 0xb3, 0xcd, 0xf0, 0x98, 0xe9, 0xb3, 0xff, 0xf2, 0x96, 0x66, 0x21, -- 0x5b, 0xdf, 0xd3, 0xb1, 0x2c, 0x52, 0xe2, 0xe8, 0x65, 0x4f, 0xcf, 0xb3, -- 0x8f, 0x94, 0x51, 0x9b, 0x01, 0x1f, 0xb0, 0x32, 0xb6, 0xd5, 0xd0, 0xa9, -- 0xe3, 0x1e, 0x35, 0x9a, 0x87, 0xc3, 0xb2, 0x8c, 0x23, 0xf0, 0x81, 0xa2, -- 0x51, 0xb3, 0x8b, 0xf0, 0x5e, 0x8f, 0xe4, 0x7a, 0x99, 0xe9, 0xf9, 0x15, -- 0x6f, 0x60, 0x9b, 0xf4, 0xa9, 0xb1, 0x51, 0x3e, 0x37, 0xda, 0x56, 0xd5, -- 0x6c, 0x70, 0xcc, 0x14, 0x3d, 0x2d, 0x94, 0xa5, 0x7b, 0xa3, 0xab, 0xfa, -- 0x3b, 0x1d, 0x0d, 0x74, 0xda, 0xf3, 0x2c, 0xbc, 0xa8, 0x48, 0x64, 0x2b, -- 0x6c, 0xa0, 0x72, 0xb6, 0x1c, 0x39, 0x2d, 0x88, 0xb9, 0xcf, 0x85, 0xf2, -- 0x95, 0xeb, 0x26, 0x45, 0xd9, 0xd1, 0xdc, 0xbb, 0xac, 0xae, 0x48, 0x3a, -- 0xcc, 0xb6, 0xf4, 0xd2, 0xb6, 0x8d, 0x44, 0x2f, 0x32, 0x90, 0x98, 0x7b, -- 0x9d, 0x5c, 0x1c, 0x7a, 0x7b, 0x09, 0x9e, 0xf4, 0x9e, 0x4e, 0xb1, 0xc3, -- 0x86, 0x87, 0xd6, 0x7c, 0xa4, 0xca, 0xa5, 0xd3, 0xd8, 0x42, 0xb5, 0x58, -- 0xd6, 0x6c, 0xe6, 0x28, 0xdc, 0x64, 0xec, 0x0e, 0x55, 0xe2, 0xb2, 0xb3, -- 0x41, 0x3d, 0x0d, 0x59, 0x9c, 0xc0, 0xc7, 0x2e, 0xe0, 0x2a, 0xb6, 0x59, -- 0xc8, 0x32, 0x8f, 0xfd, 0x18, 0x06, 0x7f, 0x4d, 0xfd, 0x65, 0xaf, 0xf1, -- 0x39, 0x58, 0x29, 0xba, 0xc7, 0xe7, 0x49, 0x95, 0xde, 0xca, 0x2b, 0x58, -- 0xaf, 0xee, 0x3b, 0xcb, 0xbb, 0xc6, 0x8c, 0x61, 0xbf, 0xe6, 0xe6, 0x27, -- 0xcb, 0xd9, 0x42, 0x85, 0x89, 0x3f, 0xfc, 0x7e, 0xb2, 0xc3, 0x57, 0x2a, -- 0x1c, 0x0e, 0xd2, 0x6a, 0x9c, 0xe7, 0x5d, 0x02, 0x36, 0x07, 0xe7, 0x91, -- 0x12, 0x77, 0x38, 0x17, 0x63, 0xd2, 0xfe, 0xf9, 0xc1, 0xd1, 0x91, 0xf7, -- 0xca, 0x5a, 0x18, 0x03, 0x62, 0xf3, 0xea, 0x96, 0xbc, 0xd4, 0x6a, 0x2e, -- 0x63, 0x03, 0xf1, 0x58, 0x64, 0x58, 0x99, 0x29, 0x3d, 0xca, 0x56, 0x5c, -- 0x6c, 0x38, 0xdd, 0x47, 0x95, 0x1a, 0xf7, 0xff, 0x52, 0xdf, 0x2f, 0xb2, -- 0x57, 0xfb, 0x3d, 0x67, 0xb8, 0x95, 0x79, 0xb6, 0x4f, 0x40, 0xba, 0x64, -- 0x75, 0x41, 0x98, 0x1d, 0xae, 0x1e, 0xde, 0xbe, 0x89, 0xba, 0x5f, 0x95, -- 0xef, 0xb1, 0x3b, 0x65, 0xc6, 0xf2, 0xe1, 0x25, 0x9c, 0x50, 0xf3, 0x27, -- 0xbb, 0xc4, 0xb8, 0xe8, 0x2e, 0x9f, 0x55, 0xa1, 0x00, 0x85, 0xeb, 0xf7, -- 0x41, 0x6b, 0x60, 0x64, 0x9e, 0xfc, 0x8a, 0x5f, 0x69, 0xdd, 0xfa, 0x0d, -- 0x3b, 0xe5, 0x0a, 0xeb, 0x64, 0x0a, 0x49, 0xb4, 0xb5, 0x77, 0x4b, 0x31, -- 0xa2, 0x92, 0xf0, 0x53, 0x4f, 0x89, 0x59, 0xf5, 0x93, 0xe5, 0x9c, 0xff, -- 0x75, 0x4e, 0x92, 0x24, 0xaf, 0x3b, 0x94, 0x15, 0x56, 0x46, 0xca, 0x9c, -- 0x65, 0xdf, 0x34, 0x09, 0xf9, 0xa6, 0x48, 0xa9, 0xe6, 0x49, 0x11, 0x51, -- 0x80, 0x83, 0xd1, 0x38, 0x12, 0xce, 0xec, 0xce, 0x6d, 0x5e, 0xd7, 0x29, -- 0x0b, 0x6e, 0x98, 0xb9, 0xda, 0xc9, 0x22, 0x81, 0x7c, 0xc2, 0xbb, 0x6e, -- 0x82, 0x48, 0x9b, 0xb1, 0x13, 0xc3, 0x0c, 0x35, 0x90, 0xf6, 0x71, 0x79, -- 0x09, 0x62, 0x67, 0xee, 0xbf, 0xe2, 0xae, 0xf5, 0xfa, 0x47, 0xa1, 0x1c, -- 0x12, 0x6f, 0x38, 0x67, 0xb5, 0xed, 0x86, 0xf8, 0xd8, 0xd9, 0x63, 0xa5, -- 0x27, 0xb6, 0x3d, 0x8e, 0x4b, 0x78, 0xc0, 0x99, 0x59, 0x92, 0xa2, 0xcb, -- 0x77, 0x91, 0x13, 0x08, 0x86, 0xc9, 0x01, 0xac, 0x99, 0xdc, 0x42, 0x15, -- 0x36, 0x11, 0x2e, 0x65, 0x64, 0x80, 0x60, 0x11, 0x10, 0xec, 0x30, 0x0d, -- 0xf8, 0x12, 0xc6, 0x46, 0xab, 0x74, 0x97, 0x21, 0x1a, 0xa7, 0xd1, 0x58, -- 0xe3, 0x42, 0xef, 0xb6, 0x67, 0xc8, 0x0d, 0xbf, 0x51, 0x6d, 0x42, 0xf6, -- 0x99, 0x7b, 0x56, 0xc5, 0x5e, 0xb7, 0x9b, 0x79, 0x71, 0x47, 0x22, 0xcd, -- 0xbc, 0x90, 0x5e, 0xec, 0x14, 0xf3, 0xb0, 0xdb, 0x8b, 0x5e, 0x67, 0x73, -- 0xbd, 0xff, 0x95, 0x91, 0x5b, 0x40, 0x19, 0x9e, 0xae, 0xa1, 0x20, 0x9b, -- 0x18, 0x6d, 0xbc, 0x39, 0xe4, 0xc9, 0x6d, 0xc9, 0x4f, 0x38, 0xb4, 0x0b, -- 0xc0, 0xca, 0x02, 0x9e, 0x6c, 0x17, 0x77, 0x10, 0x77, 0x02, 0x77, 0x34, -- 0x91, 0x45, 0x6f, 0xd0, 0xeb, 0x77, 0x29, 0x47, 0x6d, 0xfe, 0x6b, 0x63, -- 0x72, 0x87, 0x36, 0xba, 0x0b, 0xe4, 0xe8, 0x9b, 0xdb, 0x4b, 0xfc, 0x5e, -- 0x46, 0xd5, 0x12, 0xed, 0xa3, 0x77, 0xb3, 0x86, 0xd4, 0x61, 0x22, 0xd9, -- 0xfc, 0x2a, 0x87, 0x42, 0x92, 0xb6, 0x49, 0x9c, 0x2f, 0x68, 0x3d, 0xc7, -- 0x72, 0x3f, 0x3b, 0x8d, 0x46, 0x87, 0x36, 0x4c, 0xf6, 0xe7, 0x12, 0xcb, -- 0x75, 0x97, 0x82, 0xf2, 0x5c, 0xfb, 0x10, 0x67, 0xe2, 0x03, 0xe8, 0xae, -- 0x83, 0xf0, 0x4a, 0xd2, 0x3b, 0xb7, 0x93, 0x63, 0xbb, 0x51, 0xf2, 0x21, -- 0x20, 0x3e, 0xb9, 0x0e, 0x01, 0x58, 0xad, 0x01, 0xf0, 0x92, 0xbb, 0x45, -- 0x11, 0xee, 0x7d, 0x77, 0x5d, 0x4c, 0xc5, 0x6b, 0xd7, 0x6a, 0x2e, 0x90, -- 0x6b, 0xe1, 0x70, 0x86, 0x3a, 0xcd, 0xbe, 0x22, 0xbe, 0x74, 0xca, 0x0c, -- 0x06, 0x5b, 0x62, 0xae, 0xc4, 0x1f, 0xd8, 0xa9, 0x34, 0xcd, 0xd2, 0x72, -- 0x7a, 0x4f, 0xc4, 0x21, 0x22, 0x4f, 0x32, 0xb8, 0x6d, 0x35, 0x87, 0xe5, -- 0x64, 0x9b, 0x47, 0x4a, 0x73, 0x2f, 0xe7, 0xfc, 0x90, 0x7a, 0x09, 0x2d, -- 0xb8, 0xb2, 0x16, 0xbf, 0xad, 0x38, 0x97, 0xf9, 0xca, 0xbd, 0xcd, 0x59, -- 0xc3, 0x22, 0x7a, 0x20, 0x39, 0xbd, 0x4d, 0x89, 0x6c, 0xcf, 0x04, 0xd1, -- 0xa0, 0x49, 0x09, 0x88, 0xb9, 0xce, 0x03, 0xb5, 0x8c, 0xce, 0xe2, 0x35, -- 0xdd, 0x53, 0xa4, 0x2b, 0x2e, 0xd3, 0xd5, 0xcb, 0xf5, 0x49, 0x17, 0x9c, -- 0xdc, 0x70, 0x61, 0x3c, 0x54, 0x07, 0x2d, 0x83, 0x5e, 0x57, 0xdc, 0x80, -- 0x07, 0xb2, 0x79, 0xc4, 0xfc, 0xe6, 0x4b, 0xba, 0x06, 0xeb, 0xe4, 0x65, -- 0x71, 0x79, 0x49, 0xd4, 0xfe, 0x45, 0x24, 0x68, 0xcb, 0x23, 0x5b, 0x67, -- 0x88, 0xb5, 0x6e, 0x30, 0xdd, 0xa4, 0x19, 0x4e, 0x96, 0xa8, 0xfc, 0x72, -- 0x95, 0xf3, 0x76, 0x48, 0x73, 0xb1, 0x86, 0xd9, 0xfc, 0xde, 0x16, 0x57, -- 0x7c, 0xe1, 0x16, 0x97, 0x0d, 0x7d, 0x73, 0x74, 0xcf, 0x2c, 0x4a, 0x19, -- 0x79, 0x3b, 0x4a, 0xd4, 0x64, 0xdf, 0x9b, 0x7c, 0xb1, 0xe0, 0xcd, 0x92, -- 0xf0, 0x4e, 0x6c, 0xb3, 0xd3, 0x21, 0x46, 0x19, 0x1d, 0x0a, 0xec, 0xaa, -- 0x39, 0x94, 0x8b, 0x25, 0x5d, 0xc4, 0x32, 0xe8, 0x51, 0x46, 0x27, 0xbd, -- 0xdd, 0x9c, 0x09, 0xf0, 0x3e, 0x1c, 0x4b, 0x15, 0x9e, 0x09, 0x87, 0x5e, -- 0xcd, 0x95, 0x83, 0xf2, 0x36, 0xf9, 0x28, 0x0f, 0x55, 0x20, 0xfb, 0x1d, -- 0x87, 0xff, 0x8d, 0xd7, 0x92, 0xec, 0x3c, 0x9f, 0x1f, 0xfd, 0xaf, 0x43, -- 0x1f, 0x3c, 0xe7, 0xa2, 0xd3, 0xee, 0x41, 0xed, 0x11, 0x3d, 0xbc, 0xe7, -- 0x4b, 0xb0, 0x37, 0x38, 0xa0, 0xfd, 0xea, 0x61, 0x28, 0x0d, 0x6b, 0xde, -- 0xb2, 0x2e, 0xd8, 0xef, 0x2c, 0x71, 0x86, 0x88, 0xf9, 0x66, 0x92, 0x23, -- 0x7d, 0xb1, 0xcc, 0xb6, 0xe0, 0xec, 0x2f, 0x22, 0xce, 0x8b, 0x2d, 0x44, -- 0x78, 0x8f, 0x13, 0x64, 0x8e, 0x6a, 0x09, 0xf7, 0x84, 0x54, 0xe1, 0xb7, -- 0x4f, 0x03, 0x98, 0xb6, 0x20, 0x4b, 0x6a, 0xfc, 0x5d, 0xcc, 0x0b, 0xd4, -- 0xae, 0x22, 0xd1, 0x46, 0x1d, 0xcc, 0xec, 0x1f, 0x68, 0xed, 0x19, 0xe7, -- 0x8b, 0x6b, 0x16, 0x1b, 0x5f, 0x22, 0xb0, 0x81, 0x0d, 0x4c, 0xf2, 0xc1, -- 0x17, 0x9d, 0xd6, 0xf7, 0x73, 0x3d, 0x18, 0x95, 0x5e, 0xa4, 0xf6, 0xb6, -- 0xf2, 0xaf, 0xdc, 0x02, 0x92, 0x2d, 0x4c, 0x52, 0x83, 0x69, 0xa8, 0xe9, -- 0x36, 0xcb, 0x71, 0x1d, 0x89, 0xea, 0x6e, 0xa1, 0x27, 0x08, 0xfb, 0xb4, -- 0xaf, 0x86, 0xc9, 0x19, 0xee, 0xc8, 0xe5, 0x42, 0xe2, 0x12, 0xd9, 0x56, -- 0xaf, 0xdf, 0x45, 0x4e, 0xaf, 0xaa, 0x6e, 0x88, 0x47, 0x88, 0xf6, 0x0f, -- 0xfb, 0x9b, 0x37, 0xf4, 0x89, 0x3c, 0xf8, 0x8e, 0x64, 0xc6, 0xbd, 0xb6, -- 0x2c, 0xed, 0xa3, 0x8a, 0x89, 0x37, 0xce, 0xab, 0x6a, 0x8a, 0x38, 0xee, -- 0x49, 0x31, 0xae, 0xb6, 0xd2, 0xc5, 0xa2, 0xda, 0xb2, 0x01, 0x36, 0x22, -- 0xb6, 0x4d, 0xeb, 0x38, 0x3f, 0x77, 0x73, 0xe3, 0x4b, 0x17, 0x36, 0x29, -- 0x27, 0x2a, 0x4d, 0xe1, 0x79, 0x9b, 0xab, 0x69, 0xf5, 0x58, 0x3d, 0x40, -- 0x5f, 0xcf, 0x97, 0x17, 0xc7, 0xe7, 0x72, 0xe1, 0xb6, 0x6f, 0xce, 0x25, -- 0x1f, 0x51, 0xdb, 0x9d, 0xb0, 0x71, 0x28, 0x72, 0x72, 0x01, 0x9f, 0x9f, -- 0x1f, 0xe0, 0xc3, 0xf3, 0x25, 0x8b, 0x30, 0xd4, 0x4d, 0x79, 0x2f, 0x6c, -- 0x23, 0xba, 0x69, 0x78, 0xb6, 0xc9, 0x27, 0xff, 0xa7, 0x0b, 0x71, 0x95, -- 0xd7, 0xc3, 0xcb, 0x6c, 0x52, 0x94, 0x69, 0x64, 0x29, 0x2b, 0x38, 0xa0, -- 0x1e, 0xab, 0x33, 0xa6, 0xa7, 0xb6, 0x48, 0x3a, 0xfe, 0x40, 0xeb, 0x35, -- 0xe4, 0xdf, 0xa1, 0xda, 0xc9, 0xa2, 0xd9, 0xc7, 0xbc, 0x5e, 0x7f, 0x7c, -- 0x8d, 0x10, 0x3d, 0x3a, 0x0e, 0xd5, 0xef, 0x49, 0xd7, 0x24, 0xa4, 0xc1, -- 0x05, 0x30, 0xe9, 0x16, 0x0a, 0xcf, 0xcc, 0x26, 0x98, 0xf8, 0x27, 0x7d, -- 0xc8, 0x5e, 0x3b, 0x73, 0x89, 0xa4, 0xb0, 0xab, 0x82, 0xae, 0xd3, 0xeb, -- 0x59, 0xa7, 0x1f, 0xc2, 0x7c, 0x6c, 0x7d, 0xec, 0x26, 0xd4, 0x34, 0xb9, -- 0x4e, 0x96, 0xf3, 0xa0, 0x75, 0xa2, 0x84, 0x31, 0x31, 0x0a, 0x8e, 0x08, -- 0x17, 0xe3, 0x47, 0xc7, 0xf6, 0x98, 0x9c, 0xed, 0x8d, 0x85, 0x66, 0xfc, -- 0x32, 0x96, 0x57, 0x41, 0xb5, 0x61, 0xaf, 0xc4, 0xdc, 0xe7, 0x51, 0xc1, -- 0x6c, 0xcd, 0x06, 0xea, 0xae, 0xd1, 0x61, 0x89, 0x5a, 0xd7, 0x78, 0x73, -- 0xa9, 0x70, 0x5c, 0x07, 0xbc, 0xbc, 0xcc, 0xea, 0x5e, 0x56, 0x24, 0xd1, -- 0x50, 0x27, 0x5f, 0x44, 0x41, 0x3f, 0x1f, 0xf3, 0xd9, 0x72, 0x86, 0x6d, -- 0x60, 0xca, 0xd3, 0xc7, 0x84, 0x4d, 0xf1, 0x05, 0x8d, 0x88, 0x18, 0x9d, -- 0xb9, 0xe7, 0x01, 0xce, 0x17, 0xd2, 0xbe, 0x64, 0x64, 0x3e, 0xf2, 0x2d, -- 0x89, 0x53, 0x43, 0x27, 0xa5, 0x69, 0xa0, 0xd5, 0x8c, 0x43, 0x24, 0x9a, -- 0xfc, 0x24, 0x59, 0x5c, 0xa7, 0x55, 0xd6, 0x47, 0xe0, 0x59, 0xd7, 0x54, -- 0xe9, 0x5b, 0x7b, 0x3a, 0x8b, 0x34, 0xa3, 0x02, 0xf2, 0x30, 0xfc, 0xa8, -- 0xb4, 0xb4, 0x9c, 0x2e, 0x04, 0x13, 0xe4, 0x67, 0xc3, 0x27, 0xbb, 0xc3, -- 0xed, 0x7e, 0x64, 0x73, 0xf0, 0xaa, 0xa2, 0x05, 0x89, 0x13, 0x5f, 0x19, -- 0xe7, 0x33, 0x17, 0x7d, 0x67, 0xb2, 0x4c, 0xc6, 0xb2, 0xdd, 0x52, 0xe9, -- 0x13, 0x77, 0x45, 0x3e, 0x8d, 0xc3, 0x49, 0x58, 0x30, 0x13, 0x16, 0x49, -- 0xad, 0x2d, 0xcb, 0x74, 0x7c, 0x2f, 0x01, 0xa5, 0xa1, 0x4d, 0xc2, 0x1a, -- 0xa0, 0x71, 0xe1, 0x69, 0x1c, 0x70, 0xee, 0x74, 0x10, 0x89, 0x9f, 0x53, -- 0xf5, 0x05, 0x83, 0xc9, 0x9e, 0x67, 0x99, 0x68, 0xc9, 0x10, 0x20, 0x67, -- 0x2c, 0x83, 0xcc, 0xd2, 0x8f, 0xd8, 0xd0, 0x07, 0x45, 0xc8, 0x7f, 0xd0, -- 0x51, 0x83, 0xc8, 0x49, 0xba, 0x5c, 0xd9, 0xa6, 0x66, 0x38, 0xd2, 0x9c, -- 0xd1, 0x1b, 0x44, 0xf1, 0x57, 0x3a, 0x12, 0x2d, 0x33, 0x93, 0x45, 0xc2, -- 0xf5, 0x03, 0x72, 0x95, 0x36, 0x3b, 0xec, 0x40, 0xb4, 0xb5, 0x74, 0x9a, -- 0x38, 0x80, 0x81, 0x0d, 0x53, 0x1c, 0x7f, 0xc6, 0xcc, 0xa4, 0xa0, 0xbf, -- 0xaf, 0x73, 0x1a, 0x79, 0x39, 0xbe, 0xc6, 0xba, 0xb2, 0xc1, 0x17, 0x3e, -- 0xb1, 0x87, 0x54, 0x7e, 0xf4, 0x51, 0xa9, 0xed, 0x34, 0xe7, 0xab, 0x88, -- 0xb5, 0xd6, 0x62, 0x6e, 0x32, 0x48, 0x6b, 0x74, 0x2c, 0xcf, 0x33, 0x5b, -- 0xc8, 0xa6, 0x4c, 0x3d, 0x47, 0x5d, 0x46, 0xaf, 0x41, 0x11, 0xa8, 0x34, -- 0xb8, 0xfa, 0x89, 0xe2, 0xa8, 0x69, 0x96, 0xa6, 0xc5, 0x60, 0x28, 0x1d, -- 0xb1, 0xd9, 0x5b, 0xfa, 0x42, 0x20, 0x19, 0xab, 0x82, 0x6d, 0xf5, 0x50, -- 0x3d, 0x7d, 0xfa, 0xbe, 0xad, 0xbd, 0x39, 0xfb, 0x22, 0xf5, 0xa6, 0xb0, -- 0xf9, 0x98, 0x22, 0x68, 0x0b, 0x23, 0x97, 0xb5, 0xd3, 0xd7, 0x58, 0x78, -- 0xa2, 0xc1, 0x48, 0xfa, 0x23, 0x5f, 0x13, 0x83, 0xc1, 0x65, 0x1d, 0x99, -- 0x95, 0x83, 0x2d, 0x6d, 0xee, 0xf4, 0xf4, 0x12, 0x76, 0x9c, 0x4d, 0x16, -- 0x60, 0x89, 0x52, 0xea, 0xe4, 0xf8, 0x0d, 0x1f, 0xe0, 0x83, 0x33, 0xfa, -- 0x37, 0x37, 0x4f, 0x29, 0x5b, 0x43, 0x91, 0xcb, 0xc8, 0x66, 0x92, 0xb7, -- 0xdf, 0x9d, 0x27, 0x1b, 0x27, 0xe7, 0x5b, 0x4f, 0x5e, 0x6c, 0x6f, 0xb6, -- 0xdb, 0xe2, 0xa5, 0x82, 0xfa, 0xde, 0xa9, 0xb9, 0x9f, 0x6f, 0x71, 0x0a, -- 0xe8, 0x26, 0xa7, 0xe9, 0xde, 0xb2, 0x61, 0xa2, 0x61, 0xd6, 0x3a, 0x3d, -- 0x7c, 0x6b, 0xf6, 0x47, 0x71, 0xef, 0x93, 0x4c, 0x4d, 0xe3, 0x61, 0xef, -- 0x49, 0x4c, 0x38, 0x67, 0xd9, 0xad, 0x59, 0x31, 0x93, 0x63, 0x88, 0x0a, -- 0xe0, 0x59, 0x6c, 0x28, 0x35, 0xc1, 0x63, 0x91, 0xb1, 0x38, 0xe9, 0x5b, -- 0x50, 0xb6, 0xc6, 0x17, 0x78, 0x24, 0xf0, 0x8d, 0xc0, 0x92, 0x2a, 0x1a, -- 0x53, 0x89, 0x4b, 0x83, 0x83, 0xfa, 0x27, 0xbf, 0xdf, 0x09, 0xeb, 0x08, -- 0x7e, 0xd9, 0x79, 0x31, 0xfc, 0xcc, 0x65, 0xc0, 0x0d, 0x26, 0x7d, 0x8b, -- 0x49, 0x7e, 0xf9, 0x80, 0xcb, 0xe1, 0x3c, 0x13, 0x66, 0x1d, 0x32, 0x1c, -- 0xbc, 0x04, 0x6f, 0x00, 0xe2, 0xf2, 0xcd, 0x51, 0xe6, 0xbd, 0xd7, 0x1d, -- 0x86, 0x46, 0xcb, 0xee, 0x75, 0xbe, 0x51, 0x89, 0x28, 0x85, 0x9e, 0xab, -- 0x8b, 0x96, 0x8c, 0xca, 0xe2, 0x8e, 0x43, 0x11, 0x11, 0x20, 0x0f, 0xea, -- 0x4b, 0x25, 0x36, 0xf1, 0x3a, 0xb2, 0xaa, 0xd2, 0x9e, 0x4e, 0x9d, 0xa7, -- 0xfd, 0x9b, 0x8b, 0xb7, 0xc7, 0x12, 0x21, 0xce, 0xd7, 0xde, 0x42, 0x7d, -- 0xf8, 0x18, 0xf3, 0x72, 0x44, 0xf7, 0x01, 0x73, 0xdc, 0xda, 0x99, 0xc6, -- 0xba, 0x18, 0x2d, 0xec, 0x78, 0x4e, 0x98, 0x5f, 0x74, 0xb9, 0x59, 0xf4, -- 0xe2, 0xf1, 0xf6, 0x0b, 0xd6, 0xd7, 0xe8, 0x34, 0x0e, 0xd8, 0x50, 0xd8, -- 0xb6, 0xf9, 0x2c, 0x16, 0x53, 0xb5, 0x63, 0x6d, 0x7d, 0x1c, 0x90, 0x40, -- 0x38, 0xe0, 0xd1, 0x0d, 0xa8, 0x79, 0xf1, 0x14, 0x33, 0x8b, 0x39, 0xa0, -- 0x2b, 0x5e, 0xe8, 0x24, 0x19, 0xbc, 0xe1, 0xad, 0xe0, 0x47, 0xa2, 0xed, -- 0x0b, 0x76, 0x49, 0x95, 0x33, 0x2c, 0x5b, 0x5a, 0x59, 0x40, 0xb9, 0x18, -- 0x4d, 0xd5, 0x0f, 0xbd, 0x40, 0x9c, 0xaf, 0xc4, 0x99, 0x2f, 0x48, 0x17, -- 0x88, 0xac, 0x47, 0x6c, 0xae, 0x2f, 0xef, 0x25, 0xf2, 0x59, 0xad, 0xe9, -- 0xe6, 0x56, 0x74, 0x96, 0x04, 0x69, 0x56, 0x9e, 0xf4, 0xe6, 0xfb, 0x82, -- 0x65, 0xc0, 0x41, 0x64, 0x4d, 0x85, 0xdf, 0x9b, 0x5f, 0x93, 0x90, 0x7e, -- 0x4e, 0x02, 0x95, 0x9d, 0x10, 0x67, 0x3a, 0x72, 0xda, 0xd2, 0x7b, 0x34, -- 0xae, 0x0d, 0xbb, 0x45, 0xe8, 0x22, 0x7d, 0x9f, 0x46, 0x50, 0xf9, 0x00, -- 0x72, 0x3b, 0x03, 0xb8, 0x83, 0x21, 0x06, 0x23, 0x82, 0x5c, 0xf3, 0x18, -- 0x85, 0x8c, 0x48, 0x60, 0x8a, 0x6f, 0x3b, 0x33, 0xd9, 0xf4, 0x95, 0xe2, -- 0x74, 0x61, 0x72, 0xbe, 0x0c, 0x1a, 0x36, 0x7d, 0x39, 0x3f, 0xb3, 0xac, -- 0xbc, 0x82, 0x96, 0x79, 0x95, 0xd5, 0xb1, 0xb2, 0xa0, 0xfc, 0x42, 0xc3, -- 0x82, 0xa1, 0xdc, 0xfe, 0xcb, 0x40, 0x1c, 0x50, 0xb8, 0x30, 0x96, 0x1c, -- 0x9f, 0x2b, 0xd4, 0x91, 0xac, 0x73, 0x66, 0x82, 0x3a, 0xf3, 0xe6, 0xb4, -- 0x10, 0xbc, 0x8f, 0xb1, 0xb2, 0x3c, 0x9d, 0xbe, 0x9a, 0x92, 0xe2, 0x7e, -- 0xbf, 0x9e, 0x68, 0x5a, 0x8d, 0x06, 0xc0, 0xd7, 0xaa, 0xd8, 0x63, 0x33, -- 0xc7, 0xd7, 0xcb, 0xf9, 0x8d, 0x29, 0xde, 0xd3, 0xa2, 0xe0, 0xf0, 0x02, -- 0x0e, 0xc6, 0x6f, 0x35, 0xb7, 0x1e, 0xf4, 0xf6, 0x2f, 0x61, 0xdb, 0x5d, -- 0xab, 0x8c, 0xdd, 0x47, 0x46, 0x87, 0x23, 0x72, 0x77, 0x73, 0x49, 0x3e, -- 0x64, 0xf2, 0x65, 0xdf, 0x5c, 0xdd, 0x75, 0xc3, 0xa9, 0x15, 0x05, 0x44, -- 0x89, 0x99, 0x0f, 0x37, 0x97, 0xf3, 0x9f, 0xb9, 0x56, 0xc5, 0x51, 0x46, -- 0xec, 0x7c, 0x60, 0x4e, 0xde, 0x86, 0xe9, 0x94, 0x1f, 0xee, 0xb8, 0x0e, -- 0x3d, 0x34, 0x00, 0x9c, 0xa9, 0xc3, 0xe4, 0x6d, 0x98, 0x30, 0xd7, 0x8c, -- 0x86, 0x70, 0xbb, 0x38, 0x4c, 0x4e, 0x69, 0xbd, 0x06, 0x91, 0xf3, 0xe5, -- 0xca, 0xb6, 0x1d, 0x0d, 0xf2, 0xba, 0xfa, 0x11, 0x4f, 0x92, 0xf5, 0xcb, -- 0xa2, 0x18, 0xa5, 0xe5, 0xba, 0x6e, 0x00, 0x1c, 0xf7, 0x23, 0x55, 0xbe, -- 0x78, 0x49, 0x22, 0xa7, 0x37, 0xda, 0xfa, 0x52, 0xde, 0x1a, 0x8a, 0xa4, -- 0x12, 0x1c, 0xcf, 0x62, 0x3a, 0x71, 0x8b, 0xd0, 0xee, 0xb0, 0x63, 0xd3, -- 0x78, 0x53, 0x49, 0x7c, 0x49, 0xcb, 0x32, 0x4f, 0xaf, 0x78, 0xb1, 0xeb, -- 0x65, 0x39, 0x97, 0xec, 0xb2, 0x79, 0x76, 0x27, 0xce, 0x46, 0xef, 0x2b, -- 0x2a, 0x61, 0x5d, 0x69, 0x6a, 0xf6, 0x91, 0x9b, 0xa6, 0xfb, 0x62, 0xfc, -- 0x1e, 0x36, 0x6a, 0x4d, 0xef, 0x92, 0x74, 0xd3, 0xc0, 0xf1, 0xd3, 0x64, -- 0xee, 0x70, 0x43, 0x75, 0xdb, 0x41, 0x03, 0x35, 0x43, 0xdc, 0x84, 0x2e, -- 0x67, 0x93, 0x96, 0x21, 0xc8, 0xfd, 0x54, 0x0f, 0x16, 0xb7, 0xab, 0xdd, -- 0x74, 0x4c, 0x5c, 0x18, 0x37, 0x1b, 0x65, 0x72, 0x18, 0xa0, 0x71, 0xcd, -- 0x14, 0xdc, 0xcc, 0x50, 0x1d, 0xca, 0x41, 0xb6, 0xa3, 0x1b, 0xae, 0x38, -- 0xb6, 0x62, 0xa2, 0x99, 0x0b, 0x75, 0xca, 0xca, 0xe7, 0x9a, 0x8d, 0x08, -- 0x4d, 0xc3, 0xe1, 0x50, 0xcc, 0xdd, 0x6d, 0xee, 0x7c, 0x3f, 0x6a, 0x39, -- 0x8d, 0x76, 0xb9, 0x61, 0x47, 0xfd, 0x03, 0xac, 0x11, 0xab, 0xfc, 0x6d, -- 0xbc, 0x16, 0x92, 0x01, 0xc2, 0x17, 0x18, 0x0e, 0x4f, 0x9b, 0x71, 0x88, -- 0x25, 0xb7, 0xe1, 0xd5, 0x8b, 0x16, 0xb8, 0x25, 0xf3, 0xaa, 0x2b, 0x2b, -- 0x0b, 0xad, 0x56, 0x4e, 0xcd, 0x14, 0xc2, 0x48, 0xcb, 0x50, 0x9e, 0x88, -- 0x64, 0x0d, 0x9e, 0x5e, 0x4f, 0x57, 0xad, 0xa7, 0x1e, 0x9f, 0xa5, 0xbc, -- 0xc5, 0x9a, 0x26, 0x0e, 0x69, 0xf9, 0xbb, 0x46, 0x04, 0xf9, 0xdb, 0xa9, -- 0x5b, 0xc0, 0x60, 0xf5, 0xc3, 0x5f, 0x6f, 0xd1, 0x9b, 0x7a, 0x01, 0x3d, -- 0x24, 0x9b, 0x5c, 0xa8, 0x41, 0xb7, 0x56, 0x0f, 0x1c, 0xec, 0x96, 0x53, -- 0x48, 0xf2, 0x2d, 0x8f, 0x2d, 0x07, 0x0c, 0x68, 0xe4, 0x0d, 0x9d, 0x80, -- 0x48, 0x6e, 0x65, 0xe7, 0x3c, 0x07, 0x61, 0x11, 0x59, 0x56, 0x45, 0xd6, -- 0x88, 0xea, 0x0c, 0xa2, 0x0e, 0x90, 0xb2, 0xa1, 0x99, 0x70, 0x9f, 0xc4, -- 0x38, 0xbd, 0xbf, 0xba, 0x8b, 0x6b, 0x32, 0x07, 0xa2, 0x9b, 0xe3, 0xb5, -- 0x32, 0x8f, 0x05, 0x6c, 0x22, 0x9a, 0x69, 0x2f, 0xc9, 0x86, 0x89, 0xe5, -- 0xd9, 0x47, 0xf7, 0x7d, 0x47, 0x9c, 0x1f, 0x67, 0x87, 0x7c, 0x44, 0xae, -- 0x90, 0x5e, 0x16, 0x8e, 0x85, 0x48, 0x06, 0x6e, 0x9b, 0xc9, 0x48, 0x5c, -- 0x30, 0x68, 0x6b, 0xd2, 0x11, 0x66, 0x35, 0x86, 0xa4, 0x5e, 0xb9, 0xd4, -- 0xab, 0x39, 0x48, 0x9c, 0x19, 0xe3, 0x6f, 0xa4, 0x19, 0x39, 0xc7, 0x85, -- 0x04, 0x50, 0xb8, 0x04, 0x9a, 0x0e, 0x0d, 0x5f, 0xa2, 0xb0, 0xc4, 0xbb, -- 0x82, 0x18, 0x49, 0x59, 0xe8, 0xb4, 0x52, 0xe8, 0x8c, 0x91, 0xac, 0xd2, -- 0x03, 0xa4, 0xe3, 0x44, 0x8c, 0x5f, 0x43, 0x3d, 0x7d, 0xb7, 0xea, 0xca, -- 0x12, 0xc5, 0x0f, 0xa3, 0xdc, 0xdd, 0x64, 0x91, 0x8e, 0x4b, 0x41, 0x2c, -- 0xe6, 0xbc, 0xf2, 0x88, 0x3a, 0xbd, 0x4e, 0xcd, 0xd3, 0x90, 0x95, 0x2c, -- 0x09, 0x55, 0x10, 0x9c, 0xcc, 0xd4, 0xd2, 0xcc, 0x08, 0xd9, 0xf9, 0x9c, -- 0xa3, 0xd1, 0x23, 0x9d, 0x8c, 0x08, 0xe6, 0xe0, 0xeb, 0x23, 0x18, 0xa3, -- 0xa6, 0x39, 0xb1, 0x54, 0x21, 0x29, 0x99, 0x8b, 0x00, 0x7b, 0x38, 0xca, -- 0xba, 0x62, 0x5e, 0xa7, 0xe1, 0xd2, 0xcd, 0x8c, 0x35, 0xe7, 0x42, 0xe3, -- 0xa5, 0x76, 0x79, 0x0e, 0x2e, 0x61, 0x11, 0x9b, 0x9c, 0x9a, 0x10, 0xeb, -- 0x62, 0xc8, 0x52, 0x6f, 0x7f, 0xed, 0x5c, 0x3b, 0xf4, 0xae, 0xf9, 0x83, -- 0x2c, 0x26, 0x8b, 0x55, 0x1e, 0x1c, 0x36, 0xb2, 0x7e, 0xf9, 0x5d, 0x16, -- 0xa0, 0x94, 0xac, 0xda, 0x5b, 0x8b, 0x3c, 0x72, 0xe8, 0xbe, 0x1b, 0xbf, -- 0xe8, 0xc2, 0x05, 0xce, 0xce, 0x5c, 0xe2, 0x98, 0x5b, 0xcb, 0x2c, 0x94, -- 0xc1, 0x45, 0xee, 0x67, 0xa9, 0xbd, 0xcb, 0xeb, 0xe6, 0x8c, 0xb9, 0x74, -- 0xda, 0xfe, 0x07, 0x9b, 0x8d, 0xa1, 0x8a, 0x11, 0x51, 0xb3, 0xb2, 0x09, -- 0xf3, 0x87, 0xfa, 0x4a, 0xac, 0x35, 0x0b, 0x9b, 0xe5, 0xbf, 0xd3, 0x28, -- 0xea, 0xc5, 0x1d, 0x92, 0xfb, 0xe4, 0x15, 0xcb, 0x36, 0x5f, 0x6a, 0x18, -- 0x12, 0xdb, 0xf1, 0x54, 0xff, 0x13, 0x07, 0x89, 0x5c, 0x4b, 0x12, 0x94, -- 0x23, 0x1a, 0x0f, 0x96, 0xa1, 0xbb, 0x39, 0x04, 0x04, 0x85, 0xab, 0x27, -- 0xe4, 0x37, 0x86, 0x3d, 0x07, 0x60, 0x39, 0x51, 0x04, 0xc6, 0xab, 0xc7, -- 0x57, 0xef, 0xd7, 0x2e, 0xdf, 0xc3, 0xab, 0x77, 0x71, 0x2d, 0xb9, 0x04, -- 0x19, 0xc2, 0xdd, 0x5e, 0x05, 0xe1, 0x57, 0xec, 0x3f, 0x91, 0x00, 0x60, -- 0x1f, 0xcf, 0xd2, 0x3c, 0x9a, 0x81, 0x17, 0xec, 0xd5, 0x3f, 0x6a, 0xd7, -- 0x41, 0x8c, 0x90, 0xf2, 0x79, 0xf0, 0xdd, 0xcd, 0x09, 0x2f, 0x94, 0x44, -- 0xa3, 0xa2, 0xce, 0xfc, 0x66, 0x0b, 0x12, 0x06, 0xb7, 0xc0, 0x59, 0x32, -- 0x1f, 0x17, 0x6a, 0xfc, 0xc3, 0xe9, 0xeb, 0x50, 0x75, 0x1a, 0x1a, 0xcf, -- 0xc4, 0xac, 0x2f, 0xd1, 0xfc, 0xbe, 0x34, 0xce, 0xfe, 0xd8, 0xe4, 0x1a, -- 0xc1, 0x5a, 0x88, 0x13, 0x6c, 0xc8, 0xa9, 0xa0, 0x17, 0x75, 0xfe, 0x74, -- 0x38, 0x13, 0x8d, 0x93, 0xf9, 0xa0, 0x6b, 0xd0, 0xa3, 0xe3, 0xf9, 0x9b, -- 0xfd, 0xe6, 0x9a, 0x71, 0x56, 0x30, 0x98, 0xa8, 0x6e, 0x74, 0x77, 0x73, -- 0x39, 0x5f, 0xe8, 0xb6, 0x7d, 0xac, 0xda, 0x77, 0x6e, 0xdf, 0xff, 0x61, -- 0x53, 0x94, 0x68, 0x05, 0x51, 0x60, 0x04, 0x34, 0xe9, 0x8a, 0xe3, 0x54, -- 0x24, 0x58, 0xf7, 0x6f, 0x6c, 0xa0, 0x4d, 0x18, 0xb7, 0x6b, 0x05, 0x13, -- 0xc0, 0x05, 0xc5, 0x3e, 0x4f, 0x76, 0xe7, 0x4d, 0xa1, 0x16, 0x52, 0xe3, -- 0xa0, 0x72, 0xaf, 0xed, 0x0f, 0x10, 0x78, 0xa8, 0x54, 0x3b, 0x04, 0x1d, -- 0x3e, 0x40, 0xac, 0x8e, 0x38, 0xbb, 0xe9, 0x72, 0x25, 0x05, 0xd2, 0x4d, -- 0x95, 0x4d, 0xb3, 0x2b, 0x11, 0x71, 0x8f, 0x0f, 0xbf, 0x3b, 0x3c, 0x8e, -- 0x04, 0xae, 0x5a, 0x3e, 0x77, 0xde, 0xcb, 0xc0, 0xae, 0x61, 0xc8, 0x26, -- 0x79, 0x25, 0x06, 0x79, 0xe9, 0x53, 0x5b, 0xec, 0x0c, 0x7c, 0xcd, 0x99, -- 0x41, 0x6a, 0xfa, 0x04, 0xac, 0x34, 0x63, 0x92, 0x43, 0x05, 0x1f, 0xa8, -- 0x82, 0x2d, 0x4f, 0x65, 0xaf, 0xaf, 0xcf, 0xcf, 0xb7, 0x6e, 0xb2, 0x72, -- 0xc4, 0xf8, 0x4b, 0x31, 0x41, 0x21, 0x1e, 0x3f, 0x79, 0x8d, 0x08, 0x02, -- 0xf1, 0x04, 0xf0, 0x2e, 0xfb, 0x99, 0x44, 0x6f, 0x2c, 0x8a, 0x69, 0x3e, -- 0xbe, 0x4f, 0x5e, 0xeb, 0xc8, 0x24, 0x19, 0x04, 0xbb, 0x0e, 0x07, 0x80, -- 0xda, 0x4b, 0x4f, 0xbe, 0x1d, 0xec, 0x9f, 0x0f, 0x5e, 0x1f, 0x1e, 0x1f, -- 0x7e, 0xbd, 0x7f, 0x71, 0x28, 0x09, 0x0d, 0x08, 0xc3, 0x5c, 0xc1, 0x75, -- 0x94, 0x22, 0xbe, 0xd5, 0x71, 0x62, 0x55, 0x38, 0x88, 0xb8, 0xce, 0xc7, -- 0x37, 0x59, 0x6d, 0xc1, 0x9e, 0x86, 0x66, 0xc7, 0xdc, 0xba, 0x16, 0xd7, -- 0x78, 0x77, 0x73, 0xb4, 0x35, 0xd3, 0x99, 0x0e, 0x35, 0x9a, 0x41, 0x3a, -- 0xbd, 0x63, 0x24, 0x90, 0xf7, 0x73, 0x56, 0x4f, 0x34, 0x35, 0x9f, 0xa5, -- 0x56, 0xcc, 0x3e, 0xd8, 0x92, 0x60, 0xfd, 0x1b, 0xbb, 0x8c, 0xe8, 0xa7, -- 0x15, 0x41, 0x4b, 0x12, 0x22, 0xa7, 0xd9, 0x75, 0xaf, 0xf1, 0xe4, 0xca, -- 0x00, 0x31, 0x56, 0xa3, 0xf5, 0xab, 0x48, 0x22, 0x16, 0x2a, 0xaa, 0xc6, -- 0xd7, 0xd9, 0x4c, 0x0f, 0x17, 0xc7, 0x19, 0xd0, 0xa3, 0x8a, 0x12, 0x42, -- 0x07, 0xec, 0x8e, 0xe3, 0x57, 0xe4, 0x28, 0x8b, 0xba, 0x21, 0x11, 0x70, -- 0x08, 0x09, 0xeb, 0x8a, 0xec, 0xbc, 0xcb, 0x91, 0xa0, 0x2d, 0xa1, 0x20, -- 0x88, 0x8a, 0x03, 0x95, 0x58, 0x6c, 0x69, 0x77, 0x34, 0xa9, 0x00, 0xbd, -- 0xb4, 0x15, 0xb4, 0xa5, 0xa5, 0x93, 0xb8, 0x5c, 0x9f, 0x42, 0x23, 0xce, -- 0x04, 0x4b, 0x4f, 0x4e, 0xb3, 0xbb, 0x19, 0x78, 0xa4, 0x82, 0xf3, 0x26, -- 0x11, 0xb5, 0x71, 0x28, 0x3b, 0x22, 0xcb, 0x82, 0x90, 0x76, 0x41, 0x2b, -- 0x70, 0x41, 0xeb, 0x6c, 0x91, 0x36, 0xe4, 0x38, 0x4b, 0xe8, 0xee, 0xd2, -- 0x10, 0xea, 0xb6, 0x9a, 0xac, 0x1a, 0x5d, 0x4b, 0x14, 0x06, 0xa1, 0x4a, -- 0x20, 0x53, 0xa9, 0x4a, 0x54, 0x67, 0x6e, 0x6a, 0x73, 0xd7, 0x91, 0xef, -- 0x39, 0xc8, 0x16, 0x65, 0xdd, 0x11, 0x22, 0x29, 0x39, 0x16, 0xce, 0xb2, -- 0x32, 0x09, 0xb2, 0x43, 0x83, 0x24, 0xfe, 0xc3, 0xd3, 0x33, 0x81, 0x28, -- 0x3c, 0xe6, 0x5f, 0x34, 0x0c, 0xa2, 0xdd, 0x33, 0xb4, 0x79, 0x4d, 0x82, -- 0x80, 0xc3, 0x15, 0x4a, 0xa8, 0x83, 0x29, 0xb2, 0xa0, 0x35, 0x09, 0x9b, -- 0x50, 0x18, 0x1e, 0x25, 0x69, 0xcc, 0x27, 0x8a, 0xc3, 0x73, 0x78, 0x48, -- 0x3c, 0x12, 0x1e, 0x42, 0x5f, 0x44, 0x23, 0x0c, 0x42, 0x42, 0x3f, 0xcc, -- 0x3c, 0x7f, 0xc2, 0x5f, 0x8e, 0x96, 0xb5, 0xcb, 0x6f, 0x59, 0xe1, 0xea, -- 0xec, 0x4b, 0x2a, 0x98, 0x5c, 0x33, 0xdc, 0x2c, 0xbf, 0x99, 0x94, 0x40, -- 0xcf, 0x4a, 0x69, 0x28, 0xc3, 0xd6, 0x54, 0x01, 0x1e, 0xc1, 0xc9, 0xb1, -- 0xdd, 0xf9, 0x65, 0x26, 0xf1, 0x53, 0x03, 0x80, 0xe2, 0xe1, 0x09, 0x9b, -- 0xa5, 0x44, 0xbc, 0xb3, 0x02, 0x2c, 0xc2, 0x62, 0x8e, 0x60, 0x37, 0x0a, -- 0xe2, 0x51, 0x64, 0x47, 0xd6, 0x6c, 0x28, 0xe7, 0xe3, 0xbb, 0xd7, 0xfc, -- 0x5b, 0xb1, 0x5d, 0x5e, 0xaa, 0x17, 0x2b, 0x9d, 0xe6, 0xf5, 0xbd, 0x68, -- 0x7a, 0x62, 0x31, 0x10, 0x1b, 0xc1, 0x75, 0xda, 0x95, 0xaa, 0x40, 0x0b, -- 0xef, 0xf0, 0x3b, 0x30, 0x4b, 0xdd, 0xb6, 0xd8, 0x54, 0x0c, 0xda, 0x08, -- 0xc1, 0x3d, 0x00, 0xe2, 0xf1, 0x91, 0x4d, 0xd1, 0x39, 0xab, 0xc5, 0x3a, -- 0x14, 0x59, 0x19, 0xc6, 0xca, 0x50, 0x2a, 0x9f, 0x17, 0x5d, 0x54, 0xa5, -- 0x0c, 0x82, 0x14, 0x10, 0x81, 0x00, 0x68, 0x92, 0x60, 0xd4, 0xbb, 0xe4, -- 0x23, 0x83, 0x0d, 0xa0, 0x03, 0xd0, 0xf8, 0xf8, 0x5a, 0x71, 0xdd, 0xc4, -- 0xdb, 0xc9, 0xb4, 0x34, 0xca, 0xae, 0xd3, 0xdb, 0x9c, 0x01, 0x53, 0x42, -- 0xe4, 0x9f, 0xc8, 0x59, 0x52, 0x11, 0x01, 0x10, 0xbf, 0x55, 0x63, 0x3c, -- 0xbf, 0x88, 0x08, 0xda, 0x00, 0xf1, 0x47, 0x36, 0x03, 0x91, 0xa9, 0x83, -- 0x53, 0x84, 0x85, 0xb2, 0x47, 0x4a, 0x32, 0xd7, 0xa3, 0x58, 0x70, 0x04, -- 0xfd, 0x3a, 0xe4, 0x0e, 0x7d, 0x34, 0xad, 0x6e, 0xbb, 0x4f, 0x58, 0x75, -- 0xdb, 0x79, 0xc2, 0xe4, 0x88, 0x05, 0x39, 0xf9, 0x93, 0x30, 0xbb, 0xbd, -- 0x71, 0xcc, 0xce, 0xbf, 0x73, 0x41, 0x46, 0x1d, 0x37, 0xa7, 0x1c, 0x2e, -- 0x9b, 0x58, 0xd7, 0xe9, 0x52, 0xca, 0x76, 0xe7, 0xcb, 0x0e, 0xd8, 0x83, -- 0x27, 0x0c, 0x63, 0x92, 0x33, 0x46, 0xfd, 0xeb, 0xc1, 0x3a, 0xdd, 0x3f, -- 0xff, 0x2e, 0x38, 0x52, 0x81, 0xa2, 0xee, 0xf2, 0x01, 0xa3, 0x2b, 0xb9, -- 0x86, 0x8b, 0x4f, 0x8e, 0x24, 0xb7, 0xd5, 0x49, 0x6a, 0xd5, 0xed, 0xa7, -- 0x90, 0x1a, 0x0d, 0x24, 0x22, 0xb5, 0x68, 0x79, 0x1f, 0x22, 0xb5, 0x70, -- 0x8f, 0x22, 0x52, 0x43, 0xfb, 0x11, 0xa5, 0xd9, 0xc2, 0xfe, 0x6a, 0x52, -- 0x53, 0x12, 0x8d, 0x28, 0x0d, 0xde, 0x8b, 0xd3, 0x7e, 0x40, 0x62, 0x0d, -- 0xba, 0x99, 0x57, 0x03, 0xc0, 0x41, 0x5c, 0x32, 0x72, 0xcf, 0x4b, 0xf7, -- 0xeb, 0x17, 0x1d, 0x20, 0x23, 0x8e, 0x41, 0x23, 0x77, 0xb1, 0x58, 0xd6, -- 0x57, 0x20, 0x85, 0xe4, 0xf5, 0xbb, 0xf3, 0x00, 0xd6, 0x81, 0x66, 0x51, -- 0x02, 0x7e, 0x28, 0x6c, 0x6d, 0xf8, 0x98, 0x49, 0x96, 0xe5, 0x12, 0xc5, -- 0x55, 0x14, 0x39, 0x96, 0x3d, 0x4b, 0xc1, 0xc8, 0x34, 0x87, 0xd6, 0xd0, -- 0xa7, 0xa2, 0x30, 0xe5, 0x4b, 0x46, 0xc0, 0xa2, 0x81, 0x6c, 0x8a, 0x48, -- 0xcc, 0x61, 0x22, 0x53, 0x36, 0xa0, 0x69, 0x86, 0xa2, 0xcb, 0x95, 0x9a, -- 0x27, 0xbe, 0x4d, 0xb9, 0x68, 0x37, 0x3a, 0x9a, 0x73, 0x69, 0xbe, 0x9b, -- 0x8f, 0x18, 0x93, 0x1d, 0x44, 0x85, 0xf9, 0x38, 0x42, 0x24, 0x82, 0x10, -- 0x88, 0xc0, 0x92, 0x76, 0xcb, 0x8e, 0x48, 0x4f, 0x64, 0x82, 0x36, 0xe0, -- 0x05, 0x94, 0xd0, 0x5d, 0xa4, 0x35, 0xc0, 0x78, 0x07, 0x29, 0x77, 0xe4, -- 0x52, 0xdd, 0xab, 0x2e, 0xf3, 0x13, 0xc8, 0x09, 0x41, 0xe7, 0x6c, 0xeb, -- 0x7a, 0x10, 0xf2, 0x02, 0x3b, 0xbf, 0xb8, 0x7d, 0x3a, 0xe0, 0xa9, 0xd2, -- 0x5e, 0x2d, 0x06, 0x3a, 0xe7, 0x07, 0xb7, 0x7e, 0x94, 0x4b, 0xda, 0x6a, -- 0xf8, 0xbc, 0x5c, 0xba, 0xa4, 0x2f, 0xf1, 0x4a, 0x23, 0xf1, 0x9a, 0x29, -- 0xc2, 0x01, 0xbf, 0xb4, 0x29, 0x36, 0xb0, 0x59, 0x84, 0xcf, 0xd9, 0x05, -- 0x46, 0xf2, 0x8b, 0x5a, 0xce, 0xf9, 0x64, 0x49, 0x17, 0xaa, 0xe7, 0xa4, -- 0xe5, 0xd5, 0x32, 0x72, 0x94, 0xc1, 0x00, 0xe4, 0x6d, 0x95, 0x16, 0x4e, -- 0x1d, 0x26, 0x80, 0xff, 0xbf, 0x7b, 0x13, 0x3f, 0x65, 0x17, 0x9f, 0xff, -- 0xe3, 0x77, 0xf1, 0xf9, 0x7f, 0x93, 0x5d, 0x7c, 0xfe, 0xff, 0x91, 0x5d, -- 0xb4, 0x5c, 0xf4, 0x60, 0x4f, 0xfa, 0xab, 0xb7, 0x93, 0xd5, 0x61, 0x0d, -- 0xdf, 0x46, 0x70, 0x07, 0x87, 0x39, 0xf3, 0x3e, 0x58, 0x2b, 0xa2, 0x72, -- 0x6b, 0x16, 0x5f, 0x03, 0x4e, 0x4f, 0xb2, 0x77, 0xba, 0x93, 0x6b, 0x34, -- 0xfd, 0xc1, 0x22, 0x2f, 0x8f, 0x4e, 0x03, 0x54, 0x01, 0xbf, 0x3b, 0x06, -- 0x2e, 0xa5, 0x2a, 0x72, 0xa7, 0xf7, 0xba, 0x62, 0x97, 0x26, 0xf1, 0x71, -- 0x09, 0xc3, 0xae, 0x20, 0x81, 0xc2, 0xed, 0x29, 0xdb, 0x05, 0xb9, 0x60, -- 0x64, 0x11, 0xc2, 0xb4, 0x41, 0x7b, 0x2f, 0x79, 0xb9, 0x07, 0xf2, 0xf8, -- 0x17, 0x9d, 0x59, 0x28, 0x80, 0x8f, 0xf2, 0x43, 0xea, 0x26, 0x07, 0xa5, -- 0x86, 0x26, 0x74, 0x50, 0x17, 0x3e, 0x8c, 0xb7, 0x3b, 0x3f, 0x42, 0x0e, -- 0xbf, 0x89, 0x1e, 0xfe, 0x4b, 0xe4, 0x90, 0xf1, 0x65, 0x0d, 0x3c, 0x28, -- 0x76, 0x89, 0xbe, 0x3f, 0x3b, 0x7e, 0x34, 0xba, 0xa5, 0x77, 0x26, 0xe8, -- 0x51, 0x65, 0x72, 0x9a, 0x5e, 0x65, 0xbd, 0x10, 0x49, 0xec, 0x13, 0x30, -- 0x06, 0xa2, 0x2c, 0x7d, 0x56, 0x46, 0x7d, 0x34, 0x58, 0x98, 0x94, 0x0f, -- 0x53, 0x84, 0x4f, 0xc9, 0x17, 0xd7, 0x5f, 0x17, 0x30, 0x91, 0x88, 0xaa, -- 0xcd, 0x6c, 0x4a, 0x4b, 0xdb, 0x56, 0xc7, 0x48, 0xef, 0x2f, 0x1c, 0x77, -- 0xde, 0xb3, 0x01, 0xba, 0x29, 0xc7, 0xd1, 0xbb, 0x00, 0xdb, 0x70, 0xf6, -- 0xd4, 0x66, 0xb4, 0xba, 0xa5, 0xd5, 0xb8, 0x4c, 0x02, 0x00, 0x1c, 0x5f, -- 0x0b, 0xfc, 0xe0, 0x65, 0x31, 0x6d, 0x93, 0x26, 0x00, 0xcc, 0xd2, 0xe4, -- 0x58, 0x07, 0xb5, 0xa7, 0xce, 0x59, 0xd9, 0x48, 0x1b, 0x92, 0x4a, 0x0d, -- 0x2a, 0x22, 0x5a, 0x54, 0xea, 0x94, 0x91, 0xc5, 0xdb, 0x41, 0x24, 0x4c, -- 0xbf, 0x2e, 0x07, 0x9c, 0xed, 0x40, 0x3c, 0x20, 0x88, 0x19, 0x39, 0xc0, -- 0xa6, 0xdd, 0xb4, 0x7e, 0x47, 0x6f, 0xe5, 0x21, 0xbc, 0xbb, 0x1c, 0x9a, -- 0xf6, 0x32, 0x08, 0xe7, 0xfa, 0x69, 0xcf, 0xcc, 0x07, 0xbf, 0x74, 0x47, -- 0xb6, 0x47, 0x38, 0x5d, 0x16, 0x45, 0xe3, 0xfd, 0x8f, 0x9a, 0x6a, 0x1e, -- 0xb4, 0xda, 0x65, 0xed, 0xc4, 0x72, 0x1b, 0xde, 0x6f, 0x6a, 0x89, 0x56, -- 0x44, 0x00, 0x5a, 0xbb, 0x80, 0x63, 0xda, 0x12, 0x78, 0x6d, 0xc4, 0x2f, -- 0x40, 0xbd, 0x0f, 0x04, 0xe4, 0x19, 0x7a, 0x6a, 0x64, 0xbf, 0xd1, 0xa0, -- 0x14, 0x36, 0xbf, 0x06, 0x1d, 0x9b, 0x0c, 0x47, 0x47, 0xe6, 0xf4, 0xdb, -- 0x83, 0xf3, 0x3f, 0xee, 0xec, 0x5a, 0x34, 0x5c, 0x6e, 0x10, 0x6b, 0xe7, -- 0x40, 0x54, 0x68, 0x93, 0x37, 0xab, 0x27, 0x52, 0x4d, 0x80, 0x41, 0x58, -- 0x7d, 0x10, 0x9d, 0x7b, 0x4d, 0x6c, 0xb3, 0x32, 0x36, 0x4d, 0x80, 0xf2, -- 0xf1, 0xca, 0x59, 0xa7, 0x0e, 0xcf, 0xc1, 0xa8, 0x66, 0x46, 0x12, 0xcc, -- 0x0d, 0xb7, 0x68, 0x0d, 0xa8, 0x12, 0xba, 0x15, 0x4b, 0x04, 0x26, 0x50, -- 0xd7, 0x12, 0xf3, 0x13, 0x25, 0x9d, 0x29, 0x3a, 0x6a, 0xc3, 0xc2, 0xef, -- 0xc9, 0x42, 0xd1, 0xa9, 0x45, 0x42, 0xee, 0x05, 0xeb, 0xd1, 0xeb, 0x34, -- 0x3c, 0xcb, 0xdd, 0xa7, 0x37, 0x12, 0xfb, 0x8b, 0x25, 0x01, 0x2b, 0xb9, -- 0xc9, 0xee, 0xd5, 0x8f, 0x9e, 0xb9, 0x0f, 0xc3, 0xc5, 0x65, 0xa8, 0x46, -- 0x0e, 0x7f, 0x8c, 0x4c, 0xe6, 0xc4, 0xe6, 0xff, 0x20, 0xde, 0x6e, 0xa1, -- 0x30, 0x51, 0x85, 0xb8, 0x39, 0x56, 0x04, 0x3c, 0xca, 0xc9, 0x8c, 0xa1, -- 0x22, 0xac, 0x7e, 0xc0, 0xf4, 0xbe, 0x8b, 0xda, 0x0d, 0x5a, 0x47, 0x18, -- 0x30, 0x34, 0xab, 0xaa, 0xb6, 0x60, 0xfe, 0x06, 0x50, 0x97, 0x7a, 0x9f, -- 0xea, 0x87, 0x72, 0x57, 0xf9, 0x7b, 0x2f, 0xd3, 0xb0, 0xb5, 0x2d, 0x1f, -- 0xdf, 0x40, 0xa4, 0xd7, 0x8b, 0x2e, 0x9c, 0x9e, 0xc5, 0x7a, 0x48, 0x15, -- 0x81, 0x78, 0x17, 0x78, 0x00, 0x6c, 0x80, 0x67, 0xaa, 0xe4, 0xcb, 0x30, -- 0x9f, 0x4b, 0x2e, 0x0d, 0xdc, 0xa3, 0xf3, 0xdb, 0xbc, 0x2c, 0xe6, 0x10, -- 0x51, 0x6e, 0xd3, 0x32, 0x87, 0x72, 0x48, 0xa3, 0xfd, 0xf0, 0xfa, 0xe8, -- 0x2c, 0xd9, 0xe0, 0x2c, 0xce, 0xd1, 0xfd, 0x8a, 0x5c, 0xd5, 0x64, 0x2b, -- 0xab, 0xc7, 0x5b, 0x8b, 0x9b, 0x7c, 0x6b, 0x5e, 0x55, 0x93, 0xd1, 0xe6, -- 0xd0, 0x11, 0x95, 0x74, 0xc9, 0xc4, 0x28, 0xb4, 0xbc, 0xc3, 0x8a, 0xdb, -- 0x92, 0x1a, 0xde, 0xa0, 0x35, 0x88, 0x76, 0xa1, 0xa2, 0x85, 0x9e, 0x0d, -- 0xab, 0x62, 0x13, 0xda, 0xe6, 0x6d, 0x9a, 0x4f, 0xcd, 0x40, 0x36, 0x17, -- 0x82, 0x46, 0x68, 0x91, 0xc2, 0xc7, 0x8a, 0xbb, 0x02, 0x61, 0x7a, 0xea, -- 0xf8, 0x8f, 0x62, 0x3a, 0xe6, 0xb5, 0x87, 0x8a, 0x94, 0x6c, 0x72, 0x8b, -- 0x55, 0xa1, 0xd5, 0x04, 0xaa, 0xa2, 0x8b, 0x31, 0xee, 0x33, 0xa6, 0x3a, -- 0xaf, 0x8a, 0xf8, 0xce, 0xb2, 0x38, 0x93, 0x56, 0x52, 0x8e, 0x87, 0x5b, -- 0x3d, 0x87, 0x21, 0x9f, 0xcf, 0x05, 0x4b, 0x1f, 0x6a, 0xe9, 0x6d, 0x91, -- 0xc3, 0x21, 0x7f, 0xb9, 0xac, 0x9c, 0x71, 0x14, 0xee, 0x5e, 0xdd, 0xae, -- 0x61, 0xa7, 0x29, 0x32, 0xd8, 0x4e, 0x75, 0x64, 0x56, 0x49, 0x6f, 0xaf, -- 0x87, 0xb3, 0x35, 0x07, 0x8c, 0xb5, 0x48, 0x38, 0x3a, 0x2a, 0x6c, 0x56, -- 0xef, 0xe7, 0x5e, 0x12, 0xd9, 0x47, 0x6b, 0xef, 0x1a, 0x30, 0xe8, 0x8e, -- 0xab, 0x79, 0xfe, 0x77, 0x41, 0x55, 0x70, 0x47, 0x78, 0x92, 0x21, 0xf6, -- 0x1e, 0xe9, 0xd8, 0x6e, 0x87, 0x78, 0x04, 0x9d, 0x88, 0x0b, 0xc1, 0x90, -- 0x7e, 0x8e, 0x87, 0x94, 0x21, 0x31, 0x14, 0xed, 0xf7, 0x7e, 0xc6, 0x90, -- 0x82, 0x41, 0x74, 0x98, 0x2b, 0x9a, 0x43, 0xe2, 0x6c, 0x05, 0xcd, 0x2c, -- 0xbd, 0x26, 0x29, 0x6b, 0x5c, 0x77, 0xdc, 0x1c, 0x1b, 0xf9, 0xc9, 0x39, -- 0x0e, 0xe2, 0xdb, 0x74, 0x9c, 0xd0, 0xaf, 0x3f, 0x40, 0xba, 0xd8, 0x5c, -- 0x7d, 0xc6, 0x94, 0x31, 0x2a, 0x2f, 0xec, 0x82, 0xfe, 0xeb, 0xfb, 0x33, -- 0xd7, 0x62, 0xbb, 0xc1, 0x5d, 0x98, 0xe5, 0x60, 0x91, 0xa3, 0xcc, 0xbb, -- 0x79, 0x38, 0x66, 0x32, 0x0a, 0x48, 0x71, 0x2f, 0x6f, 0x19, 0xab, 0x61, -- 0x7e, 0x61, 0xf5, 0x16, 0x20, 0x7f, 0x32, 0x2b, 0x86, 0xb9, 0x9b, 0xbe, -- 0xa1, 0x89, 0x32, 0xea, 0x08, 0x12, 0xa2, 0xe3, 0xa3, 0xb9, 0x48, 0x61, -- 0x4c, 0x95, 0x5c, 0x59, 0x65, 0xfc, 0xce, 0x8f, 0x14, 0x0e, 0x54, 0xc2, -- 0x67, 0x5d, 0x7f, 0x66, 0x38, 0xf9, 0x6f, 0x47, 0xfc, 0x69, 0x40, 0xfa, -- 0xbf, 0x5f, 0x00, 0x93, 0xe6, 0xf1, 0xbe, 0xec, 0x4a, 0x12, 0x3f, 0xcf, -- 0xa6, 0x00, 0x0c, 0xc7, 0x5e, 0x5b, 0x56, 0xd6, 0xb8, 0xbc, 0x5f, 0xb0, -- 0x1d, 0x4c, 0xf3, 0x7f, 0x65, 0x85, 0xf8, 0xda, 0x92, 0xdc, 0xab, 0x00, -- 0x8a, 0x7e, 0xd8, 0x91, 0x5b, 0xe8, 0x3a, 0x14, 0x75, 0x84, 0xb7, 0x8b, -- 0xf6, 0x82, 0x3d, 0x2a, 0x69, 0xa8, 0xa2, 0x30, 0x59, 0x4e, 0x24, 0x49, -- 0xc3, 0x57, 0x1f, 0x89, 0xe2, 0x72, 0xb9, 0xa1, 0x6a, 0xd8, 0x84, 0xe2, -- 0x81, 0xc1, 0x14, 0xe5, 0x70, 0xc0, 0x72, 0xd9, 0xf5, 0xb6, 0x69, 0x9c, -- 0x5e, 0xdf, 0x50, 0x14, 0x90, 0xb6, 0xf2, 0xe0, 0xd8, 0x25, 0x35, 0x53, -- 0x2e, 0xe7, 0xe8, 0xbd, 0xb9, 0x52, 0x8e, 0xbf, 0xb7, 0xcf, 0xd9, 0xd9, -- 0xd1, 0xf9, 0x01, 0x1f, 0xb0, 0x93, 0x77, 0xc7, 0x3f, 0xb2, 0xbc, 0x0d, -- 0x08, 0x00, 0x94, 0xfb, 0xe0, 0xae, 0xbb, 0x2e, 0x86, 0xca, 0xd0, 0xd9, -- 0x3b, 0x28, 0x59, 0xf1, 0xda, 0x58, 0xd6, 0xbd, 0xb3, 0x2d, 0xf6, 0x69, -- 0x54, 0x4c, 0x2e, 0x70, 0xa2, 0x11, 0xc1, 0xe5, 0xac, 0xee, 0x70, 0xc4, -- 0xd7, 0xd8, 0x30, 0xb0, 0x96, 0x31, 0x62, 0x13, 0x07, 0x80, 0x84, 0x82, -- 0xbe, 0x68, 0x49, 0x6c, 0x35, 0xa4, 0xee, 0x69, 0xa2, 0xad, 0x44, 0x50, -- 0x9a, 0xe8, 0x95, 0x38, 0x73, 0x57, 0xe4, 0x1f, 0x04, 0xd9, 0x8e, 0xf7, -- 0x6a, 0x8a, 0xe4, 0xe0, 0x33, 0x0b, 0x8e, 0x15, 0x6a, 0x39, 0x64, 0x00, -- 0xc5, 0x05, 0xdd, 0x33, 0x5f, 0xa7, 0xcc, 0x0b, 0xc4, 0xfe, 0x97, 0x66, -- 0xb3, 0xe8, 0x82, 0xae, 0x0a, 0xf6, 0x3d, 0x9a, 0x1c, 0x27, 0x7f, 0x05, -- 0x5e, 0x25, 0x58, 0x11, 0x25, 0x90, 0x8f, 0x17, 0x74, 0x42, 0x27, 0x50, -- 0x09, 0x88, 0x49, 0x8e, 0x86, 0x12, 0xc7, 0xda, 0x58, 0x19, 0x8a, 0x76, -- 0xee, 0xcf, 0x40, 0xde, 0x97, 0xa9, 0xb5, 0x53, 0x7f, 0x44, 0x6a, 0x41, -- 0x98, 0x7b, 0xf2, 0x92, 0x7f, 0x76, 0x4f, 0x3b, 0xc0, 0xa8, 0x80, 0x2f, -- 0xb9, 0x21, 0x3b, 0xf0, 0xbb, 0x1a, 0x7e, 0xca, 0x49, 0x19, 0x93, 0x06, -- 0x8b, 0x8b, 0xad, 0xc1, 0x1c, 0xf4, 0x4b, 0x97, 0x72, 0x3f, 0x79, 0x7d, -- 0x78, 0x06, 0xa6, 0x74, 0xf8, 0xee, 0x6b, 0xf8, 0x70, 0x02, 0x46, 0xcf, -- 0x6d, 0x56, 0x72, 0xd7, 0x08, 0x96, 0xbe, 0xc9, 0x8e, 0xad, 0xe6, 0xf8, -- 0x72, 0xe7, 0x2b, 0x1f, 0x32, 0xe0, 0xe4, 0x77, 0xcd, 0x68, 0x4a, 0x45, -- 0x81, 0x38, 0xd8, 0x0f, 0x67, 0xf7, 0xe8, 0x6a, 0x75, 0x6b, 0x0d, 0x2d, -- 0x75, 0x81, 0x9f, 0xa2, 0x11, 0x11, 0x5d, 0x75, 0xb9, 0x56, 0x39, 0x0d, -- 0xa5, 0x89, 0xbb, 0xc0, 0xe7, 0x58, 0xaf, 0x58, 0x0f, 0xb2, 0xd8, 0x1c, -- 0x98, 0x18, 0x93, 0x56, 0xdf, 0x3c, 0x1b, 0xd5, 0x66, 0x43, 0x61, 0x70, -- 0x52, 0x3f, 0xcb, 0xd9, 0xea, 0x97, 0x68, 0xde, 0x95, 0xb1, 0x6d, 0x5d, -- 0xae, 0x08, 0x93, 0xe5, 0x0c, 0x75, 0x07, 0x2b, 0xde, 0x97, 0x5b, 0xbd, -- 0xb1, 0xf4, 0xb4, 0xa7, 0xaa, 0x93, 0x2a, 0x85, 0x47, 0x9e, 0x73, 0x3e, -- 0x9f, 0x12, 0xeb, 0x11, 0xb4, 0x19, 0x6d, 0xaa, 0x43, 0x58, 0x00, 0xad, -- 0x54, 0xab, 0x65, 0x50, 0x89, 0x02, 0x4f, 0xd6, 0x0f, 0x48, 0xe5, 0xfd, -- 0x70, 0xb0, 0xff, 0xe1, 0xab, 0xf7, 0xef, 0x5e, 0x1f, 0x1f, 0xae, 0xb7, -- 0x29, 0xf2, 0xd2, 0x23, 0x4f, 0x56, 0x88, 0x06, 0x50, 0xd8, 0x86, 0x30, -- 0x47, 0x1b, 0x47, 0x1d, 0x30, 0x53, 0xf8, 0x0d, 0x80, 0x3a, 0xba, 0xe0, -- 0x6d, 0xb3, 0xc8, 0x72, 0x3e, 0x01, 0xd4, 0x4f, 0x30, 0x79, 0xc3, 0x51, -- 0x51, 0x73, 0x8b, 0x0d, 0xb0, 0xc3, 0x42, 0xc3, 0xf4, 0x47, 0x87, 0x95, -- 0x54, 0xf0, 0x00, 0x32, 0x3e, 0x28, 0x3f, 0xd3, 0x50, 0xed, 0x91, 0x31, -- 0x60, 0x85, 0xd0, 0x12, 0x1a, 0x4f, 0xc7, 0x76, 0x57, 0x3e, 0xf9, 0x6c, -- 0x92, 0xac, 0x73, 0x4b, 0x44, 0xc9, 0x03, 0x1d, 0xe4, 0xb8, 0xac, 0xd7, -- 0xfb, 0x26, 0xb5, 0xe4, 0x41, 0xc6, 0x05, 0x2e, 0xf8, 0x08, 0xfe, 0x83, -- 0x33, 0xea, 0x52, 0xa1, 0xeb, 0x61, 0xf6, 0x31, 0x83, 0xba, 0xa8, 0x6f, -- 0x1d, 0xa8, 0x64, 0xf0, 0x7d, 0x51, 0xc2, 0x3e, 0xfa, 0xda, 0x4b, 0x08, -- 0xf2, 0x10, 0x69, 0x90, 0x71, 0xec, 0x22, 0x4b, 0x01, 0x29, 0xca, 0x2a, -- 0xa0, 0x02, 0xdc, 0xe9, 0xfe, 0xc5, 0x37, 0x9d, 0x9e, 0x77, 0x5f, 0x6b, -- 0x50, 0x49, 0xd1, 0xc9, 0x6d, 0x4e, 0x53, 0x08, 0xd5, 0xa3, 0xbe, 0xd3, -- 0x99, 0x88, 0xac, 0xdb, 0x0c, 0x23, 0xd6, 0x26, 0x02, 0xed, 0xc1, 0x89, -- 0xa9, 0x92, 0x0d, 0xe1, 0x6e, 0x46, 0x59, 0xe3, 0xd5, 0xb9, 0xb9, 0x56, -- 0xf4, 0x8f, 0x38, 0xe0, 0x82, 0x01, 0xb8, 0x7f, 0x5f, 0x46, 0x04, 0x12, -- 0x6c, 0x31, 0x22, 0x2f, 0x93, 0x7d, 0x82, 0x2d, 0xe3, 0x51, 0xa6, 0xe4, -- 0x33, 0x28, 0xa3, 0x53, 0x2a, 0x7c, 0x4a, 0xf8, 0x3d, 0x18, 0x93, 0xcb, -- 0xdf, 0xe0, 0x61, 0xb9, 0xf2, 0x13, 0xc1, 0x65, 0x30, 0xba, 0x4f, 0x82, -- 0xc4, 0x9a, 0x98, 0xc3, 0xcd, 0x54, 0x48, 0xdc, 0xeb, 0x25, 0x1b, 0xd9, -- 0xf0, 0x8a, 0x58, 0x5d, 0x8f, 0x9b, 0xda, 0xd9, 0xe3, 0x9f, 0xbb, 0xf8, -- 0xf9, 0xa4, 0xa7, 0x7e, 0xab, 0x46, 0x36, 0x1e, 0xf3, 0xaf, 0x38, 0x0d, -- 0xaf, 0xc1, 0xcd, 0xc4, 0xbf, 0x9f, 0x5f, 0x3e, 0x40, 0x42, 0x2a, 0xdf, -- 0x75, 0x62, 0xca, 0xf8, 0x75, 0x10, 0x66, 0xc9, 0xd2, 0x03, 0x23, 0x81, -- 0x72, 0xf5, 0x0e, 0x9a, 0xe0, 0x58, 0x92, 0xb8, 0x83, 0xac, 0xb1, 0x0f, -- 0x65, 0x76, 0x9d, 0x56, 0xd7, 0xc9, 0xb2, 0xce, 0x39, 0x0c, 0xa0, 0x03, -- 0xe9, 0x7a, 0xea, 0xc2, 0xd6, 0xb5, 0x63, 0xc3, 0x89, 0x73, 0x3b, 0x2b, -- 0x96, 0x46, 0xa4, 0x4d, 0xeb, 0x23, 0x03, 0x2d, 0x80, 0xd8, 0xc5, 0x08, -- 0x41, 0xad, 0x12, 0x8b, 0xc7, 0x4f, 0x86, 0xe5, 0xa8, 0x66, 0x6c, 0x4d, -- 0x45, 0x6c, 0x42, 0x76, 0x49, 0x6b, 0x96, 0x07, 0x50, 0x03, 0x18, 0x72, -- 0x9c, 0x19, 0x21, 0x77, 0x9c, 0x46, 0x59, 0xb9, 0xbf, 0xc1, 0x41, 0x9c, -- 0x4a, 0x87, 0x7a, 0x55, 0xed, 0xcb, 0xe6, 0x71, 0x7a, 0x07, 0x6b, 0x15, -- 0x80, 0x0f, 0xe1, 0xed, 0x3a, 0x5b, 0x49, 0x2d, 0x33, 0x62, 0x57, 0x10, -- 0xda, 0x2e, 0x68, 0x50, 0x87, 0x0a, 0xfc, 0x5b, 0x4f, 0xce, 0x25, 0x7c, -- 0xbc, 0x74, 0xa4, 0x57, 0x44, 0x57, 0xbd, 0x01, 0x62, 0x6c, 0xc5, 0xf1, -- 0x8f, 0xbc, 0x4e, 0x1b, 0x5c, 0x8e, 0x43, 0x4a, 0x0b, 0xa5, 0x88, 0x5e, -- 0xdb, 0x64, 0x03, 0x95, 0x46, 0x6f, 0x21, 0x61, 0xbe, 0xea, 0x44, 0xe5, -- 0x67, 0xb4, 0x3f, 0x29, 0x0e, 0x82, 0x44, 0x23, 0xe8, 0xbc, 0x08, 0x03, -- 0x51, 0xb7, 0x39, 0x0a, 0x44, 0x12, 0x5f, 0xce, 0xea, 0x71, 0xf0, 0xe5, -- 0x24, 0x4b, 0xa7, 0x49, 0x57, 0x00, 0xfa, 0xa5, 0x14, 0x96, 0xb4, 0x38, -- 0x00, 0x08, 0x45, 0x73, 0x0b, 0x1e, 0xd0, 0x08, 0x62, 0xc9, 0xa6, 0x9c, -- 0x37, 0xc0, 0x22, 0x2f, 0x81, 0x76, 0x11, 0x1d, 0x5f, 0x56, 0xe4, 0x25, -- 0x9d, 0xc5, 0x90, 0x07, 0xa0, 0x9f, 0xbb, 0xcc, 0x01, 0x44, 0x46, 0x22, -- 0xe5, 0xd2, 0x3d, 0x80, 0xb4, 0x08, 0xc9, 0x89, 0x8b, 0xac, 0x07, 0x06, -- 0xdd, 0x8c, 0x4a, 0x74, 0x8a, 0x68, 0x68, 0x81, 0xfc, 0x3c, 0xae, 0x7b, -- 0x57, 0x24, 0x74, 0x53, 0xaf, 0x44, 0x58, 0xc8, 0xb1, 0x43, 0xa4, 0x10, -- 0x0e, 0x22, 0xe6, 0x62, 0x09, 0x64, 0x52, 0x3c, 0x16, 0xcb, 0x5f, 0xcb, -- 0xe9, 0x4a, 0x6b, 0xad, 0x34, 0xc5, 0x03, 0x55, 0xe0, 0xa1, 0xdd, 0xdd, -- 0x6e, 0x2f, 0x87, 0xc2, 0x8b, 0xa9, 0x4d, 0x83, 0x97, 0x62, 0x50, 0xa5, -- 0x97, 0x99, 0x59, 0xf8, 0xb8, 0x6e, 0x11, 0x03, 0xcb, 0x8e, 0x69, 0xf9, -- 0x24, 0xf0, 0x1f, 0x9f, 0xb1, 0xd2, 0x34, 0x88, 0xeb, 0x69, 0xf0, 0x29, -- 0x67, 0x5d, 0xc2, 0xe7, 0xe8, 0x24, 0xac, 0x5c, 0x5b, 0xfc, 0x75, 0x52, -- 0x4d, 0xf3, 0x85, 0x39, 0xf5, 0xe9, 0x36, 0x05, 0x47, 0xc5, 0xfd, 0xdc, -- 0x11, 0x1c, 0xd2, 0x82, 0x41, 0x83, 0x34, 0x7c, 0xcb, 0xde, 0x95, 0x49, -- 0xb2, 0xe1, 0x9a, 0x97, 0xd6, 0x9f, 0x6e, 0xef, 0x60, 0xbc, 0x4f, 0xb7, -- 0x3f, 0x0b, 0x93, 0xa4, 0x5d, 0x36, 0xa9, 0x02, 0x8a, 0x6a, 0xe0, 0xe9, -- 0x43, 0x69, 0x10, 0x53, 0xd6, 0xcb, 0xb0, 0xaa, 0x19, 0x49, 0x8b, 0x30, -- 0x05, 0x68, 0x8a, 0xed, 0x20, 0x9f, 0x4b, 0x42, 0x27, 0xfd, 0xab, 0x3b, -- 0x99, 0x4a, 0x98, 0x5d, 0x1b, 0xd3, 0x23, 0x15, 0xd8, 0x32, 0x01, 0xad, -- 0x90, 0x78, 0x77, 0xc9, 0xbe, 0x6d, 0xa6, 0xdf, 0x2a, 0x64, 0x9e, 0xdd, -- 0x32, 0xc8, 0x20, 0x66, 0xbb, 0x61, 0x24, 0x39, 0x1a, 0xc7, 0x04, 0xea, -- 0x11, 0x27, 0xda, 0x5e, 0xb0, 0x16, 0xa1, 0xd2, 0x6c, 0x5a, 0xd6, 0x5b, -- 0xc8, 0xa9, 0x95, 0x88, 0xe2, 0x74, 0xcc, 0x68, 0x5a, 0xae, 0x0c, 0xe0, -- 0xd9, 0x9b, 0x83, 0x56, 0x73, 0xbb, 0x4f, 0x3e, 0xff, 0xdc, 0xe5, 0xf5, -- 0x67, 0x1a, 0x24, 0xe9, 0xa1, 0x5b, 0x49, 0x84, 0xd2, 0x7c, 0x23, 0xb1, -- 0x03, 0x72, 0x01, 0x37, 0xce, 0xc4, 0x90, 0xb8, 0xa1, 0x98, 0xeb, 0xaf, -- 0xeb, 0x9a, 0xae, 0x4b, 0xc8, 0xb0, 0x58, 0xad, 0xac, 0xb6, 0x98, 0xd6, -- 0x09, 0x0a, 0xe0, 0x2c, 0x45, 0x03, 0x54, 0xbb, 0x1d, 0x1d, 0x82, 0x2f, -- 0xa3, 0x28, 0xb4, 0xab, 0xb9, 0xa4, 0xf0, 0xfe, 0x95, 0xef, 0x90, 0xab, -- 0xac, 0x8e, 0xe3, 0xdc, 0x15, 0xf2, 0x2d, 0xea, 0x62, 0x35, 0xd4, 0x94, -- 0xd5, 0x4a, 0x90, 0x28, 0xfd, 0x97, 0x72, 0x3d, 0x1a, 0xa4, 0x4c, 0x50, -- 0x64, 0xea, 0x4b, 0x10, 0xd1, 0x4b, 0x67, 0xf3, 0x9e, 0x77, 0x1a, 0xc4, -- 0xbf, 0x34, 0xf8, 0x32, 0x35, 0xf9, 0x00, 0x57, 0xab, 0xae, 0x53, 0xab, -- 0x0f, 0x8a, 0xeb, 0x9e, 0x53, 0x56, 0x1d, 0xd4, 0xaa, 0x21, 0xa0, 0x47, -- 0xae, 0x8e, 0x5c, 0x23, 0x13, 0x5f, 0xba, 0x16, 0x81, 0x91, 0x28, 0x29, -- 0xc3, 0x3c, 0x16, 0xac, 0x02, 0x7a, 0x70, 0xb0, 0x20, 0x35, 0x62, 0x4f, -- 0xc3, 0xea, 0x59, 0x8d, 0x98, 0x69, 0xff, 0x7e, 0xb0, 0x4e, 0xd1, 0xc9, -- 0x3f, 0x74, 0x75, 0xc2, 0x2c, 0x04, 0x07, 0x52, 0xa5, 0x8f, 0x66, 0x55, -- 0x4d, 0xcb, 0x07, 0xe1, 0xf6, 0xf5, 0xe0, 0xaf, 0xf3, 0x33, 0xed, 0x93, -- 0xcf, 0xef, 0xac, 0x5b, 0x5e, 0x76, 0x68, 0x37, 0x07, 0x65, 0xca, 0x70, -- 0x1c, 0x7a, 0xa0, 0xd8, 0xb1, 0xb9, 0x27, 0x97, 0x71, 0xdc, 0xa1, 0xca, -- 0x01, 0xe1, 0x69, 0xaf, 0x53, 0x9f, 0x19, 0xbc, 0x71, 0x03, 0x7d, 0xf5, -- 0x65, 0xa3, 0xb5, 0xbb, 0xbb, 0xe1, 0xec, 0xde, 0xbe, 0xab, 0x1a, 0xe5, -- 0x7a, 0x7d, 0x52, 0x91, 0xc2, 0xa9, 0x0a, 0x45, 0xf9, 0xec, 0xda, 0xd0, -- 0xb7, 0xed, 0x8b, 0xe3, 0xd1, 0xd5, 0x6e, 0x38, 0x23, 0xab, 0x40, 0x73, -- 0xf5, 0x38, 0x5f, 0x71, 0x38, 0x11, 0xcb, 0xbe, 0xa3, 0x82, 0xe8, 0xcd, -- 0x48, 0x89, 0x13, 0x13, 0xeb, 0x72, 0x39, 0xae, 0xe3, 0x7b, 0xdf, 0xca, -- 0x5e, 0xe0, 0x22, 0x10, 0xff, 0x83, 0x15, 0x4c, 0x05, 0x9d, 0x35, 0x4f, -- 0xbb, 0x85, 0xb4, 0x41, 0x44, 0xec, 0x12, 0x49, 0xd6, 0x81, 0xd3, 0xb9, -- 0xde, 0x97, 0x70, 0x4a, 0xcd, 0x97, 0xf3, 0x99, 0x5c, 0x2b, 0x97, 0xb2, -- 0x77, 0x97, 0x8d, 0x5e, 0x7d, 0xc9, 0x0e, 0x97, 0x8f, 0xc0, 0x17, 0x12, -- 0xbc, 0x4f, 0xa6, 0xa3, 0x2d, 0xfe, 0xb3, 0x97, 0xb0, 0x0a, 0xd3, 0xb1, -- 0x92, 0x44, 0x7f, 0xab, 0x5a, 0x0c, 0x52, 0xb0, 0x83, 0xd6, 0x2e, 0x8b, -- 0x62, 0x65, 0x63, 0xbe, 0x3e, 0x2e, 0x56, 0x23, 0x08, 0xa0, 0x93, 0x78, -- 0x36, 0x4f, 0x58, 0x42, 0x4c, 0x6e, 0x8f, 0xf4, 0x68, 0x75, 0x25, 0x67, -- 0x8d, 0xee, 0x1d, 0x38, 0xb8, 0x25, 0x6a, 0xbc, 0xd2, 0xfa, 0x6d, 0x2c, -- 0x6f, 0xad, 0x5e, 0x10, 0x7e, 0xfa, 0xd5, 0x97, 0xc0, 0x47, 0xe1, 0x5f, -- 0xff, 0xe2, 0xde, 0xe6, 0x1f, 0x44, 0x97, 0x74, 0xb6, 0x57, 0x4e, 0x84, -- 0x84, 0x39, 0x7b, 0x7c, 0x4b, 0x24, 0x54, 0x93, 0x05, 0xd7, 0xfb, 0xeb, -- 0xac, 0xdf, 0xad, 0xff, 0x65, 0x1d, 0x52, 0x84, 0x19, 0x14, 0x80, 0x71, -- 0x2f, 0xe5, 0xba, 0x27, 0x45, 0x14, 0xcb, 0xc2, 0xa1, 0x7f, 0x78, 0x42, -- 0x2a, 0x9a, 0x3f, 0x36, 0xe6, 0x9f, 0x7b, 0x6e, 0xd4, 0x3f, 0xf7, 0xfc, -- 0xb8, 0x7f, 0xee, 0xf9, 0x91, 0xff, 0xdc, 0xfb, 0x0d, 0x3b, 0xba, 0x2e, -- 0xcd, 0xfb, 0xd6, 0x83, 0xc6, 0x83, 0xb6, 0x7b, 0xeb, 0xab, 0x9a, 0x0e, -- 0xad, 0xaf, 0xc8, 0x52, 0x48, 0x5a, 0xcb, 0x44, 0x07, 0xc8, 0xaf, 0x84, -- 0x96, 0x0d, 0x94, 0x89, 0xf7, 0x3b, 0xf4, 0xe1, 0xf0, 0x01, 0x5e, 0x54, -- 0x8e, 0x96, 0xa8, 0xa6, 0xac, 0x4c, 0x78, 0xaf, 0x9c, 0xeb, 0xc0, 0x2d, -- 0xb5, 0x39, 0x53, 0x22, 0x17, 0x9b, 0x7b, 0x3d, 0x3a, 0xa3, 0x6c, 0x1d, -- 0xbc, 0x5c, 0x96, 0x50, 0xfa, 0xb5, 0x8a, 0x98, 0xa4, 0x91, 0x1a, 0x44, -- 0x9a, 0xf6, 0xf5, 0x76, 0xff, 0xdd, 0xfb, 0xfd, 0xe3, 0x07, 0xc3, 0x48, -- 0xc2, 0x18, 0x51, 0x67, 0x88, 0x82, 0x48, 0x1e, 0x6a, 0xac, 0x1c, 0x57, -- 0xc9, 0x77, 0x38, 0x57, 0x61, 0xfd, 0x89, 0xaf, 0xf4, 0x5f, 0x3a, 0x23, -- 0x70, 0xbf, 0x57, 0x29, 0xf6, 0x4d, 0x88, 0x78, 0x7e, 0x23, 0xfc, 0xa7, -- 0x67, 0xef, 0xf3, 0xeb, 0x3d, 0x35, 0xe5, 0xba, 0xca, 0x66, 0x1d, 0xda, -- 0x82, 0xe3, 0xfa, 0x2c, 0xb9, 0x98, 0xbe, 0x06, 0x85, 0xb4, 0x1f, 0x54, -- 0x69, 0x85, 0x5e, 0x82, 0xea, 0xd9, 0x97, 0xab, 0xcd, 0xd2, 0xfb, 0x07, -- 0x07, 0x3e, 0x2e, 0xbb, 0x99, 0xe1, 0xd9, 0x88, 0x4b, 0xf9, 0xc7, 0xab, -- 0xfa, 0x58, 0xb8, 0x29, 0x6a, 0x91, 0x71, 0xec, 0xea, 0xa0, 0x2e, 0x24, -- 0x2f, 0xe2, 0xa5, 0x8e, 0xe6, 0x8b, 0xee, 0x48, 0x66, 0x36, 0x99, 0x84, -- 0x82, 0xa6, 0x55, 0xa0, 0x40, 0xad, 0x8d, 0x73, 0x35, 0xba, 0x9e, 0xee, -- 0x33, 0x6c, 0x9c, 0x26, 0x09, 0x88, 0xb6, 0x10, 0xc5, 0xb0, 0x65, 0x06, -- 0x25, 0xec, 0xa7, 0x6f, 0xc9, 0xec, 0xa6, 0x67, 0x9a, 0x50, 0x76, 0xb1, -- 0x9c, 0x11, 0xf5, 0x92, 0xc4, 0x31, 0x59, 0xaf, 0x92, 0x47, 0xe2, 0x0c, -- 0x3c, 0xce, 0x57, 0x81, 0x9f, 0x08, 0x7f, 0x30, 0xc0, 0xe6, 0x8e, 0x90, -- 0x8a, 0x7e, 0xe7, 0xdd, 0xd0, 0x3b, 0x3f, 0xba, 0x38, 0x4c, 0xf6, 0xdf, -- 0x5f, 0x7c, 0xd3, 0x0b, 0x0a, 0xb0, 0x34, 0x33, 0x6c, 0x48, 0x59, 0x28, -- 0xf3, 0xcc, 0x10, 0xb2, 0x79, 0xed, 0x44, 0x58, 0xeb, 0xc0, 0xca, 0x6d, -- 0x79, 0xc4, 0x5b, 0x1b, 0xfd, 0x6c, 0xf8, 0x6c, 0xb3, 0xb5, 0x31, 0xab, -- 0x21, 0xae, 0x82, 0xb2, 0x31, 0xba, 0x5a, 0x7c, 0x09, 0x04, 0x28, 0x4b, -- 0x1c, 0x83, 0xb3, 0xe5, 0x11, 0x56, 0x21, 0x32, 0x9b, 0x65, 0x31, 0xce, -- 0xd1, 0x74, 0x09, 0xab, 0x62, 0x63, 0xe3, 0x00, 0xec, 0x8f, 0x08, 0x40, -- 0x9b, 0x37, 0x44, 0x99, 0xb0, 0x60, 0xa2, 0x8b, 0x8e, 0xee, 0x48, 0x62, -- 0x32, 0xab, 0x2e, 0x63, 0x4a, 0x72, 0xb5, 0x82, 0x10, 0xa6, 0x3e, 0x06, -- 0xdd, 0x32, 0x01, 0xc2, 0x27, 0x7a, 0x74, 0xc2, 0x42, 0x25, 0xb3, 0x5c, -- 0xb2, 0xec, 0x03, 0x88, 0xa9, 0x36, 0x25, 0xab, 0x52, 0xf6, 0x93, 0xfc, -- 0xdb, 0xcd, 0x03, 0x0e, 0xb4, 0xd2, 0x15, 0xa4, 0x05, 0x7d, 0x41, 0xe0, -- 0xf4, 0x24, 0xba, 0xce, 0x03, 0xf9, 0xa3, 0x70, 0x95, 0xb8, 0x34, 0xb0, -- 0xc0, 0x31, 0x20, 0xe8, 0xc6, 0xf9, 0x66, 0xe2, 0x0a, 0x72, 0xb1, 0x74, -- 0xac, 0xed, 0x71, 0x7c, 0x65, 0x2b, 0x9e, 0x32, 0xca, 0x6b, 0xee, 0x82, -- 0x1a, 0x09, 0x4e, 0x62, 0x7c, 0xd1, 0x82, 0xfb, 0x8d, 0xef, 0x26, 0xdd, -- 0x19, 0x63, 0x52, 0x16, 0xb3, 0x90, 0x1a, 0xb0, 0x12, 0xb9, 0x79, 0xf0, -- 0xfd, 0xeb, 0x56, 0xf1, 0x49, 0x29, 0xff, 0x28, 0xee, 0x5c, 0x89, 0xf1, -- 0x5e, 0x95, 0x9d, 0x1c, 0x24, 0x57, 0xa2, 0x70, 0x3a, 0x03, 0xa4, 0x4f, -- 0xb2, 0x6c, 0xe1, 0xf0, 0xce, 0x80, 0xfe, 0x2f, 0x8a, 0x30, 0x17, 0x40, -- 0x47, 0xa9, 0xf3, 0x59, 0x7c, 0xe5, 0x38, 0xdf, 0x91, 0x70, 0x01, 0x9f, -- 0x3c, 0xc6, 0x98, 0xa6, 0xa4, 0x66, 0x25, 0x3b, 0x9f, 0x3d, 0xf9, 0x3c, -- 0xa9, 0x38, 0x37, 0x21, 0x6f, 0x21, 0xc5, 0x08, 0x56, 0xc0, 0xea, 0x1c, -- 0x51, 0x95, 0x9b, 0xcd, 0xd8, 0x63, 0xa8, 0x78, 0x15, 0x27, 0x1f, 0xe2, -- 0xe6, 0xd2, 0xe8, 0xfd, 0x38, 0x65, 0x90, 0x16, 0xd1, 0x64, 0x46, 0xac, -- 0x18, 0xe0, 0x1d, 0x78, 0xb5, 0xc4, 0x0a, 0x33, 0x6c, 0x56, 0x98, 0x67, -- 0x94, 0xd7, 0x7e, 0x72, 0x76, 0x78, 0x71, 0xd6, 0x4f, 0xce, 0x2f, 0x4e, -- 0xce, 0x56, 0x24, 0xf6, 0xd6, 0x63, 0x30, 0x3d, 0x5e, 0x33, 0x26, 0x1b, -- 0xc6, 0xcf, 0x34, 0x43, 0x7e, 0xc0, 0x31, 0x78, 0x17, 0x52, 0x61, 0x22, -- 0x50, 0xc3, 0x67, 0x83, 0x55, 0xe9, 0xdc, 0x8d, 0xd5, 0x02, 0xd9, 0x10, -- 0x2f, 0x7f, 0x70, 0x62, 0xb2, 0xed, 0x9f, 0x40, 0x21, 0x4c, 0x8b, 0x3c, -- 0x5d, 0xc7, 0xb2, 0x31, 0x5a, 0x2d, 0x19, 0xe5, 0x0d, 0x92, 0x6a, 0xca, -- 0x58, 0x41, 0x21, 0x42, 0x59, 0x68, 0xcd, 0x83, 0x6a, 0xf7, 0x2c, 0xe3, -- 0xa4, 0x97, 0xb0, 0xe1, 0xfb, 0x26, 0x0b, 0xf0, 0xba, 0x1e, 0xa1, 0xdf, -- 0xb4, 0x62, 0x03, 0x4e, 0x50, 0xb5, 0x86, 0x4b, 0x44, 0x89, 0x48, 0x0f, -- 0x03, 0xa3, 0x31, 0x9e, 0x2a, 0x71, 0xb8, 0x06, 0x5d, 0x29, 0x4f, 0x0e, -- 0xcf, 0x88, 0x77, 0x79, 0xdd, 0x25, 0xae, 0x14, 0x4a, 0x1d, 0xb2, 0x2f, -- 0x24, 0xe0, 0x4c, 0x6b, 0x20, 0x45, 0xad, 0xdb, 0xa8, 0xd6, 0x1d, 0xa9, -- 0xb5, 0xb8, 0xf2, 0x4e, 0x9b, 0x2b, 0x73, 0xde, 0x4f, 0x27, 0x67, 0x61, -- 0x27, 0x7c, 0x23, 0xdb, 0xc8, 0xea, 0xbd, 0x42, 0x10, 0x08, 0xe1, 0x69, -- 0x4f, 0xf5, 0xa9, 0x15, 0x71, 0xcb, 0x56, 0x1c, 0xd4, 0x47, 0x31, 0xd9, -- 0x9e, 0x4b, 0x26, 0xce, 0xb2, 0xcd, 0x4e, 0x5b, 0x99, 0x34, 0x6d, 0x01, -- 0xd5, 0x30, 0xf6, 0x7d, 0x99, 0x96, 0x64, 0x70, 0xba, 0xe5, 0xf3, 0x9d, -- 0x0c, 0xa4, 0xab, 0x31, 0xf3, 0x9d, 0xdf, 0x2c, 0x78, 0x68, 0x3d, 0x0b, -- 0xb5, 0x5f, 0x94, 0x08, 0x3c, 0x98, 0x67, 0x2b, 0xea, 0x67, 0x32, 0xa2, -- 0xf7, 0x5c, 0x12, 0x9a, 0x24, 0x65, 0xda, 0x0a, 0x2c, 0xd8, 0x4a, 0x72, -- 0x2a, 0x2c, 0xe7, 0xe5, 0xe2, 0x82, 0x9a, 0x14, 0x30, 0x70, 0xf2, 0x22, -- 0xc4, 0x71, 0x25, 0x10, 0x58, 0x11, 0x42, 0x63, 0x57, 0x8a, 0x36, 0xa6, -- 0xc6, 0x90, 0x12, 0x35, 0xda, 0x9b, 0x89, 0x38, 0x62, 0xa4, 0x8f, 0x8e, -- 0xd2, 0x69, 0xb8, 0x8d, 0xc2, 0xe1, 0x20, 0x85, 0x7b, 0xc6, 0x50, 0x97, -- 0xf7, 0x71, 0xae, 0x96, 0xcc, 0x36, 0x2e, 0x76, 0x24, 0x51, 0x62, 0xc8, -- 0xa4, 0xd2, 0xaa, 0x08, 0xcd, 0x14, 0x25, 0x5b, 0xc9, 0xf6, 0x7d, 0xc6, -- 0x88, 0xd8, 0xa0, 0xb7, 0x41, 0xbe, 0x78, 0x3c, 0x69, 0x93, 0x0d, 0x91, -- 0xe6, 0x74, 0xf1, 0x41, 0xda, 0x0d, 0x14, 0xd7, 0xe5, 0xd5, 0x15, 0x52, -- 0x04, 0xf2, 0x38, 0x19, 0xbb, 0xf2, 0xc6, 0x47, 0x45, 0xe4, 0x20, 0x31, -- 0x8b, 0xc7, 0xdc, 0xc8, 0x44, 0x93, 0xce, 0x94, 0x96, 0x2b, 0x0f, 0x8b, -- 0xb6, 0x32, 0x56, 0x00, 0xc6, 0x64, 0x2d, 0x3c, 0x35, 0x0e, 0x52, 0xd3, -- 0xca, 0x6c, 0x00, 0xbd, 0xdc, 0x39, 0x04, 0x83, 0x11, 0x47, 0x21, 0x3e, -- 0x9a, 0xab, 0x2e, 0x62, 0x8c, 0x9d, 0x2a, 0x2b, 0x59, 0x19, 0xf6, 0xd5, -- 0xa0, 0xe0, 0xa7, 0xc3, 0xdd, 0xcd, 0x87, 0x54, 0x0b, 0x96, 0xdb, 0x89, -- 0xf3, 0x67, 0x92, 0xb9, 0x44, 0xfa, 0x95, 0xa4, 0x8f, 0x4a, 0xfa, 0x61, -- 0x29, 0x3b, 0x6b, 0x24, 0x6e, 0x24, 0x15, 0x03, 0x4a, 0xf3, 0x12, 0xb5, -- 0xf7, 0x8d, 0x8e, 0x59, 0xfd, 0x68, 0x0a, 0xa0, 0x99, 0x90, 0xd2, 0xe4, -- 0x94, 0x2e, 0x17, 0xb7, 0xca, 0x41, 0xde, 0x5d, 0xb2, 0x81, 0xd8, 0x05, -- 0x1a, 0xc7, 0x66, 0xfb, 0x22, 0x64, 0xd4, 0xc9, 0x34, 0x0f, 0x35, 0x19, -- 0x3a, 0x78, 0x33, 0xfa, 0x84, 0x9d, 0x02, 0x25, 0x8d, 0x81, 0x61, 0xd4, -- 0xad, 0xbe, 0x95, 0x4a, 0xd8, 0x6c, 0x7b, 0x36, 0x2e, 0xba, 0xd6, 0x79, -- 0x3f, 0xab, 0x17, 0x32, 0xf0, 0x49, 0x71, 0xdc, 0x10, 0x9d, 0xcd, 0x2a, -- 0xac, 0x0d, 0xb1, 0x5c, 0x88, 0x2e, 0x57, 0xdc, 0xcd, 0x81, 0x96, 0x1e, -- 0x53, 0x13, 0x06, 0xcf, 0x67, 0xa7, 0x15, 0x65, 0xbf, 0xbb, 0x3d, 0xfc, -- 0xd8, 0x66, 0xa7, 0x55, 0x35, 0x1d, 0x8c, 0xc7, 0xe3, 0x95, 0x1c, 0xf5, -- 0xe0, 0xe0, 0x20, 0xd9, 0x38, 0x40, 0xce, 0xf7, 0x81, 0x8e, 0xf2, 0xe0, -- 0x9a, 0xcd, 0x34, 0x53, 0xae, 0xb1, 0x71, 0xbd, 0x64, 0xab, 0x1e, 0x0f, -- 0x45, 0x19, 0xce, 0xf9, 0xf9, 0xf1, 0xd6, 0xc5, 0xf1, 0x79, 0x3b, 0xe4, -- 0x3c, 0xbd, 0x67, 0x5d, 0x4f, 0x4a, 0x69, 0x34, 0xf4, 0x16, 0x91, 0xdb, -- 0x00, 0xb7, 0x64, 0x41, 0xab, 0x46, 0x57, 0xd2, 0x4b, 0x67, 0x72, 0xc5, -- 0x72, 0x6e, 0xf6, 0x75, 0xa7, 0x58, 0xcd, 0xb3, 0x39, 0xe2, 0xb7, 0x98, -- 0xa5, 0x81, 0xca, 0xb4, 0x52, 0xf7, 0xbb, 0xfd, 0x0b, 0x2e, 0xd2, 0x56, -- 0x6b, 0x4a, 0xc8, 0x8a, 0x80, 0x78, 0x07, 0xd6, 0x85, 0x4c, 0xce, 0x34, -- 0x80, 0x31, 0xb7, 0x2b, 0x00, 0xac, 0x28, 0xaf, 0x8c, 0x2f, 0x0e, 0x35, -- 0x22, 0xb8, 0x03, 0x46, 0x55, 0x57, 0x74, 0xe0, 0xee, 0x20, 0x09, 0xab, -- 0xe6, 0x3f, 0xab, 0xd6, 0x86, 0xec, 0x3c, 0x8f, 0xef, 0xb7, 0xc6, 0xeb, -- 0x3f, 0x49, 0x4e, 0xe3, 0x96, 0xf6, 0xfa, 0xcb, 0x6f, 0xda, 0x26, 0x44, -- 0x6d, 0xa9, 0x2d, 0x9e, 0x1e, 0x33, 0xca, 0xb8, 0xe8, 0x08, 0x34, 0xd4, -- 0x7b, 0x11, 0x7d, 0xbb, 0x24, 0xd6, 0x5a, 0x43, 0xf9, 0x15, 0x83, 0xae, -- 0xa2, 0x4d, 0x9f, 0xa0, 0xa4, 0xc8, 0x08, 0xa8, 0xc5, 0xc2, 0x5d, 0xee, -- 0xd2, 0x88, 0x6d, 0x18, 0xa7, 0x08, 0xf0, 0x10, 0x0a, 0x62, 0x2e, 0xe2, -- 0xb1, 0x75, 0xb8, 0xfd, 0x65, 0xb6, 0x98, 0xde, 0x3b, 0x31, 0x4d, 0xdb, -- 0x5e, 0xa5, 0xbf, 0x85, 0xc2, 0x7e, 0x98, 0xee, 0x69, 0x03, 0xac, 0x9a, -- 0xad, 0xa0, 0xa3, 0x34, 0x97, 0x2a, 0xe8, 0x6d, 0xa6, 0xa6, 0x3d, 0xb7, -- 0xca, 0xa4, 0xc5, 0x3b, 0xb4, 0xdb, 0xb9, 0x43, 0x42, 0xa5, 0x9d, 0xfb, -- 0x71, 0xa6, 0xe7, 0x5e, 0xcf, 0x82, 0x5b, 0x07, 0xa6, 0x2f, 0x22, 0xb6, -- 0x2b, 0x84, 0x7a, 0x0a, 0x8c, 0x82, 0x86, 0x1d, 0x58, 0x01, 0x81, 0xb6, -- 0x5d, 0x42, 0x8b, 0xcd, 0x6b, 0x99, 0xc4, 0x96, 0x6f, 0x49, 0xd6, 0x9f, -- 0xb9, 0x8a, 0x23, 0x7d, 0x45, 0x3c, 0xb5, 0x6c, 0xe4, 0x8e, 0xfd, 0x30, -- 0x3f, 0xf1, 0x98, 0x6b, 0x79, 0xbc, 0x11, 0x0f, 0x62, 0x50, 0xc2, 0xc0, -- 0x3c, 0xc3, 0xa6, 0xbe, 0x9b, 0x66, 0xba, 0xb2, 0x5e, 0xb6, 0xce, 0x31, -- 0x5e, 0xb5, 0xed, 0x4d, 0xbd, 0xb2, 0x49, 0xaa, 0x20, 0x1e, 0xe6, 0xcd, -- 0x1f, 0x2a, 0x13, 0x46, 0x79, 0xcb, 0x23, 0x01, 0x31, 0xbe, 0x35, 0x10, -- 0xb5, 0xcb, 0x65, 0xcd, 0x93, 0xb6, 0x52, 0xec, 0xe1, 0x1e, 0xb0, 0x79, -- 0x5e, 0x83, 0x72, 0xc5, 0x45, 0xf6, 0x70, 0x21, 0x52, 0x8f, 0x0b, 0xa6, -- 0x7e, 0x35, 0x05, 0x5a, 0x73, 0xe9, 0x7b, 0xe2, 0xa1, 0xb6, 0x38, 0x5f, -- 0x0b, 0x05, 0xe9, 0x72, 0xcb, 0x00, 0x91, 0xa2, 0xa4, 0x5f, 0x00, 0x1f, -- 0x62, 0xb7, 0xd3, 0x94, 0xe3, 0xa6, 0x59, 0x4c, 0x1a, 0x26, 0xc7, 0x99, -- 0x78, 0xa4, 0xd6, 0xbf, 0x5c, 0x07, 0xf5, 0xad, 0xbf, 0x5c, 0xd7, 0x30, -- 0xe6, 0xb8, 0xd6, 0x4e, 0xa9, 0xd0, 0xf1, 0x3c, 0x84, 0x75, 0x31, 0x39, -- 0xaf, 0xdb, 0x20, 0xd4, 0x42, 0x27, 0x23, 0x43, 0x4c, 0xc2, 0x5c, 0x93, -- 0x0d, 0x48, 0xd0, 0x63, 0x89, 0xa8, 0x43, 0x7f, 0x6d, 0xe2, 0x71, 0x2c, -- 0x24, 0xeb, 0x86, 0x3d, 0x45, 0x7e, 0xe6, 0xb2, 0xbd, 0x65, 0xb6, 0x5e, -- 0x21, 0xe3, 0x43, 0xaa, 0xa9, 0x74, 0x05, 0x32, 0xb8, 0xb5, 0xd1, 0xf1, -- 0xc8, 0x40, 0x90, 0xc3, 0x36, 0x1e, 0xe7, 0x9c, 0xe1, 0x00, 0xb1, 0x90, -- 0xbe, 0x24, 0x91, 0x46, 0xc8, 0x1b, 0x73, 0x46, 0x08, 0x33, 0x4d, 0xba, -- 0x4d, 0x7a, 0x59, 0xca, 0xbb, 0x09, 0x38, 0xf6, 0x36, 0x54, 0xee, 0xe0, -- 0x8a, 0x25, 0xc2, 0xab, 0x69, 0x31, 0x2a, 0x2e, 0x2f, 0x1f, 0x90, 0x17, -- 0x24, 0xd1, 0x1b, 0x6d, 0x08, 0x91, 0xf6, 0x38, 0xd1, 0x89, 0xdf, 0x1b, -- 0x49, 0x3e, 0x3e, 0x0a, 0xea, 0x29, 0xaa, 0xa7, 0xd6, 0x1b, 0xea, 0xc2, -- 0x77, 0x37, 0x13, 0x88, 0x25, 0x63, 0x59, 0x0a, 0x07, 0xb5, 0x66, 0x62, -- 0xa6, 0x46, 0xde, 0x79, 0x5c, 0x40, 0x3a, 0x84, 0xff, 0xfe, 0x9f, 0x3f, -- 0xfd, 0xd2, 0x11, 0xfa, 0xcc, 0x9a, 0x8d, 0x85, 0x9c, 0x22, 0xd4, 0x45, -- 0xc0, 0x54, 0xa0, 0x43, 0xb0, 0x1c, 0xe2, 0x2b, 0x92, 0x68, 0x51, 0xd4, -- 0x20, 0xcd, 0x25, 0x66, 0x70, 0x95, 0xef, 0x10, 0xa8, 0x7d, 0x45, 0x6d, -- 0x71, 0x00, 0x0c, 0x24, 0x03, 0x24, 0x2d, 0xef, 0x4d, 0x73, 0x20, 0x15, -- 0xaa, 0xb7, 0xc7, 0x07, 0xca, 0x81, 0x0d, 0x39, 0xff, 0xaa, 0xf2, 0xd9, -- 0xf7, 0x67, 0x47, 0x4e, 0xa3, 0x0b, 0x76, 0xe2, 0x6b, 0xec, 0x44, 0xb4, -- 0x6c, 0x1e, 0xdd, 0xb2, 0xdf, 0x06, 0x49, 0xf1, 0x48, 0x5f, 0xac, 0x56, -- 0x4b, 0x21, 0xb5, 0x56, 0xb5, 0xbd, 0x49, 0xbf, 0x13, 0x86, 0xb5, 0xdf, -- 0x86, 0x2a, 0x2e, 0x63, 0xfc, 0xbf, 0x46, 0x0e, 0xa7, 0x06, 0x2e, 0x44, -- 0xd0, 0xd4, 0x5f, 0x93, 0xf4, 0xe6, 0x40, 0xac, 0x5b, 0xa9, 0x9e, 0x0d, -- 0x80, 0x6b, 0xa9, 0xac, 0xc2, 0xf4, 0x7f, 0x87, 0x62, 0xa0, 0x6a, 0x1b, -- 0xea, 0xd4, 0x8a, 0x2e, 0x3c, 0x40, 0xa4, 0xb0, 0x2e, 0x83, 0x8a, 0xf2, -- 0x2b, 0x78, 0x6c, 0xc1, 0xec, 0xeb, 0xff, 0xb6, 0xee, 0x81, 0xf9, 0x3a, -- 0x92, 0x39, 0x6c, 0xfc, 0x11, 0x42, 0xce, 0xe0, 0xa8, 0xef, 0x47, 0x29, -- 0x9e, 0x70, 0xb9, 0x73, 0x5d, 0xad, 0xd8, 0x51, 0x07, 0x34, 0xf5, 0xaa, -- 0x61, 0x7c, 0x73, 0xb8, 0xff, 0xda, 0xe6, 0xfa, 0x4f, 0x81, 0xb7, 0x71, -- 0xe6, 0x91, 0x51, 0x26, 0x00, 0xdc, 0xcb, 0xb9, 0x15, 0xdf, 0xe5, 0x3d, -- 0xb1, 0xbb, 0x03, 0xd4, 0x41, 0xa2, 0x36, 0x97, 0x70, 0x60, 0x92, 0xed, -- 0x50, 0x1d, 0xd5, 0xee, 0xb4, 0x52, 0x79, 0x0c, 0x0c, 0x73, 0x66, 0xe3, -- 0xe3, 0xd3, 0x2b, 0x2c, 0x2e, 0xa0, 0xdf, 0x30, 0x51, 0xf3, 0xa5, 0xfc, -- 0xbb, 0xaa, 0x3c, 0xdc, 0xa1, 0xc0, 0x89, 0xea, 0xc3, 0xde, 0x51, 0xd9, -- 0xca, 0xe4, 0xbb, 0xcb, 0x46, 0xc4, 0x59, 0xae, 0x48, 0x5e, 0xfa, 0x51, -- 0xb0, 0xb0, 0xdb, 0x23, 0x57, 0xe6, 0xc1, 0xdc, 0x54, 0x0b, 0x2e, 0x71, -- 0x5c, 0x3c, 0x1a, 0x57, 0xf8, 0xd6, 0x30, 0xaf, 0x4d, 0xf3, 0x24, 0xad, -- 0x28, 0xed, 0x24, 0x82, 0xee, 0x64, 0xe5, 0xa4, 0xaa, 0x19, 0x94, 0xc9, -- 0x8d, 0x8c, 0xdf, 0xbb, 0x4e, 0x03, 0xf4, 0xf0, 0xb9, 0x42, 0x88, 0x07, -- 0x36, 0x4d, 0x33, 0x59, 0x44, 0x29, 0xb7, 0x16, 0xaa, 0x71, 0x67, 0xc6, -- 0xd5, 0xbe, 0xf8, 0xcc, 0x19, 0x4d, 0xa7, 0x9c, 0xbb, 0xfc, 0x51, 0xd7, -- 0x9b, 0x2b, 0xf8, 0x86, 0x2d, 0x8e, 0xee, 0x98, 0xc6, 0xe1, 0x72, 0x76, -- 0x12, 0xe4, 0xf3, 0x86, 0x42, 0x37, 0xcf, 0xd1, 0x32, 0x56, 0x91, 0x1f, -- 0x4a, 0xf7, 0x44, 0x9c, 0x49, 0xc4, 0x31, 0xfe, 0x55, 0xbd, 0x04, 0x37, -- 0x4f, 0xe7, 0xe1, 0x38, 0x1d, 0x70, 0xca, 0xa4, 0x90, 0x85, 0x77, 0x96, -- 0x49, 0x24, 0x41, 0xb0, 0xe0, 0x96, 0x8e, 0x57, 0x99, 0x6d, 0x5c, 0xf9, -- 0x42, 0x07, 0x3a, 0xec, 0xf8, 0x34, 0x97, 0xc2, 0xc3, 0x15, 0xcf, 0xe0, -- 0x9e, 0x19, 0xc0, 0x66, 0x45, 0xad, 0xba, 0x8b, 0xb9, 0xb1, 0x16, 0x50, -- 0x05, 0x45, 0x73, 0x4d, 0x22, 0x16, 0x4d, 0x1c, 0x7a, 0x06, 0xcf, 0x5a, -- 0x97, 0x8c, 0xb8, 0xfb, 0x55, 0x7e, 0x2b, 0xd4, 0x62, 0x23, 0xeb, 0xc8, -- 0xa4, 0x70, 0x63, 0x30, 0x1f, 0x7e, 0x52, 0x98, 0xce, 0x24, 0xb8, 0x47, -- 0x49, 0x85, 0x3a, 0x8c, 0x85, 0xe6, 0x5e, 0x8d, 0x8b, 0x29, 0x5f, 0x52, -- 0x29, 0xdf, 0xe5, 0x7b, 0x44, 0xd9, 0x6d, 0xdf, 0xc8, 0x37, 0x45, 0x55, -- 0xef, 0xf5, 0x82, 0xda, 0x7a, 0x2a, 0x48, 0x28, 0xf9, 0xe8, 0xe0, 0x24, -- 0x66, 0x65, 0x5e, 0x0c, 0x54, 0xc4, 0x91, 0x0c, 0x27, 0xba, 0x88, 0x3a, -- 0xeb, 0x88, 0x5a, 0x0c, 0x24, 0xa7, 0x37, 0x49, 0x52, 0xa6, 0x4b, 0x71, -- 0x67, 0xe8, 0xd1, 0x59, 0xae, 0x83, 0x72, 0x35, 0x1d, 0xbf, 0x49, 0x7a, -- 0x3f, 0x0c, 0x0e, 0x96, 0x55, 0x1c, 0x48, 0x3c, 0x1b, 0x7c, 0x83, 0x26, -- 0xff, 0xd2, 0x73, 0x8a, 0xb6, 0x3c, 0xea, 0xbf, 0xda, 0xeb, 0x75, 0x07, -- 0x7e, 0xfb, 0x2b, 0xa5, 0x72, 0xf5, 0xb0, 0x60, 0x39, 0xb7, 0x41, 0x02, -- 0xc8, 0x97, 0xce, 0xce, 0x96, 0xae, 0xb6, 0x45, 0x76, 0x77, 0xae, 0xb9, -- 0xe5, 0x2d, 0x2c, 0x10, 0x9f, 0x37, 0x19, 0x14, 0x97, 0x03, 0x94, 0x01, -- 0xe4, 0xfa, 0xec, 0xec, 0x54, 0x09, 0x8e, 0x23, 0x10, 0x96, 0x99, 0xc0, -- 0xa8, 0xed, 0xae, 0xfb, 0x59, 0xa3, 0xc3, 0x4b, 0xa7, 0xaa, 0xea, 0x80, -- 0x74, 0x47, 0xf7, 0x58, 0xbd, 0xb1, 0xd7, 0x1d, 0x7a, 0x2f, 0xa7, 0x0f, -- 0x29, 0x78, 0x6f, 0x54, 0x41, 0x0c, 0x01, 0x79, 0x7d, 0xb9, 0xc3, 0x31, -- 0x6b, 0xb0, 0xde, 0x99, 0x58, 0x8d, 0xa0, 0xf6, 0x93, 0xae, 0x7f, 0x29, -- 0x25, 0x61, 0x3b, 0x9d, 0xbc, 0x3e, 0x05, 0x64, 0xdf, 0x20, 0xd5, 0x06, -- 0xd4, 0x91, 0x42, 0x82, 0x36, 0xd3, 0xe8, 0x57, 0x01, 0x9f, 0x35, 0x31, -- 0x24, 0x10, 0xcd, 0xe0, 0x32, 0xbe, 0x9b, 0x1e, 0x5f, 0x04, 0xc5, 0xfb, -- 0x65, 0xdf, 0x12, 0x71, 0xbd, 0xcb, 0x4d, 0xc2, 0xaf, 0x18, 0xf7, 0x0b, -- 0x04, 0x77, 0xae, 0x1b, 0xb5, 0x58, 0x8e, 0x66, 0x93, 0x67, 0xc9, 0x4b, -- 0xfa, 0x11, 0xc7, 0x31, 0x1f, 0x98, 0x57, 0x0d, 0x95, 0xb2, 0x53, 0x97, -- 0x79, 0x27, 0xf2, 0x18, 0xff, 0xfa, 0x64, 0x97, 0x1a, 0xfe, 0x98, 0x5a, -- 0x4d, 0x9e, 0x64, 0x92, 0x5f, 0xe5, 0x08, 0x99, 0x8c, 0xb5, 0x59, 0x13, -- 0xe7, 0x03, 0xa7, 0x06, 0x2f, 0xd5, 0xce, 0xee, 0xe7, 0xc9, 0x28, 0xaf, -- 0x93, 0xb7, 0xaf, 0x9f, 0x49, 0x5d, 0xf8, 0x6a, 0x39, 0xb3, 0x0d, 0xd5, -- 0x2a, 0x2a, 0x3c, 0xce, 0xf5, 0xf6, 0x11, 0xa1, 0x81, 0x4f, 0xf3, 0x31, -- 0xe7, 0xd5, 0xf5, 0x1b, 0x15, 0x96, 0x2e, 0xcd, 0xe6, 0x17, 0x14, 0x2c, -- 0x72, 0x84, 0xc7, 0x2d, 0xa9, 0xcd, 0xb1, 0x43, 0x9b, 0xa5, 0x35, 0xa0, -- 0xce, 0x2b, 0xab, 0x26, 0xdd, 0xd0, 0xa0, 0x3e, 0x6b, 0x5a, 0x06, 0x24, -- 0x6c, 0xd6, 0x40, 0x28, 0x07, 0x24, 0x20, 0x5d, 0x45, 0x81, 0xa4, 0x76, -- 0xb5, 0x1d, 0xe1, 0xd9, 0xa4, 0x19, 0x7d, 0x77, 0x8c, 0x37, 0x82, 0x5c, -- 0x7f, 0xb9, 0xba, 0x99, 0x9c, 0xf3, 0xf1, 0x72, 0xca, 0xd5, 0x1d, 0xe3, -- 0x3b, 0xde, 0xca, 0xb9, 0x18, 0xa6, 0x46, 0xb9, 0x94, 0x1a, 0x80, 0xfb, -- 0x0b, 0x8e, 0x1b, 0x4b, 0x76, 0x86, 0x1f, 0xfb, 0x61, 0x01, 0x6b, 0x2d, -- 0x37, 0x85, 0x3a, 0xd5, 0xe5, 0x20, 0x22, 0xf7, 0x71, 0xdd, 0x1e, 0x0d, -- 0xb7, 0x2d, 0x11, 0x7b, 0x53, 0xf6, 0x7e, 0x94, 0x72, 0x11, 0xec, 0x12, -- 0x43, 0xbd, 0x4a, 0x51, 0xb2, 0x30, 0xa0, 0x9e, 0xbc, 0x0f, 0x38, 0x24, -- 0x80, 0xd4, 0xae, 0x9a, 0xb8, 0x7c, 0x1b, 0x54, 0x31, 0x31, 0x61, 0x40, -- 0x85, 0x79, 0x09, 0x37, 0x15, 0xe9, 0x2e, 0xf8, 0x3a, 0x2e, 0xb3, 0xcd, -- 0xcd, 0xb8, 0x43, 0x08, 0x47, 0x8a, 0x2c, 0xc1, 0x80, 0xef, 0xde, 0x3e, -- 0xcb, 0x6a, 0x99, 0xe3, 0xd4, 0x41, 0x9c, 0xad, 0x34, 0x1a, 0xc7, 0xd3, -- 0x23, 0xcf, 0xc3, 0xe2, 0x64, 0x87, 0xc3, 0x60, 0x56, 0x47, 0x26, 0xb1, -- 0x74, 0x4d, 0x89, 0x4b, 0xe1, 0x6c, 0xbd, 0x39, 0x3a, 0x3e, 0xdc, 0x4c, -- 0xde, 0x64, 0x00, 0xb9, 0x6a, 0x8e, 0x1b, 0xfc, 0xe2, 0x0f, 0xf2, 0x89, -- 0x6d, 0x91, 0x6a, 0x5a, 0x5d, 0xbe, 0x6f, 0xb5, 0x0b, 0x41, 0x4e, 0x94, -- 0x5d, 0x83, 0x44, 0x28, 0x89, 0x30, 0x05, 0xe2, 0xf5, 0xac, 0xda, 0x11, -- 0xe4, 0xb4, 0x00, 0xb9, 0x3f, 0xb6, 0xbb, 0xf2, 0x6d, 0xe7, 0x4b, 0x9b, -- 0x7d, 0xaf, 0x55, 0x0f, 0x19, 0xc5, 0xd3, 0x22, 0x3c, 0x68, 0x6f, 0x79, -- 0xec, 0x1a, 0x94, 0x26, 0xee, 0x2f, 0xa9, 0x08, 0xda, 0x75, 0x16, 0xa4, -- 0x50, 0x77, 0xfe, 0x77, 0x09, 0xe1, 0x45, 0xe0, 0xc4, 0xac, 0x98, 0x38, -- 0x4c, 0x6b, 0xa9, 0x3f, 0xc6, 0xf3, 0x0d, 0x19, 0x4a, 0x80, 0xdb, 0xd5, -- 0x95, 0xe5, 0x79, 0x2a, 0x10, 0xde, 0x3c, 0xa0, 0xd0, 0x17, 0x2f, 0x77, -- 0xb5, 0x57, 0x53, 0x5c, 0x2b, 0x43, 0x17, 0xdd, 0xc6, 0xd5, 0xf4, 0x3a, -- 0xe8, 0xc2, 0x7a, 0x4b, 0x84, 0x0c, 0x42, 0xa3, 0x39, 0xcd, 0x16, 0x87, -- 0x5d, 0x62, 0xeb, 0xf6, 0xe7, 0x16, 0x78, 0xa3, 0xa5, 0xbc, 0x39, 0x91, -- 0x27, 0x2a, 0x5f, 0xd8, 0x11, 0x1a, 0xa5, 0xc1, 0x4b, 0xc1, 0xcc, 0x48, -- 0xdc, 0xdd, 0xde, 0xdb, 0x09, 0xab, 0x13, 0xce, 0xb5, 0xf2, 0x2e, 0x87, -- 0x2c, 0x6d, 0xfd, 0x7e, 0xc1, 0x29, 0x7f, 0x65, 0xd2, 0xfc, 0xeb, 0x72, -- 0x7e, 0x43, 0xb4, 0x55, 0x31, 0x05, 0x0f, 0xba, 0x2b, 0x24, 0xeb, 0xe9, -- 0xfb, 0xde, 0xb9, 0x27, 0xda, 0xa5, 0x34, 0x1a, 0x45, 0xe0, 0x53, 0x75, -- 0x6b, 0x0b, 0x55, 0x3c, 0x50, 0x0c, 0x2f, 0xc4, 0x20, 0x66, 0xdf, 0x34, -- 0xd1, 0xce, 0x98, 0x03, 0x1f, 0x58, 0xcf, 0xec, 0xe9, 0x88, 0xac, 0xe9, -- 0xde, 0xd0, 0xe3, 0x16, 0x47, 0x51, 0x52, 0x95, 0x26, 0x53, 0x5d, 0x5b, -- 0x21, 0x75, 0x08, 0xd1, 0xea, 0x76, 0x60, 0xf9, 0x8a, 0xa3, 0xf2, 0xe8, -- 0xbe, 0x4e, 0xac, 0x51, 0x11, 0x27, 0xb8, 0x50, 0x00, 0xaf, 0x47, 0xeb, -- 0xb6, 0x94, 0x14, 0xb7, 0xc4, 0x8a, 0x1d, 0x55, 0x1e, 0xdb, 0xcf, 0x06, -- 0x98, 0xb4, 0x06, 0x27, 0x2a, 0x05, 0x5f, 0xf2, 0xeb, 0xd1, 0xb9, 0x1c, -- 0x4f, 0x0b, 0xde, 0x1d, 0x36, 0x56, 0x06, 0x2b, 0xff, 0x3f, 0xe4, 0xde, -- 0xe6, 0xbb, 0x48, 0x4f, 0xfa, 0xa0, 0x23, 0x08, 0x2a, 0x0c, 0x00, 0xb7, -- 0x2c, 0x25, 0xa4, 0x00, 0x41, 0x20, 0x38, 0x09, 0xda, 0x90, 0xd8, 0x56, -- 0x97, 0xc8, 0xa4, 0x17, 0x56, 0x27, 0xf6, 0xe5, 0x20, 0xa8, 0x82, 0xeb, -- 0xb8, 0xf5, 0x6b, 0x3a, 0xb6, 0x45, 0x95, 0xcb, 0xbe, 0xf8, 0x08, 0xb5, -- 0x40, 0x4f, 0x8d, 0x83, 0x50, 0x2c, 0x79, 0xd7, 0xe1, 0xa1, 0x48, 0x1c, -- 0xa4, 0x19, 0x5b, 0x39, 0xaa, 0xa1, 0x23, 0x39, 0x0e, 0x96, 0xa9, 0x79, -- 0x11, 0xa2, 0x8e, 0xd2, 0x55, 0xcf, 0xa6, 0x80, 0x3f, 0x11, 0x15, 0x92, -- 0x6a, 0x3b, 0xe7, 0xda, 0x3f, 0x1b, 0xf7, 0x59, 0xbd, 0xe9, 0x3d, 0xdb, -- 0x16, 0xf7, 0xd5, 0x55, 0xda, 0x46, 0x0e, 0x6a, 0x2b, 0x55, 0x91, 0xcd, -- 0x58, 0xfa, 0x92, 0x00, 0x0b, 0xf2, 0x75, 0x5d, 0x22, 0x9d, 0x97, 0x1d, -- 0x09, 0x0a, 0xda, 0xbc, 0xaa, 0xb9, 0xf0, 0x52, 0xba, 0x91, 0x4b, 0xa9, -- 0xea, 0x8a, 0x86, 0xd2, 0x4c, 0xd1, 0xa0, 0xdf, 0x20, 0x40, 0x54, 0x15, -- 0x25, 0xf3, 0x44, 0x59, 0xb5, 0x01, 0x12, 0xec, 0xad, 0xb5, 0x5e, 0x5b, -- 0xde, 0x3b, 0x3f, 0x0e, 0x73, 0x80, 0xc5, 0x72, 0xe8, 0x71, 0x27, 0xf7, -- 0xe9, 0x58, 0x44, 0x8f, 0x70, 0x1a, 0x84, 0xac, 0x64, 0x34, 0x1d, 0x31, -- 0xad, 0xcc, 0x88, 0xb8, 0xcc, 0xbc, 0xdc, 0x28, 0xab, 0xd2, 0xca, 0x3d, -- 0xd3, 0xa4, 0x47, 0xd9, 0xf1, 0x94, 0x13, 0x0b, 0xda, 0xc7, 0xec, 0xbe, -- 0x09, 0xa1, 0xc5, 0x47, 0x48, 0xa2, 0xc3, 0xb5, 0x96, 0xb9, 0x1f, 0x55, -- 0x50, 0x45, 0x6d, 0xe5, 0x64, 0x51, 0x8c, 0xda, 0x7c, 0xb5, 0x8d, 0x45, -- 0x8e, 0x7d, 0xb5, 0x81, 0x3c, 0x9c, 0xf8, 0x32, 0xaf, 0x74, 0x55, 0xa0, -- 0xda, 0xb7, 0xa0, 0x5b, 0xa1, 0x56, 0xb1, 0x9a, 0xc0, 0x91, 0x38, 0x2e, -- 0xc1, 0x91, 0x92, 0x2f, 0x83, 0x98, 0xc8, 0x15, 0xd5, 0x60, 0x91, 0x0a, -- 0x79, 0x9d, 0x7e, 0xfc, 0x38, 0xac, 0x32, 0xa9, 0x6a, 0x5a, 0x55, 0x53, -- 0xa4, 0x5d, 0x36, 0xcb, 0xc0, 0x0e, 0xbe, 0xd5, 0x1a, 0xd0, 0x97, 0xf9, -- 0x15, 0x47, 0xef, 0xe1, 0xdf, 0xae, 0x24, 0x73, 0x4b, 0x2f, 0xb7, 0x5a, -- 0xba, 0xfe, 0x49, 0xcf, 0x2f, 0x81, 0xf1, 0xa4, 0x31, 0x4c, 0xc2, 0x36, -- 0x35, 0x37, 0x2e, 0xce, 0x5e, 0x71, 0x2f, 0xe7, 0x41, 0x1c, 0xfe, 0x34, -- 0xf3, 0xe9, 0x1e, 0x76, 0xeb, 0x63, 0x35, 0x7c, 0xa3, 0x26, 0xe8, 0xb7, -- 0x35, 0x26, 0xad, 0x1e, 0x6e, 0xb9, 0x22, 0xd0, 0x17, 0xc3, 0xfb, 0x41, -- 0x19, 0xa6, 0xa8, 0x2c, 0x1c, 0x59, 0x6f, 0x6f, 0x74, 0x42, 0xfb, 0x68, -- 0x89, 0xcc, 0x70, 0x0c, 0xd1, 0xbe, 0x9d, 0x2c, 0x02, 0x7a, 0xbe, 0xce, -- 0xf2, 0xd2, 0x5b, 0xd8, 0x2b, 0x17, 0x04, 0xeb, 0xb9, 0x52, 0xab, 0x6c, -- 0x58, 0xe7, 0x82, 0xb8, 0x92, 0x4d, 0xa8, 0x1d, 0xe6, 0xc1, 0xda, 0x98, -- 0x4a, 0x69, 0x62, 0x24, 0x57, 0x92, 0xfc, 0xca, 0x32, 0x89, 0xa8, 0xb3, -- 0xea, 0x9e, 0x01, 0x5a, 0x7c, 0xd5, 0x99, 0xda, 0x71, 0xcc, 0x19, 0xac, -- 0x7a, 0x88, 0x05, 0xc3, 0x60, 0x0c, 0x99, 0x22, 0x06, 0x72, 0xf3, 0x5c, -- 0x49, 0x76, 0xb6, 0xb3, 0xdc, 0x96, 0xb3, 0x05, 0x88, 0x15, 0x45, 0x60, -- 0xb2, 0x24, 0x3a, 0x98, 0x44, 0xcb, 0xea, 0x5a, 0xa3, 0x75, 0x69, 0x9d, -- 0x2b, 0xad, 0xe2, 0x8e, 0x91, 0xc6, 0xb8, 0xb8, 0x32, 0x64, 0x8f, 0x93, -- 0x52, 0x35, 0x22, 0x51, 0xb8, 0x8e, 0x8e, 0x99, 0x25, 0xab, 0xa1, 0x47, -- 0x75, 0xf1, 0x16, 0xc0, 0x4e, 0x63, 0x16, 0x78, 0xbf, 0x18, 0x0e, 0x10, -- 0x37, 0x02, 0x6f, 0xc8, 0x1d, 0xe3, 0xe5, 0x62, 0x68, 0x92, 0x46, 0xc9, -- 0xd5, 0x8b, 0xa4, 0x2b, 0xe2, 0xd6, 0x9f, 0x38, 0x3a, 0x97, 0xb1, 0x02, -- 0x51, 0x5c, 0x8b, 0xac, 0xf2, 0x3c, 0xeb, 0xca, 0xef, 0xf9, 0xaa, 0xb2, -- 0xf7, 0xde, 0xed, 0x22, 0x91, 0x8d, 0x66, 0xa3, 0x0f, 0xf7, 0xb3, 0xf9, -- 0x9c, 0xd2, 0x4e, 0x5c, 0xf3, 0x4e, 0xee, 0x5c, 0x0b, 0xba, 0x96, 0x08, -- 0x6e, 0x56, 0x21, 0xbf, 0xd7, 0x0f, 0x74, 0x27, 0x12, 0x8b, 0xe4, 0x6e, -- 0x14, 0x43, 0x69, 0x37, 0x27, 0x48, 0x35, 0xfe, 0x6e, 0x02, 0xcf, 0xb5, -- 0xb4, 0xe2, 0xbd, 0xe4, 0xe7, 0x9f, 0xfb, 0x09, 0x23, 0xe4, 0xfc, 0x4c, -- 0xda, 0xc1, 0xcf, 0xec, 0xf7, 0xfb, 0xb9, 0x54, 0x64, 0xf3, 0x9f, 0x6f, -- 0xa9, 0xcb, 0xfd, 0x55, 0x31, 0xdd, 0x49, 0x50, 0xa9, 0x23, 0x04, 0xe7, -- 0xd2, 0x32, 0x45, 0xac, 0xbc, 0x49, 0x22, 0xe5, 0xd0, 0x16, 0xa8, 0x0b, -- 0x5a, 0x98, 0x36, 0x66, 0x39, 0x9b, 0x4b, 0xde, 0x81, 0x72, 0x1a, 0xf0, -- 0x01, 0x30, 0x8b, 0xf5, 0x3f, 0xae, 0xfb, 0xbd, 0x09, 0xca, 0x1e, 0xa9, -- 0x2e, 0xcc, 0x0f, 0x46, 0xf6, 0x14, 0x61, 0x04, 0xb5, 0xd4, 0x23, 0x15, -- 0x83, 0x08, 0x1f, 0x6e, 0xe8, 0x00, 0x27, 0x6c, 0xbc, 0xb8, 0x43, 0xa9, -- 0x32, 0x58, 0x26, 0x65, 0x83, 0xd9, 0xee, 0xb2, 0xb8, 0xbe, 0x87, 0x10, -- 0x16, 0x09, 0xc0, 0xf3, 0xb0, 0x7a, 0xb8, 0xb1, 0xb2, 0x98, 0xb3, 0x07, -- 0x88, 0x1c, 0x4e, 0x92, 0x60, 0x9f, 0x56, 0xc8, 0x73, 0x69, 0x2c, 0xeb, -- 0x83, 0xf5, 0x20, 0x57, 0x56, 0xa2, 0x5d, 0x56, 0xd4, 0xa8, 0xf3, 0xa8, -- 0x37, 0x52, 0xa3, 0xee, 0xa1, 0xc8, 0x7f, 0x4d, 0x16, 0x17, 0xbc, 0x29, -- 0x8f, 0xf8, 0x95, 0xc2, 0xf6, 0x1e, 0x0f, 0xbf, 0xdf, 0x61, 0xdf, 0x36, -- 0x24, 0x62, 0x7b, 0x37, 0xaf, 0xc3, 0x0a, 0x66, 0xec, 0xf0, 0xf0, 0xc0, -- 0xe8, 0x20, 0x0e, 0x98, 0x39, 0x91, 0x56, 0x9d, 0x93, 0x12, 0x71, 0xdf, -- 0xc1, 0xa5, 0x2d, 0x94, 0x5d, 0xe0, 0x01, 0x51, 0x15, 0x83, 0xb1, 0x47, -- 0xef, 0xe6, 0xc2, 0x65, 0x93, 0xf3, 0xa2, 0x2f, 0x25, 0x1e, 0x4c, 0xfb, -- 0x08, 0xb2, 0x6a, 0x3a, 0xbc, 0x62, 0x91, 0x22, 0xc2, 0x63, 0x7a, 0x95, -- 0xf4, 0x56, 0x5e, 0x83, 0xbd, 0xce, 0x12, 0x68, 0x26, 0xff, 0x73, 0xce, -- 0xe3, 0x8d, 0x02, 0xc1, 0xa9, 0x7c, 0xbc, 0x61, 0xd7, 0xf9, 0xdf, 0xec, -- 0x0a, 0xdf, 0x54, 0xfb, 0x8b, 0x44, 0x65, 0xae, 0x02, 0x10, 0xd3, 0xa5, -- 0x55, 0xd6, 0x89, 0xd5, 0x81, 0xc6, 0x9a, 0xc3, 0x9a, 0x7e, 0x59, 0x2c, -- 0xe7, 0x93, 0x66, 0xa4, 0xc6, 0x6a, 0xc6, 0xcb, 0xe9, 0x8b, 0xdc, 0xa3, -- 0xa2, 0xd1, 0x59, 0xc6, 0x85, 0xab, 0x73, 0x04, 0xb3, 0x96, 0x66, 0x47, -- 0xb0, 0xd4, 0xc6, 0x20, 0x46, 0xd1, 0xc2, 0xec, 0x6c, 0xaa, 0xd4, 0x86, -- 0x22, 0xbb, 0x1c, 0x63, 0x9d, 0xab, 0xe9, 0xb5, 0x77, 0x5d, 0x08, 0xb2, -- 0x42, 0x6f, 0x2f, 0x39, 0xaa, 0x2d, 0xf6, 0x4e, 0xe7, 0xb8, 0xca, 0xab, -- 0x0c, 0xe8, 0x8a, 0x6f, 0x4e, 0xde, 0x1e, 0xba, 0x78, 0x4f, 0xd1, 0xf2, -- 0xf9, 0x93, 0x4e, 0x78, 0x9d, 0x21, 0xdc, 0xf6, 0x96, 0x31, 0xdb, 0x8f, -- 0xab, 0x7a, 0x60, 0x75, 0x48, 0x99, 0x5f, 0xdc, 0x2d, 0xf3, 0xc9, 0x06, -- 0x72, 0x9a, 0xdf, 0xbf, 0x3b, 0xfa, 0x61, 0x20, 0x66, 0x0c, 0x60, 0x4f, -- 0x55, 0x96, 0xd6, 0x6b, 0x49, 0xc1, 0xa2, 0xea, 0x17, 0xb3, 0x8e, 0xf4, -- 0x78, 0x8b, 0x43, 0x0e, 0xe1, 0xa1, 0x90, 0xa3, 0x90, 0xcf, 0xc5, 0x95, -- 0x20, 0x4d, 0x6e, 0x32, 0x03, 0x20, 0x16, 0x0a, 0x6c, 0x0b, 0xec, 0x7b, -- 0x47, 0xec, 0x6a, 0xb0, 0xdf, 0xdc, 0xdc, 0xfe, 0xe9, 0xe9, 0xeb, 0xfd, -- 0x8b, 0x7d, 0x37, 0x37, 0x5c, 0xc5, 0x60, 0x2a, 0xd0, 0x4d, 0x59, 0x70, -- 0xd3, 0x22, 0x97, 0xeb, 0x7f, 0xe2, 0xb4, 0x86, 0xf6, 0x5d, 0x7f, 0x7a, -- 0x76, 0xc2, 0x16, 0x86, 0x3f, 0xfd, 0xbc, 0xef, 0x0b, 0xb6, 0xa2, 0x20, -- 0x5b, 0x5c, 0x36, 0x73, 0x77, 0x33, 0xe1, 0xf1, 0x19, 0xf8, 0x46, 0xdf, -- 0x79, 0xc2, 0x25, 0x85, 0x38, 0xf9, 0xc0, 0x7b, 0x5a, 0x8e, 0x9d, 0xf0, -- 0x24, 0xc6, 0x3b, 0xd9, 0xce, 0x7e, 0x1c, 0x11, 0x17, 0x4c, 0xa4, 0xf0, -- 0x4c, 0xcc, 0x90, 0x35, 0x6c, 0xad, 0xa6, 0x24, 0xf1, 0x93, 0xd0, 0x5a, -- 0x83, 0x75, 0xb0, 0xb1, 0x8d, 0xe9, 0x6b, 0xc2, 0x0b, 0xd5, 0xc6, 0x8f, -- 0x72, 0xfb, 0x63, 0x1b, 0x24, 0x15, 0x12, 0xc0, 0x70, 0x85, 0x05, 0x48, -- 0xc4, 0x63, 0x21, 0x85, 0x78, 0x86, 0x36, 0x5a, 0x55, 0xa7, 0xa2, 0xb3, -- 0x23, 0xe6, 0x7b, 0xa2, 0x73, 0x9b, 0x43, 0xb4, 0x20, 0x7f, 0x24, 0xbe, -- 0x33, 0xb0, 0x8c, 0x4a, 0x99, 0x36, 0x7d, 0x10, 0x3d, 0x54, 0x5b, 0xb1, -- 0x11, 0xe3, 0xf3, 0xdd, 0x6c, 0x22, 0xe4, 0x0f, 0x6d, 0x59, 0x5e, 0x53, -- 0xec, 0xf5, 0x29, 0x94, 0x2d, 0x44, 0x8a, 0x5e, 0x6c, 0x6e, 0x34, 0xe3, -- 0x35, 0x3d, 0x5a, 0x2d, 0xd9, 0x60, 0xc3, 0x7f, 0x6d, 0xed, 0x0c, 0xb7, -- 0x7b, 0xf1, 0xe8, 0x11, 0xef, 0x09, 0xa3, 0x98, 0x61, 0x6a, 0x0a, 0x4c, -- 0x6a, 0xf1, 0xf8, 0x00, 0x85, 0x81, 0x91, 0x44, 0x0a, 0xc7, 0x5e, 0xd7, -- 0x58, 0x06, 0x27, 0x91, 0xf1, 0x52, 0x8c, 0xe8, 0x9e, 0x23, 0xce, 0x0b, -- 0x64, 0x96, 0xa6, 0xac, 0x0d, 0xc1, 0x10, 0xd3, 0xeb, 0x5e, 0xe0, 0xf9, -- 0x44, 0x1c, 0x82, 0xad, 0x75, 0xfe, 0x4d, 0x29, 0x57, 0x6e, 0xff, 0xfd, -- 0xe7, 0xab, 0xb9, 0x5d, 0xc3, 0xf2, 0x7e, 0x93, 0x91, 0x20, 0x38, 0x45, -- 0x86, 0x11, 0xdb, 0xd1, 0x5e, 0x4a, 0x6d, 0xcd, 0x18, 0x22, 0xbb, 0xe1, -- 0x0b, 0xa8, 0x7c, 0xdc, 0x98, 0xe0, 0x95, 0x85, 0x51, 0xd4, 0x1e, 0x49, -- 0xa5, 0xcc, 0x38, 0xf0, 0x31, 0xc9, 0x27, 0x51, 0x22, 0xb3, 0xc6, 0x52, -- 0xb2, 0xf7, 0x87, 0xf9, 0x95, 0x1b, 0x04, 0x2b, 0xdf, 0xa3, 0xcc, 0x89, -- 0xfc, 0xd2, 0xba, 0x09, 0x87, 0x8c, 0xa2, 0x99, 0x93, 0x6a, 0xbe, 0x8c, -- 0xe4, 0x85, 0xf6, 0xfb, 0x43, 0xe6, 0xb2, 0x79, 0x15, 0xa6, 0xcd, 0xc0, -- 0xa8, 0xc3, 0x4f, 0x14, 0xce, 0xe4, 0x87, 0xfa, 0x75, 0x38, 0x53, 0x91, -- 0x11, 0xf3, 0x52, 0xe1, 0xbb, 0x30, 0xc5, 0x8b, 0x83, 0xd3, 0x0f, 0xdf, -- 0x1e, 0x1e, 0x9e, 0x1e, 0xbd, 0x3e, 0x3e, 0xd4, 0x7b, 0xc6, 0x7d, 0xf4, -- 0xee, 0xe2, 0xbb, 0x63, 0x0f, 0xe1, 0xa5, 0x9e, 0x94, 0xb6, 0xba, 0xcf, -- 0x51, 0x39, 0x68, 0xee, 0x38, 0x9f, 0x2f, 0x3f, 0x72, 0x49, 0xa9, 0x31, -- 0x13, 0xf3, 0xfe, 0xd1, 0x0f, 0xfd, 0xe4, 0x9b, 0xd3, 0xc1, 0xfb, 0x1f, -- 0x22, 0xa4, 0x84, 0x46, 0x20, 0x6c, 0x5b, 0xb0, 0x74, 0x61, 0xb1, 0x28, -- 0xbb, 0xe0, 0xe7, 0x6e, 0xfa, 0x6f, 0x47, 0x25, 0xc2, 0x7f, 0xb4, 0x29, -- 0x30, 0x8e, 0x64, 0x98, 0x07, 0x18, 0xaf, 0x81, 0x14, 0xaf, 0x57, 0x2f, -- 0xc8, 0xe1, 0xf9, 0xb6, 0x56, 0x6e, 0x6d, 0x11, 0xe0, 0x7d, 0xf2, 0x92, -- 0x7e, 0x74, 0x61, 0xd7, 0x6c, 0x9d, 0x9f, 0x7f, 0xc3, 0x05, 0xdf, 0x3d, -- 0x50, 0xa2, 0xb3, 0xb5, 0x0c, 0x2d, 0x06, 0x4e, 0x3d, 0xca, 0x81, 0xd5, -- 0xa6, 0x64, 0x78, 0xbd, 0xc8, 0xd6, 0xde, 0x80, 0x5a, 0xcc, 0x9d, 0x02, -- 0x94, 0x75, 0x4b, 0x96, 0xff, 0xc0, 0x4c, 0x3e, 0xea, 0xf4, 0x51, 0x8c, -- 0xb5, 0x68, 0x8a, 0xfc, 0xe8, 0xd0, 0xc9, 0xb7, 0x6a, 0x93, 0xe7, 0x46, -- 0x30, 0x3f, 0x59, 0xb5, 0xae, 0x8a, 0xa7, 0x8a, 0xbb, 0xd3, 0xc0, 0xb6, -- 0xa5, 0xd1, 0x0f, 0x19, 0x70, 0xad, 0x2f, 0xd0, 0x6b, 0x21, 0xec, 0x9a, -- 0xc3, 0x19, 0x1c, 0x2a, 0xdc, 0xda, 0x2a, 0xbd, 0xaf, 0xff, 0x4f, 0x84, -- 0x5b, 0xbb, 0x29, 0x47, 0xc9, 0xcb, 0x29, 0xbd, 0x38, 0xed, 0x4e, 0x72, -- 0x94, 0x52, 0x58, 0xbe, 0xa4, 0x57, 0x0b, 0x58, 0x43, 0x21, 0xbc, 0x44, -- 0xf4, 0x43, 0x33, 0xce, 0x79, 0x1d, 0x69, 0x7c, 0x35, 0x8c, 0x4d, 0xfc, -- 0x46, 0x94, 0x10, 0xb6, 0x8e, 0x38, 0xcc, 0xf5, 0x7e, 0xb2, 0xce, 0xf0, -- 0x21, 0xfc, 0x2f, 0x18, 0xaa, 0x16, 0x42, 0x5b, 0xef, 0xc7, 0x5a, 0xed, -- 0xba, 0xae, 0xfa, 0x3a, 0x6d, 0x9c, 0xb4, 0xc6, 0xb4, 0x29, 0x48, 0x69, -- 0x32, 0x0e, 0x8f, 0x40, 0x0c, 0x31, 0x5e, 0x94, 0xe8, 0x4b, 0x8d, 0xef, -- 0xea, 0xaf, 0x6a, 0xae, 0x99, 0x8d, 0x17, 0x2d, 0x58, 0x27, 0x87, 0xf6, -- 0x88, 0xff, 0xa9, 0x43, 0x0e, 0x0e, 0x80, 0xfe, 0xad, 0x6c, 0xdb, 0x53, -- 0x96, 0xab, 0xbe, 0x3e, 0x3f, 0xdf, 0x3f, 0x3d, 0x6a, 0x2f, 0x35, 0x7d, -- 0x3a, 0x78, 0x67, 0x65, 0xb3, 0x36, 0x8d, 0x52, 0xbc, 0x7f, 0x90, 0x67, -- 0x80, 0xe4, 0x32, 0xbe, 0xfe, 0x39, 0x26, 0x1a, 0x50, 0x97, 0xdf, 0xb1, -- 0xe2, 0xc5, 0xd6, 0xe2, 0x8e, 0x72, 0x4c, 0x0a, 0x6c, 0xa8, 0xa1, 0x2e, -- 0xa5, 0x26, 0xf7, 0x19, 0x78, 0x7c, 0x5e, 0xff, 0x8e, 0x34, 0x35, 0x05, -- 0xd8, 0x7a, 0x5e, 0xd5, 0x03, 0x76, 0x14, 0x75, 0x67, 0x00, 0x40, 0x4d, -- 0xd1, 0xb0, 0x7a, 0xf3, 0x54, 0x05, 0x68, 0xa7, 0xc2, 0x34, 0xa4, 0xa4, -- 0x0c, 0xe2, 0x8f, 0x58, 0xf4, 0x61, 0x4e, 0x34, 0xe8, 0x42, 0xb3, 0xbf, -- 0xcd, 0xb3, 0x3b, 0xbf, 0x56, 0x21, 0x32, 0x8c, 0x79, 0x4f, 0x91, 0x37, -- 0xee, 0x72, 0x53, 0x05, 0x7c, 0xb5, 0xea, 0x40, 0xda, 0x9b, 0xa5, 0xe3, -- 0x6b, 0x12, 0xd8, 0x06, 0x88, 0x62, 0x4c, 0x42, 0xf8, 0x10, 0xc4, 0x4c, -- 0xb6, 0x07, 0xca, 0xc9, 0x66, 0x1a, 0x1b, 0xd5, 0x59, 0x62, 0xcd, 0x3f, -- 0xc8, 0x43, 0x74, 0xa1, 0x58, 0x42, 0xa5, 0x2e, 0x87, 0x14, 0x6a, 0x61, -- 0x51, 0x3a, 0x5c, 0x40, 0x1f, 0xe7, 0xd7, 0xe1, 0xaa, 0x4a, 0x14, 0xf6, -- 0xaf, 0x61, 0x43, 0x52, 0x34, 0x98, 0x34, 0x79, 0x77, 0x7c, 0xee, 0x73, -- 0x28, 0x6a, 0xc5, 0xd0, 0x17, 0x9c, 0xd9, 0x55, 0xae, 0x86, 0x30, 0x9c, -- 0xe8, 0xf8, 0xa8, 0xa3, 0x5a, 0x25, 0x2b, 0xe1, 0x7b, 0xa4, 0xc8, 0xce, -- 0xc2, 0x3a, 0xda, 0x95, 0xd6, 0x66, 0x40, 0x8e, 0x93, 0xf8, 0x8e, 0xcd, -- 0xe6, 0xc6, 0xba, 0x8a, 0x47, 0xf0, 0x89, 0x96, 0x98, 0x87, 0xf8, 0x17, -- 0xb1, 0x5c, 0x6a, 0xa0, 0x86, 0x3a, 0x7a, 0x19, 0xe8, 0x66, 0x10, 0xa4, -- 0xb5, 0x0a, 0xa7, 0x00, 0xec, 0x4a, 0x3e, 0x66, 0x75, 0xfa, 0x26, 0x8e, -- 0x9a, 0xd8, 0x38, 0x3d, 0x39, 0x7d, 0xe2, 0xb2, 0x7f, 0x35, 0x0b, 0xb9, -- 0xe1, 0x58, 0x1c, 0x27, 0x2c, 0x17, 0x29, 0xce, 0x11, 0x3f, 0xdd, 0x20, -- 0xae, 0xae, 0x02, 0x57, 0x40, 0xe5, 0x3f, 0x8a, 0xd6, 0x51, 0x5d, 0x03, -- 0xcd, 0x3a, 0x16, 0x9c, 0x0f, 0x19, 0xa4, 0xeb, 0x75, 0x20, 0x49, 0x98, -- 0x57, 0xdf, 0x91, 0xa2, 0x86, 0x76, 0x83, 0x0e, 0x85, 0x0c, 0xfd, 0x49, -- 0x0d, 0x46, 0x4d, 0xa7, 0x2d, 0x3a, 0xd6, 0x5c, 0x79, 0x3a, 0x9f, 0x48, -- 0x56, 0x72, 0xd5, 0x4c, 0x4b, 0x96, 0x18, 0x7b, 0x14, 0x88, 0x60, 0xe7, -- 0x2d, 0x00, 0xbc, 0x56, 0xec, 0xa4, 0x58, 0x08, 0x10, 0x04, 0xe9, 0x82, -- 0x43, 0x7f, 0x10, 0x37, 0x95, 0x04, 0x68, 0xfa, 0xb4, 0xf7, 0xfe, 0xa3, -- 0xd0, 0xe7, 0x41, 0xe1, 0x2a, 0x49, 0xe3, 0x21, 0x2d, 0x97, 0x44, 0x37, -- 0xb7, 0x76, 0xba, 0x56, 0xea, 0xfb, 0xd1, 0x69, 0xb3, 0xe3, 0x87, 0x7e, -- 0xe9, 0xaa, 0x00, 0xcd, 0x7b, 0xb5, 0x4e, 0xac, 0x67, 0x9e, 0xd3, 0x58, -- 0x12, 0xb9, 0x00, 0x2e, 0x39, 0x42, 0x4d, 0xfd, 0x42, 0x88, 0x4c, 0xa0, -- 0xe9, 0x71, 0xf2, 0x3b, 0x47, 0xe8, 0xf0, 0x92, 0xf0, 0x9a, 0x74, 0x1d, -- 0xe5, 0x9b, 0x4c, 0xad, 0x69, 0x12, 0x8b, 0xd9, 0xcc, 0xc1, 0xd9, 0x69, -- 0x24, 0x9a, 0x37, 0xea, 0x43, 0x74, 0xc6, 0x00, 0xa0, 0x82, 0xc0, 0xa6, -- 0x07, 0xe5, 0x76, 0xe5, 0xe4, 0xad, 0x1a, 0x87, 0x06, 0x6a, 0x6b, 0x6f, -- 0x48, 0xdd, 0xbb, 0xe2, 0x98, 0xf1, 0x36, 0x51, 0x48, 0x6c, 0x3d, 0x80, -- 0x2d, 0x0d, 0x45, 0xa8, 0x4e, 0x5c, 0x69, 0x8a, 0x0d, 0x16, 0xbb, 0xc7, -- 0x61, 0xc0, 0x57, 0xbb, 0x40, 0x44, 0x07, 0x06, 0x03, 0x07, 0x01, 0x3c, -- 0xf9, 0xe1, 0x87, 0xe0, 0xd8, 0xb1, 0xaf, 0x6e, 0xb3, 0xdf, 0x60, 0xe8, -- 0xad, 0x62, 0xc0, 0x74, 0x15, 0x77, 0xf1, 0x04, 0xa3, 0x01, 0x25, 0x2e, -- 0xf6, 0xc7, 0x42, 0x5d, 0x1e, 0xba, 0x08, 0xda, 0xba, 0xb8, 0xca, 0xb0, -- 0x15, 0x42, 0x39, 0x61, 0x3c, 0x48, 0x7c, 0x4b, 0xfb, 0xc0, 0x8a, 0xbe, -- 0x8b, 0x03, 0x14, 0xff, 0x33, 0xe2, 0x54, 0xc2, 0xa5, 0xaa, 0xdc, 0x75, -- 0x42, 0xd2, 0xc1, 0xdd, 0x7c, 0xd8, 0x55, 0xd1, 0x23, 0x46, 0xf5, 0x92, -- 0x68, 0x68, 0xcc, 0x48, 0x0a, 0x9b, 0xa0, 0x14, 0x09, 0xdb, 0xe0, 0x82, -- 0x3a, 0xaa, 0x0e, 0x36, 0x38, 0x8a, 0x24, 0x10, 0x9b, 0x3f, 0x42, 0x06, -- 0x04, 0x04, 0x97, 0xd3, 0x51, 0x84, 0x07, 0x25, 0x35, 0xfc, 0x66, 0xe6, -- 0x1a, 0x0c, 0x77, 0x8b, 0x1f, 0xef, 0xb0, 0x46, 0xdc, 0xa1, 0xec, 0x46, -- 0x60, 0xa3, 0x44, 0xf4, 0x80, 0xe6, 0x38, 0x08, 0xe9, 0xff, 0xd9, 0x17, -- 0xd2, 0x74, 0x75, 0x34, 0x13, 0x25, 0xbd, 0x28, 0x7a, 0x8f, 0x7d, 0xfd, -- 0x75, 0xb9, 0xc4, 0x0a, 0xf1, 0x86, 0x70, 0xb2, 0x38, 0x9b, 0xdc, 0x0d, -- 0xd4, 0x86, 0x25, 0x4d, 0x8b, 0x94, 0x00, 0x6a, 0xbc, 0x04, 0xe9, 0xce, -- 0x80, 0xdf, 0x11, 0x79, 0x82, 0x6d, 0x5e, 0x62, 0x2c, 0x83, 0xb1, 0xad, -- 0xe9, 0x6b, 0x1c, 0x0c, 0x66, 0xe9, 0xc7, 0x01, 0x1e, 0xab, 0x22, 0xf8, -- 0xe2, 0xc8, 0xba, 0x28, 0x2d, 0x54, 0xe1, 0x82, 0x99, 0x1e, 0xe9, 0x82, -- 0xc0, 0x35, 0x8c, 0x8f, 0x29, 0x88, 0xef, 0x86, 0xaf, 0x0f, 0x2f, 0xda, -- 0x47, 0x0b, 0xb9, 0x30, 0xaa, 0x94, 0x23, 0xfc, 0x9a, 0x0b, 0x63, 0xbc, -- 0xbf, 0xd8, 0xf4, 0xa5, 0x2b, 0x84, 0x4a, 0x03, 0xeb, 0xa0, 0xb5, 0xde, -- 0x01, 0xe1, 0x27, 0x01, 0xcf, 0xca, 0x60, 0x81, 0xd1, 0xe7, 0x0e, 0x04, -- 0x17, 0xdc, 0x79, 0xb2, 0xbd, 0xd3, 0xa7, 0x1f, 0xbb, 0xb0, 0x6f, 0x3d, -- 0xd9, 0x7e, 0xe2, 0x6c, 0xf6, 0xf6, 0x54, 0x64, 0xb6, 0x47, 0xfa, 0x55, -- 0x5a, 0x35, 0xeb, 0x72, 0x3c, 0xf9, 0xf8, 0x11, 0x5f, 0x35, 0xe3, 0xcf, -- 0x06, 0x2e, 0xf4, 0x73, 0x95, 0x8f, 0xc2, 0x06, 0xee, 0x57, 0x1c, 0x86, -- 0xaa, 0xe5, 0x5c, 0x02, 0x6c, 0xd8, 0xcc, 0x80, 0x98, 0xea, 0x50, 0x3a, -- 0xb7, 0x82, 0x41, 0x9d, 0x40, 0xd9, 0xfb, 0x52, 0xbe, 0x26, 0x3c, 0xe4, -- 0x4c, 0xa8, 0x73, 0x0e, 0xe2, 0x9f, 0x48, 0x34, 0xbf, 0xe6, 0xa9, 0x6a, -- 0x5a, 0xa3, 0x7a, 0xe2, 0xf0, 0x7b, 0x07, 0x20, 0x3d, 0x22, 0x3d, 0x00, -- 0x48, 0x66, 0x85, 0x8a, 0x06, 0x32, 0xd6, 0x83, 0x44, 0x5d, 0xb7, 0x58, -- 0x11, 0x73, 0x35, 0x6a, 0xe8, 0xbb, 0x68, 0x50, 0xdd, 0x68, 0x1a, 0xe6, -- 0xd0, 0x23, 0xd1, 0x7a, 0x2a, 0xf0, 0x2f, 0x72, 0x47, 0x89, 0x44, 0x2a, -- 0xc3, 0x92, 0x38, 0x50, 0x1f, 0x18, 0xc4, 0xef, 0xfd, 0xe1, 0xbf, 0x28, -- 0x9c, 0x06, 0xf5, 0xb0, 0x93, 0x2e, 0xe0, 0x9a, 0x86, 0xe0, 0xfa, 0x60, -- 0x2a, 0x20, 0xce, 0xd5, 0x00, 0xaa, 0xeb, 0x4b, 0xba, 0x9b, 0xb3, 0xc9, -- 0x4a, 0x47, 0xb2, 0x64, 0xf7, 0xa7, 0x1f, 0xf3, 0xd9, 0x72, 0xe6, 0x73, -- 0xc9, 0x92, 0x04, 0xef, 0xba, 0xba, 0x89, 0x01, 0x2c, 0x6c, 0x27, 0xa8, -- 0xa5, 0xc6, 0x8d, 0xe9, 0x0c, 0x55, 0x5e, 0xe0, 0xb7, 0x11, 0x36, 0x93, -- 0xca, 0x39, 0x67, 0x8e, 0x99, 0x2f, 0x24, 0x44, 0x8b, 0xe3, 0xa3, 0x27, -- 0x22, 0x19, 0xf2, 0xaa, 0xb6, 0x79, 0x88, 0x0d, 0x03, 0xe5, 0x28, 0x25, -- 0xe6, 0x44, 0x02, 0xcf, 0x89, 0x33, 0x72, 0xb0, 0x01, 0x35, 0x71, 0x97, -- 0x4f, 0xea, 0xeb, 0x4e, 0x88, 0x64, 0x5d, 0x47, 0xcc, 0x3b, 0x11, 0x90, -- 0x0b, 0x8e, 0x05, 0xc6, 0x52, 0x21, 0x2e, 0x70, 0x4b, 0x4c, 0x0c, 0x2e, -- 0x9f, 0x9b, 0xe4, 0x97, 0xe5, 0x25, 0x43, 0xea, 0x45, 0xf3, 0xb2, 0x84, -- 0x89, 0xa1, 0x91, 0x2d, 0xb2, 0xb3, 0x6e, 0x04, 0xd5, 0xea, 0x5b, 0xd5, -- 0xba, 0x04, 0x79, 0x08, 0xf7, 0x8e, 0xc4, 0xf0, 0xb3, 0x15, 0x3a, 0xb9, -- 0xc9, 0xa7, 0x91, 0xe6, 0x8d, 0xde, 0x89, 0x94, 0xd7, 0x67, 0x92, 0xeb, -- 0xf4, 0x76, 0x5d, 0xc3, 0x1c, 0x18, 0x1c, 0x2b, 0xd3, 0xa8, 0xc5, 0xbe, -- 0x82, 0xe4, 0xad, 0x5f, 0x49, 0x37, 0x5f, 0xfb, 0x87, 0x5a, 0xcd, 0xf9, -- 0x40, 0x47, 0x33, 0xc5, 0x56, 0x7b, 0xc9, 0xee, 0xf6, 0xf6, 0xb7, 0xc4, -- 0x2f, 0x66, 0x58, 0xe6, 0x9d, 0xaf, 0x3b, 0x57, 0x48, 0x16, 0x08, 0x5b, -- 0xac, 0xf8, 0x14, 0xe9, 0x2d, 0x0c, 0xa6, 0xba, 0x68, 0x52, 0x49, 0x92, -- 0x4b, 0xb6, 0x2f, 0x03, 0x1b, 0x97, 0x2c, 0xfe, 0x8a, 0xad, 0x82, 0x39, -- 0xad, 0x9d, 0x6c, 0x3f, 0x43, 0x6c, 0x3a, 0xef, 0xde, 0x35, 0xfd, 0xc6, -- 0x72, 0x90, 0x6d, 0x2c, 0xfa, 0xe9, 0x48, 0x3e, 0xa6, 0x4b, 0x94, 0x61, -- 0xcc, 0x96, 0x25, 0xd7, 0xcc, 0x43, 0x20, 0x21, 0x30, 0x80, 0x60, 0xe3, -- 0x33, 0xef, 0xc4, 0xbc, 0x10, 0x50, 0x09, 0x08, 0x55, 0x75, 0x63, 0x3a, -- 0x1d, 0x56, 0x27, 0xa6, 0x42, 0xdc, 0x57, 0x16, 0x69, 0x3b, 0xf8, 0x91, -- 0x2f, 0x77, 0x0c, 0x40, 0xce, 0x89, 0xf3, 0x9e, 0x89, 0xea, 0x1d, 0x86, -- 0x90, 0xb5, 0x27, 0xcb, 0x72, 0x88, 0xd6, 0xb2, 0x60, 0x0d, 0x0a, 0x26, -- 0x39, 0xcc, 0x91, 0x41, 0x5b, 0x17, 0x8a, 0x6c, 0xc8, 0x03, 0x91, 0x96, -- 0x61, 0x3e, 0x9c, 0xf2, 0x03, 0x53, 0xd6, 0x0e, 0x8b, 0x28, 0x6e, 0x7e, -- 0xba, 0x80, 0x5d, 0xd2, 0x71, 0xd6, 0x60, 0x50, 0x9c, 0xea, 0x39, 0x06, -- 0x6c, 0x34, 0xa7, 0x10, 0xfc, 0x8e, 0xa6, 0x14, 0x00, 0x9c, 0x09, 0x9e, -- 0xc2, 0x4b, 0x22, 0xe0, 0x2f, 0x7e, 0xe2, 0x2a, 0x72, 0xbf, 0x74, 0xd4, -- 0xcb, 0x4b, 0x35, 0x65, 0x86, 0x8f, 0x92, 0x65, 0xab, 0x94, 0xbe, 0x9c, -- 0x03, 0xda, 0x91, 0xbc, 0x4e, 0xab, 0x5a, 0xe7, 0xab, 0x60, 0x74, 0x01, -- 0xd7, 0x7b, 0x73, 0xf0, 0x46, 0xc5, 0xe8, 0x21, 0x0d, 0xbf, 0xa9, 0xc4, -- 0x02, 0x5b, 0x43, 0x7c, 0xe5, 0xcf, 0x85, 0xc5, 0xc0, 0x45, 0xde, 0xa6, -- 0x9a, 0x71, 0xca, 0x7c, 0xde, 0xc5, 0xea, 0xa0, 0x09, 0x9b, 0xef, 0x68, -- 0x59, 0xdd, 0x33, 0x38, 0x8c, 0x18, 0xc1, 0xab, 0xc2, 0x21, 0xe4, 0x61, -- 0x01, 0x31, 0xfc, 0x38, 0xba, 0x89, 0xf1, 0x4b, 0x24, 0x98, 0xb5, 0x2e, -- 0x48, 0xdd, 0x4b, 0xcb, 0x92, 0xe4, 0x0e, 0xdd, 0x6a, 0xcd, 0x56, 0xa2, -- 0xb1, 0xb3, 0x24, 0x0f, 0xeb, 0x86, 0xb3, 0x6b, 0x53, 0xdb, 0xcb, 0x45, -- 0x47, 0x38, 0x12, 0xa7, 0x2f, 0x46, 0x98, 0x51, 0x8d, 0xdc, 0x60, 0x93, -- 0xa5, 0x4d, 0x76, 0x7a, 0x48, 0x9c, 0x3f, 0x66, 0xbe, 0xd9, 0x94, 0xfe, -- 0x35, 0x3b, 0x4a, 0x6e, 0x43, 0x85, 0x87, 0x36, 0xd3, 0xf9, 0x8a, 0x74, -- 0xd4, 0xe4, 0xcf, 0x1e, 0x06, 0x4d, 0xaa, 0x67, 0x40, 0x44, 0x0c, 0xb4, -- 0x82, 0x8a, 0xdd, 0xf1, 0xac, 0xf6, 0x78, 0xe9, 0xb2, 0xe8, 0xe4, 0xff, -- 0xfc, 0x4c, 0x21, 0x1a, 0x92, 0xa8, 0xc6, 0x75, 0x59, 0x4c, 0x96, 0x63, -- 0xd8, 0x0b, 0x38, 0xf0, 0x8a, 0x4b, 0x5e, 0x8f, 0x04, 0x95, 0xc9, 0x72, -- 0x84, 0xb9, 0x69, 0x27, 0xdc, 0xc5, 0xd9, 0x33, 0xae, 0x64, 0x0d, 0x1e, -- 0xc4, 0x1f, 0x62, 0xe1, 0xe4, 0x9b, 0x83, 0xfd, 0x5a, 0x0e, 0xc0, 0xb3, -- 0x2d, 0x5d, 0xcf, 0x2f, 0x57, 0xa0, 0x10, 0x8b, 0x0f, 0x8d, 0xa5, 0xdb, -- 0x8f, 0xb5, 0x73, 0xbd, 0xa7, 0x52, 0xb9, 0x19, 0x62, 0xd7, 0x57, 0x1c, -- 0xed, 0xd9, 0x6a, 0x2f, 0xc4, 0xd6, 0x45, 0x99, 0x78, 0x96, 0x36, 0x1f, -- 0x74, 0x83, 0xbc, 0xd5, 0xcb, 0x54, 0x78, 0xd6, 0xdc, 0xec, 0xd9, 0xb2, -- 0xaa, 0xc2, 0x8d, 0x0c, 0x33, 0x80, 0xa6, 0x54, 0x4c, 0xb3, 0x24, 0x10, -- 0x23, 0x3a, 0xfc, 0xeb, 0xc4, 0x73, 0x86, 0x01, 0x6c, 0x52, 0x10, 0x58, -- 0xcf, 0x80, 0x30, 0x3c, 0x52, 0x03, 0xc8, 0x1f, 0x71, 0x26, 0x40, 0xf2, -- 0xd7, 0x62, 0xa4, 0xda, 0x0a, 0x4b, 0xdc, 0x5d, 0x48, 0x55, 0x97, 0x08, -- 0x37, 0x26, 0x1e, 0x4b, 0xfc, 0x5d, 0xa2, 0x12, 0x78, 0x40, 0xf3, 0xac, -- 0x66, 0x6e, 0x83, 0x60, 0x64, 0x98, 0x2d, 0x12, 0xad, 0x4f, 0x8c, 0xf8, -- 0x52, 0xe6, 0x01, 0x6c, 0x35, 0x6a, 0x35, 0xf7, 0xd9, 0xf0, 0xc9, 0xee, -- 0x70, 0xbb, 0xa9, 0xb2, 0xa5, 0x63, 0x56, 0x1e, 0xaa, 0xc4, 0xd2, 0x2c, -- 0x90, 0x3d, 0xe4, 0xcb, 0xa2, 0x5b, 0x5c, 0x17, 0xaf, 0xcf, 0x20, 0xf6, -- 0xf6, 0xa9, 0xfc, 0x9c, 0x31, 0x70, 0x58, 0x85, 0x05, 0xa4, 0xf6, 0x96, -- 0x65, 0x3a, 0xbe, 0x37, 0x50, 0x52, 0x1f, 0x68, 0xc4, 0x4d, 0x14, 0x80, -- 0x11, 0x90, 0xa7, 0x23, 0xac, 0xed, 0xb9, 0x1b, 0x04, 0x73, 0xed, 0xbc, -- 0x12, 0x4c, 0x93, 0x56, 0xfd, 0x13, 0x3d, 0xbe, 0x03, 0x6b, 0x6d, 0x85, -- 0x12, 0xf1, 0x0f, 0x64, 0xb9, 0x6c, 0x2e, 0x18, 0x30, 0x9d, 0x25, 0x2f, -- 0x57, 0xd4, 0x27, 0xdd, 0x38, 0x7f, 0x0b, 0x83, 0xa3, 0x93, 0xd3, 0x52, -- 0x83, 0x88, 0x0a, 0xab, 0xc1, 0xe6, 0x55, 0x33, 0xbc, 0xce, 0x07, 0x89, -- 0x74, 0xf0, 0xdb, 0xb6, 0x09, 0x5c, 0x43, 0xcf, 0x37, 0xc4, 0x5a, 0x51, -- 0xdf, 0x6f, 0xba, 0xc8, 0x7c, 0x81, 0x6e, 0x86, 0x00, 0xa0, 0xc6, 0x8a, -- 0xce, 0xa2, 0x60, 0x95, 0x66, 0x2b, 0x97, 0x19, 0x23, 0x74, 0x08, 0x0f, -- 0x51, 0x6f, 0xaa, 0x15, 0xca, 0x6c, 0xcf, 0x2a, 0x34, 0x65, 0x3c, 0x6b, -- 0xd6, 0x70, 0xc5, 0x9a, 0x80, 0x6c, 0x7f, 0xc5, 0x9a, 0x34, 0x97, 0xc4, -- 0x33, 0x2e, 0x91, 0x08, 0x60, 0x41, 0x53, 0xa3, 0x7d, 0x9c, 0x97, 0x5c, -- 0x19, 0x16, 0xee, 0xc3, 0xc3, 0xdc, 0x6e, 0x0f, 0xf3, 0x23, 0x2a, 0xe5, -- 0xc0, 0x5e, 0xf5, 0x12, 0xd2, 0xd7, 0x17, 0x0f, 0x44, 0x1c, 0x99, 0x64, -- 0x8d, 0xc7, 0x37, 0x4c, 0x00, 0xdd, 0x0c, 0xc0, 0x5c, 0xa5, 0x98, 0xbc, -- 0xc2, 0xb1, 0x40, 0x9b, 0xef, 0xba, 0x2b, 0xf1, 0xa8, 0xb7, 0x3c, 0xe4, -- 0xcd, 0x9c, 0x17, 0xd0, 0x25, 0x8e, 0x59, 0xbf, 0x09, 0xc8, 0xb0, 0xa2, -- 0xc2, 0x3b, 0xc2, 0xd3, 0x21, 0xbd, 0x84, 0xba, 0x20, 0x80, 0xd3, 0x61, -- 0x1e, 0xc9, 0x3e, 0x22, 0xf8, 0x87, 0xb4, 0xa6, 0xe7, 0x4f, 0x62, 0x73, -- 0xdc, 0xc9, 0xc5, 0xe1, 0x1e, 0xc4, 0x48, 0x9f, 0x75, 0x61, 0x3a, 0xb3, -- 0x04, 0xeb, 0x70, 0xa2, 0x24, 0x43, 0x08, 0x30, 0xc0, 0x60, 0x38, 0x3b, -- 0x51, 0xe2, 0x3a, 0x70, 0x25, 0x90, 0x12, 0x28, 0xe6, 0xd8, 0x7a, 0x25, -- 0xc6, 0x8f, 0x95, 0x0a, 0xf5, 0xda, 0x5b, 0x57, 0x31, 0xb6, 0x4b, 0xc9, -- 0xd4, 0x43, 0xf2, 0x9b, 0x90, 0x67, 0xb4, 0x50, 0xaa, 0x66, 0x41, 0xcc, -- 0x72, 0x56, 0x50, 0x2e, 0xe0, 0x98, 0x95, 0x91, 0x5f, 0x16, 0xc0, 0xc6, -- 0x6c, 0x3f, 0x46, 0xee, 0xcb, 0x85, 0x61, 0xbc, 0x5c, 0xb6, 0x72, 0xd3, -- 0x40, 0xbc, 0xe5, 0x78, 0x51, 0x3f, 0x46, 0xbc, 0xe7, 0x2e, 0xfe, 0xab, -- 0x49, 0xba, 0x7d, 0x8f, 0x56, 0x2a, 0x17, 0xa9, 0x04, 0xe9, 0xc0, 0x5a, -- 0xdd, 0x55, 0xe5, 0x4f, 0x2c, 0xc7, 0x6a, 0xdc, 0x15, 0xcb, 0x31, 0xa8, -- 0xdd, 0x46, 0x67, 0x11, 0x79, 0xe3, 0x7c, 0x91, 0x07, 0x58, 0x86, 0x2e, -- 0xfc, 0x2c, 0xf2, 0x7c, 0x4e, 0xd9, 0x42, 0x8b, 0x26, 0xdc, 0x61, 0x2a, -- 0x7c, 0x5e, 0xa8, 0xb4, 0x5d, 0x0c, 0x1f, 0x38, 0x1a, 0xe1, 0xc0, 0xc2, -- 0x71, 0xcd, 0x13, 0xd7, 0xa2, 0x14, 0x07, 0x31, 0x06, 0x94, 0x6c, 0x7c, -- 0x77, 0xf6, 0xe6, 0x47, 0x07, 0x5f, 0xb4, 0xd9, 0x59, 0x61, 0xc3, 0xcf, -- 0x20, 0x2c, 0xa0, 0xec, 0x2e, 0x00, 0xbd, 0x11, 0x1a, 0x6b, 0xe7, 0xff, -- 0x88, 0x89, 0x6d, 0x52, 0x20, 0xda, 0x60, 0x83, 0x6b, 0x17, 0x72, 0x21, -- 0x55, 0x95, 0xda, 0x9e, 0x0c, 0x9f, 0xc1, 0x2c, 0xfe, 0xe6, 0xe0, 0xd9, -- 0x93, 0xdd, 0x9d, 0xcd, 0x56, 0xe1, 0xf7, 0xa7, 0x9f, 0x32, 0xcd, 0xe6, -- 0x96, 0x65, 0x1f, 0x17, 0x4c, 0x30, 0x1b, 0x87, 0x3f, 0x9c, 0xbe, 0x0b, -- 0x26, 0xe8, 0xf6, 0x24, 0x4e, 0x66, 0x9e, 0xb7, 0x00, 0x14, 0xfd, 0x1c, -- 0xbd, 0xe1, 0x25, 0xa2, 0x0a, 0x97, 0x4c, 0xdb, 0xce, 0xef, 0x7d, 0x53, -- 0xe6, 0x7c, 0x08, 0x7a, 0xbc, 0x1e, 0xbd, 0x63, 0x12, 0x3f, 0x48, 0xae, -- 0x3c, 0x61, 0xf0, 0x96, 0xac, 0xd7, 0xae, 0x9d, 0xfc, 0x34, 0xe6, 0x6f, -- 0x6a, 0x4c, 0x83, 0x36, 0xd0, 0xa1, 0x07, 0x18, 0x4f, 0xf3, 0x19, 0xeb, -- 0x4e, 0x90, 0x63, 0xf9, 0xd5, 0x19, 0x92, 0x2a, 0x15, 0x44, 0x5d, 0x29, -- 0x4d, 0x92, 0x58, 0x23, 0x30, 0x07, 0x67, 0x42, 0x76, 0x56, 0xd1, 0xd5, -- 0xd0, 0x78, 0x26, 0xf0, 0xf8, 0x12, 0x10, 0x71, 0xcd, 0x20, 0x67, 0x6e, -- 0x73, 0x03, 0xaa, 0x38, 0x51, 0x20, 0x49, 0x47, 0xd5, 0xb2, 0x9c, 0x2c, -- 0x67, 0x34, 0xff, 0xaf, 0xee, 0x2d, 0xe4, 0xa0, 0x6f, 0x25, 0xc0, 0x67, -- 0x52, 0xe1, 0x29, 0xba, 0x21, 0x24, 0x80, 0xf3, 0xd9, 0x76, 0xa3, 0xbd, -- 0x21, 0x56, 0xa1, 0x65, 0xbf, 0x1a, 0xec, 0xb8, 0x9c, 0x75, 0x56, 0xde, -- 0x60, 0x7f, 0x69, 0xfb, 0xc1, 0xba, 0xaa, 0x6e, 0xff, 0x23, 0xa5, 0x8a, -- 0xac, 0x4e, 0x59, 0x70, 0x7b, 0x24, 0x3a, 0xa8, 0x0e, 0x61, 0xe7, 0xc4, -- 0x63, 0x28, 0xa5, 0x1f, 0x51, 0xaf, 0x86, 0xef, 0x7f, 0x65, 0x90, 0x0c, -- 0xf3, 0x11, 0xd3, 0xd6, 0x5b, 0xed, 0xc5, 0xec, 0x54, 0x1b, 0x60, 0x91, -- 0x2e, 0x4f, 0xf1, 0x89, 0x14, 0xa5, 0x48, 0x36, 0x18, 0x1f, 0xf4, 0xd9, -- 0xe7, 0xcf, 0x9e, 0x6e, 0x36, 0x83, 0x08, 0x36, 0x3b, 0x1c, 0x01, 0x58, -- 0xb5, 0x65, 0xe5, 0xf0, 0x08, 0x66, 0x39, 0xca, 0xa7, 0x80, 0xce, 0xd5, -- 0xa3, 0x20, 0x85, 0x28, 0xa0, 0x4a, 0xc1, 0x20, 0xa0, 0x8e, 0xd1, 0xc8, -- 0x1c, 0xc1, 0x7d, 0x69, 0xf5, 0x95, 0x64, 0xc3, 0x32, 0xcd, 0xdd, 0x8d, -- 0xe1, 0x92, 0x51, 0x71, 0x5b, 0xc9, 0xf5, 0xe0, 0xc2, 0xad, 0x37, 0xd9, -- 0x84, 0xd1, 0x65, 0x71, 0x83, 0xa8, 0x18, 0xd4, 0x35, 0x42, 0x05, 0x9f, -- 0x22, 0xb8, 0x88, 0x04, 0x9a, 0xcc, 0xd2, 0x39, 0xe5, 0xae, 0x4b, 0xba, -- 0xa0, 0xc7, 0x16, 0xd3, 0x4c, 0x82, 0xc5, 0xf9, 0xf6, 0x74, 0x0b, 0x29, -- 0x51, 0x83, 0x80, 0x77, 0xe1, 0xfd, 0xb7, 0x16, 0x34, 0xe8, 0xc0, 0xd7, -- 0x11, 0x8a, 0x8c, 0x25, 0xb3, 0x6c, 0x66, 0x50, 0x9f, 0x72, 0xab, 0x17, -- 0xa5, 0x2f, 0xc7, 0x20, 0xea, 0xb8, 0x5c, 0xd1, 0x88, 0x60, 0x5a, 0x55, -- 0x10, 0xc1, 0x57, 0xf3, 0xd4, 0x04, 0xe6, 0xc6, 0xc0, 0x56, 0xc0, 0xaf, -- 0x3b, 0x62, 0x0b, 0x53, 0x0b, 0xd5, 0x24, 0x8e, 0x80, 0x36, 0xfb, 0xdd, -- 0x11, 0x65, 0x5c, 0x94, 0x40, 0x3a, 0x6d, 0x2d, 0xc3, 0x8a, 0xc1, 0x4b, -- 0x5d, 0x02, 0x64, 0x84, 0xae, 0xaa, 0x79, 0x9d, 0x6c, 0x60, 0xbc, 0x5b, -- 0x5b, 0x9b, 0x8f, 0x8e, 0x59, 0x1f, 0x7c, 0x6c, 0x8c, 0xa7, 0x52, 0xbc, -- 0x94, 0x17, 0xd7, 0xec, 0x12, 0x44, 0x77, 0x7e, 0x10, 0xdc, 0x29, 0x6f, -- 0x98, 0x80, 0x41, 0x4a, 0x50, 0x93, 0x8b, 0x09, 0xbd, 0x8b, 0xd0, 0x3e, -- 0xdc, 0x3a, 0xcb, 0xec, 0x9a, 0x13, 0x57, 0xc1, 0x55, 0x12, 0x55, 0x95, -- 0x27, 0x58, 0xa8, 0x36, 0x5b, 0x1f, 0xa7, 0x51, 0x6d, 0x9d, 0x79, 0x0b, -- 0x5f, 0x3e, 0x98, 0x9f, 0xd8, 0xca, 0xbd, 0x83, 0x4b, 0x8e, 0x85, 0xe0, -- 0xb5, 0x98, 0x23, 0x2c, 0x66, 0xc5, 0xf6, 0x74, 0xab, 0xd8, 0x52, 0x8c, -- 0xd4, 0x22, 0x0f, 0xf2, 0xe1, 0x71, 0x20, 0x19, 0xf9, 0xbc, 0x4b, 0x6a, -- 0xf5, 0xfe, 0x74, 0x69, 0x93, 0x94, 0xb4, 0x1b, 0x3f, 0x6f, 0xc1, 0x5c, -- 0xb2, 0x64, 0x15, 0x0f, 0x89, 0x80, 0x34, 0x88, 0xee, 0xac, 0x6a, 0x47, -- 0xdd, 0x58, 0x33, 0xab, 0x24, 0x84, 0x4f, 0x1b, 0xcb, 0xd9, 0x97, 0x43, -- 0x8a, 0x40, 0xdb, 0x2e, 0x21, 0x18, 0xc8, 0xd6, 0x0f, 0x8a, 0xfd, 0x9f, -- 0xb1, 0x56, 0x4b, 0xc3, 0x8a, 0x8b, 0x6d, 0x4f, 0xf3, 0x91, 0x5b, 0x68, -- 0x0d, 0x9b, 0x19, 0x06, 0x37, 0xe8, 0x9c, 0x8d, 0x04, 0xa4, 0x4b, 0x97, -- 0xe3, 0xc8, 0x2e, 0x80, 0x84, 0x36, 0xc9, 0x2c, 0xa8, 0xa4, 0x00, 0x37, -- 0x2f, 0xd2, 0x10, 0x0f, 0x53, 0xf7, 0x1f, 0xf4, 0x97, 0xc2, 0x45, 0x42, -- 0x6f, 0x86, 0x87, 0xa2, 0x23, 0xe2, 0x75, 0xbd, 0x72, 0x21, 0xba, 0x1a, -- 0xb0, 0xc1, 0x4c, 0x12, 0x20, 0x71, 0x4e, 0x02, 0x4a, 0xbc, 0xef, 0xce, -- 0x01, 0x12, 0xdf, 0x2f, 0xa2, 0xd8, 0xb7, 0xb1, 0x0b, 0x3c, 0x91, 0xf0, -- 0x76, 0xe4, 0x60, 0x4b, 0xec, 0xb7, 0x77, 0xa2, 0xba, 0xa2, 0xf4, 0xa1, -- 0x13, 0x49, 0x0a, 0xea, 0x74, 0x8c, 0xae, 0xa5, 0x71, 0x8a, 0xef, 0x10, -- 0x73, 0xdc, 0xa0, 0x5b, 0x81, 0xb9, 0x79, 0xbd, 0xd8, 0xd8, 0xd9, 0x44, -- 0x77, 0x56, 0x5b, 0xc0, 0x70, 0x4d, 0x3a, 0x33, 0x9f, 0x2c, 0xd2, 0x84, -- 0xcb, 0x09, 0x1a, 0x16, 0x29, 0x33, 0x3e, 0x60, 0x0a, 0x23, 0x8a, 0xf4, -- 0x52, 0xce, 0x83, 0x50, 0x87, 0x86, 0xad, 0xb0, 0x0b, 0xa2, 0x83, 0x38, -- 0x05, 0x37, 0x65, 0xc1, 0xa1, 0xce, 0x95, 0x54, 0x79, 0xda, 0xc8, 0x9d, -- 0x9c, 0x2c, 0xd7, 0x83, 0x95, 0x3e, 0xa4, 0xd5, 0x9b, 0x4e, 0x06, 0x48, -- 0x65, 0xba, 0x2a, 0x8b, 0x18, 0xcb, 0x8e, 0xd3, 0x44, 0xf4, 0x06, 0x11, -- 0x07, 0x44, 0x67, 0xb9, 0xc9, 0x1e, 0x47, 0xe5, 0xf7, 0xdc, 0x0d, 0x1f, -- 0xc4, 0xfe, 0xb7, 0xcd, 0xc2, 0x8d, 0x2d, 0x8d, 0xc8, 0x74, 0x3f, 0xf9, -- 0xdb, 0x32, 0x27, 0xb2, 0xe6, 0xbd, 0x45, 0x70, 0x15, 0x42, 0xbc, 0x33, -- 0xe7, 0x90, 0x24, 0xee, 0xc1, 0x2e, 0x57, 0x68, 0x5e, 0x30, 0x47, 0x42, -- 0xa7, 0x37, 0x2a, 0xeb, 0x28, 0xab, 0x09, 0x5b, 0xa1, 0x09, 0x04, 0x80, -- 0xb1, 0x2c, 0x54, 0xdc, 0x44, 0x54, 0x91, 0xb8, 0x99, 0x45, 0x72, 0x66, -- 0xd6, 0x2e, 0x54, 0xb0, 0xaa, 0xb8, 0xc2, 0xfa, 0xec, 0x9e, 0x2f, 0xb2, -- 0xf5, 0x66, 0x95, 0x85, 0xf5, 0x8a, 0xed, 0x39, 0xf5, 0xba, 0xad, 0x6f, -- 0x2b, 0xa5, 0x24, 0x86, 0x4b, 0x5f, 0xd1, 0xb5, 0x90, 0xb6, 0x74, 0xe1, -- 0x5b, 0x97, 0xc6, 0xfd, 0x11, 0x7c, 0xd7, 0x97, 0xb0, 0xd7, 0xd1, 0x92, -- 0x5d, 0xdf, 0xad, 0xa6, 0x5f, 0x0b, 0xb7, 0x16, 0xa9, 0x40, 0x9e, 0xd0, -- 0x22, 0x50, 0x1e, 0xe3, 0x81, 0xd1, 0x3f, 0xb2, 0x74, 0x36, 0xe4, 0x52, -- 0x6a, 0x8a, 0xa0, 0x86, 0xfa, 0x8d, 0x55, 0x2c, 0xd4, 0x2d, 0xa5, 0xa6, -- 0x73, 0xbf, 0x09, 0x90, 0xdb, 0x0a, 0x95, 0x92, 0x6e, 0x38, 0xff, 0x30, -- 0x6c, 0xbe, 0xcb, 0xfd, 0x88, 0xd7, 0x5d, 0xae, 0xb9, 0x6a, 0xbe, 0x56, -- 0xfe, 0x5c, 0x50, 0x5e, 0xa4, 0x09, 0x07, 0x4d, 0xcd, 0xd0, 0x60, 0xd7, -- 0xcb, 0xf9, 0x0d, 0x0d, 0x21, 0x8e, 0xcd, 0x34, 0x1b, 0x75, 0xce, 0x67, -- 0x9b, 0x08, 0x44, 0x41, 0x8b, 0x5c, 0xa5, 0x72, 0xb4, 0xc0, 0x00, 0x33, -- 0xb7, 0x10, 0x4b, 0x22, 0xa8, 0xff, 0xae, 0xd1, 0xe9, 0x75, 0x27, 0xa3, -- 0x72, 0x0b, 0xd8, 0x9d, 0x04, 0xa5, 0x06, 0x19, 0x8f, 0x83, 0x3e, 0xcf, -- 0xae, 0x10, 0x25, 0x12, 0xa4, 0x43, 0x7a, 0x24, 0x08, 0x28, 0x0a, 0x56, -- 0x16, 0x27, 0x3a, 0xb2, 0xcb, 0x4a, 0x6a, 0x13, 0xe9, 0xb6, 0x26, 0x28, -- 0xb6, 0xed, 0x51, 0xbe, 0x3a, 0x46, 0xa2, 0x7c, 0x78, 0xd0, 0x51, 0x25, -- 0xeb, 0xa2, 0x8d, 0x66, 0x56, 0x85, 0x38, 0x8f, 0x78, 0xad, 0xdf, 0x40, -- 0x7a, 0x14, 0xc4, 0x30, 0x89, 0x1f, 0x5e, 0x51, 0x64, 0x7d, 0x83, 0x74, -- 0x8c, 0x62, 0xba, 0x94, 0xf2, 0x2c, 0x6c, 0x14, 0xe3, 0x58, 0xf2, 0x4d, -- 0x3b, 0x4d, 0x72, 0xfe, 0x9c, 0xdb, 0xd9, 0x98, 0x58, 0x27, 0xf8, 0x1e, -- 0xdc, 0xac, 0x61, 0x85, 0x20, 0x09, 0x58, 0x33, 0xed, 0x9d, 0x95, 0x80, -- 0xa0, 0xb9, 0x05, 0xa2, 0xe1, 0x6e, 0x0b, 0x63, 0xb3, 0x91, 0x05, 0xc9, -- 0x94, 0x89, 0x70, 0x3d, 0x2c, 0x0e, 0x1d, 0xa2, 0x81, 0xaf, 0x7d, 0x12, -- 0xc2, 0x7f, 0x43, 0xe1, 0xe0, 0xce, 0x1e, 0x74, 0x43, 0x3f, 0x10, 0x9f, -- 0xd4, 0xb9, 0xd6, 0xbe, 0xd8, 0x2d, 0x7c, 0xfe, 0x2a, 0xf6, 0xeb, 0xd0, -- 0x54, 0x5a, 0xbf, 0xc7, 0xa8, 0x66, 0x4b, 0xb6, 0x13, 0x47, 0xa1, 0x98, -- 0xb4, 0x2b, 0xd3, 0xa5, 0xa0, 0xe8, 0xb2, 0xcf, 0xd1, 0x8b, 0xe8, 0xe9, -- 0x88, 0x37, 0x67, 0x74, 0xef, 0xe6, 0x69, 0x29, 0xb6, 0xc8, 0x85, 0x35, -- 0x7d, 0x3a, 0x26, 0x0f, 0x7b, 0xac, 0xd5, 0xcf, 0x77, 0xca, 0x5b, 0x23, -- 0xb2, 0x10, 0x3b, 0x76, 0x08, 0x08, 0x70, 0xa3, 0xec, 0xc4, 0x98, 0xec, -- 0xb2, 0xc3, 0x66, 0xea, 0x06, 0x63, 0xe2, 0x3a, 0xdb, 0x04, 0x52, 0x2b, -- 0x9a, 0x2b, 0x96, 0x68, 0x79, 0xdd, 0xc2, 0xe2, 0x8b, 0x66, 0x16, 0xc6, -- 0xdc, 0x02, 0x6d, 0x57, 0x61, 0xd2, 0x69, 0x61, 0xbb, 0xa4, 0x11, 0x95, -- 0x1b, 0x5d, 0xc2, 0x7c, 0x41, 0x35, 0x9e, 0x88, 0x94, 0x0a, 0x20, 0xe4, -- 0x71, 0xfc, 0x08, 0x6d, 0x12, 0xc9, 0x80, 0x82, 0x41, 0xf9, 0x36, 0x1f, -- 0x97, 0x45, 0x55, 0x5c, 0x8a, 0xd9, 0xd0, 0x2e, 0x31, 0x91, 0x4c, 0xf2, -- 0x12, 0x48, 0x77, 0x29, 0xe7, 0x51, 0xc5, 0x72, 0x85, 0xea, 0xcc, 0xbc, -- 0x57, 0x88, 0x73, 0x5d, 0x94, 0xf9, 0x4c, 0x39, 0x12, 0xfb, 0x8b, 0x6b, -- 0x71, 0x97, 0xa7, 0xae, 0xa0, 0x3d, 0xe4, 0x01, 0x0b, 0xdc, 0x7e, 0xf6, -- 0x70, 0x28, 0x15, 0x6f, 0x85, 0x54, 0xad, 0x77, 0x3e, 0xde, 0x89, 0x96, -- 0x0c, 0x96, 0x38, 0x34, 0xb5, 0x47, 0xdb, 0x6b, 0xdd, 0xa3, 0xb3, 0x08, -- 0x16, 0x14, 0xca, 0x80, 0x6b, 0x39, 0xac, 0x0b, 0xcf, 0x41, 0x8e, 0x47, -- 0x87, 0x17, 0x6f, 0x92, 0x49, 0x49, 0x8a, 0x9e, 0xfc, 0x1c, 0x90, 0x28, -- 0xfb, 0xf7, 0x34, 0xc2, 0xa4, 0xab, 0x16, 0xbc, 0x49, 0x03, 0x56, 0x89, -- 0x06, 0xdb, 0x4f, 0x87, 0xf5, 0xc7, 0xce, 0x78, 0x65, 0x17, 0x55, 0x01, -- 0x0e, 0x06, 0x5e, 0xea, 0xb7, 0x4b, 0x01, 0xbb, 0x4a, 0x44, 0xee, 0x7f, -- 0xbc, 0x8f, 0x60, 0x7b, 0xbb, 0xc0, 0xe9, 0x85, 0x2d, 0xe2, 0x79, 0x4f, -- 0x25, 0x9f, 0x1a, 0xfc, 0xdd, 0x19, 0xfb, 0x2d, 0xe1, 0xde, 0xcd, 0x80, -- 0xee, 0xb8, 0x8e, 0xe9, 0xc3, 0xe1, 0xdd, 0x16, 0xce, 0x8d, 0x05, 0x84, -- 0x86, 0x22, 0xf3, 0xd2, 0xaf, 0x3a, 0x6a, 0xdf, 0x22, 0x24, 0xb1, 0x41, -- 0x9b, 0xdd, 0x91, 0x5c, 0x71, 0x0d, 0x05, 0x41, 0x62, 0x43, 0x08, 0x3f, -- 0xe8, 0xc0, 0x38, 0x75, 0x4a, 0x92, 0x3e, 0xbb, 0x4a, 0x97, 0x06, 0x70, -- 0xb6, 0xb2, 0x3e, 0x33, 0xf0, 0xa0, 0x0d, 0xa4, 0xba, 0x45, 0x65, 0xb0, -- 0x84, 0xbb, 0xda, 0xcd, 0x6c, 0x04, 0x53, 0xbf, 0x6a, 0xdb, 0x8c, 0xba, -- 0x3e, 0x20, 0x86, 0xbd, 0xb7, 0x2e, 0x74, 0x9e, 0xcd, 0xb9, 0xe2, 0xa7, -- 0x50, 0xb7, 0x8f, 0xe1, 0x8e, 0xc4, 0x72, 0x8f, 0x6a, 0x32, 0x58, 0x76, -- 0x8f, 0x8e, 0x78, 0x21, 0xcb, 0xb1, 0xe2, 0x36, 0xd3, 0xf2, 0xe8, 0xc3, -- 0x7f, 0x46, 0x75, 0x87, 0x90, 0xf9, 0x04, 0x49, 0x44, 0x0f, 0x09, 0x54, -- 0xca, 0xce, 0x7d, 0xc2, 0x91, 0x3a, 0x90, 0x5c, 0xdc, 0xef, 0xc5, 0xc1, -- 0x69, 0xe0, 0x2f, 0xef, 0xc7, 0xf6, 0xa5, 0xd1, 0xbd, 0xcf, 0xc5, 0x45, -- 0x12, 0xe4, 0xdc, 0xb5, 0x3e, 0xfb, 0x27, 0x0a, 0x19, 0x7e, 0x06, 0x81, -- 0x9c, 0xe1, 0x3e, 0x6c, 0x2d, 0x8d, 0x62, 0xf6, 0xe4, 0x93, 0xee, 0xda, -- 0xda, 0xba, 0x42, 0x56, 0x97, 0x41, 0xd7, 0x88, 0xf1, 0x56, 0x0c, 0x1b, -- 0xe9, 0xe8, 0x35, 0x8d, 0x86, 0x45, 0x5e, 0xd6, 0xf5, 0xbd, 0x7d, 0x32, -- 0x16, 0xd5, 0xbd, 0xfb, 0x01, 0x57, 0x24, 0x4a, 0x08, 0x07, 0xf5, 0xa5, -- 0x19, 0x58, 0x2d, 0x44, 0x0c, 0x95, 0x48, 0x22, 0x03, 0xe6, 0xea, 0xc6, -- 0x4d, 0x65, 0xc7, 0x4a, 0xa9, 0x05, 0x37, 0xaf, 0x97, 0xa5, 0xa4, 0x8e, -- 0x2b, 0xf0, 0x8b, 0x82, 0xfe, 0x96, 0x19, 0x8f, 0xb9, 0x39, 0xe0, 0xaa, -- 0x83, 0x15, 0x21, 0x5d, 0x2f, 0x9b, 0x69, 0xe8, 0xf9, 0xa8, 0x2c, 0x6e, -- 0xe8, 0xb4, 0xf2, 0x6b, 0xd0, 0x50, 0x78, 0xf5, 0xe5, 0x36, 0x30, 0x2d, -- 0x9e, 0xee, 0x6e, 0xc1, 0x4a, 0xec, 0xc0, 0x46, 0x75, 0xf5, 0x0f, 0x34, -- 0x79, 0xcb, 0x8b, 0x9d, 0x82, 0x50, 0x8d, 0xfc, 0x6a, 0x63, 0x97, 0x70, -- 0x56, 0x70, 0x29, 0x5e, 0x1f, 0x18, 0x17, 0xbb, 0x82, 0x15, 0x59, 0xfc, -- 0x9f, 0x47, 0x43, 0x8e, 0x2c, 0x42, 0x1a, 0xea, 0xd8, 0xf2, 0x06, 0x31, -- 0x09, 0xdb, 0x7f, 0x49, 0x54, 0x25, 0x0c, 0x9d, 0x8d, 0xa0, 0x6d, 0x2b, -- 0x3c, 0x40, 0xfa, 0x07, 0x01, 0x34, 0x09, 0x3c, 0x02, 0xa2, 0xf9, 0x71, -- 0x00, 0x87, 0xc4, 0x3b, 0x4c, 0x7c, 0x55, 0x91, 0x54, 0x6e, 0x13, 0x58, -- 0x34, 0x62, 0x81, 0x8e, 0xc5, 0x5f, 0x27, 0x1e, 0x89, 0x0a, 0x0b, 0x3e, -- 0xc1, 0xdb, 0x03, 0x50, 0xaa, 0x3c, 0x28, 0x4c, 0xf5, 0xaf, 0x21, 0xec, -- 0x83, 0xf4, 0x14, 0x29, 0x6f, 0x82, 0xb4, 0xed, 0x02, 0x4a, 0x24, 0x9f, -- 0xcc, 0xa5, 0x57, 0x32, 0x32, 0x6b, 0xc8, 0x33, 0x30, 0xb4, 0x61, 0x72, -- 0xc8, 0xd1, 0x21, 0x1d, 0x1a, 0xa5, 0x25, 0xe3, 0x61, 0x8e, 0xb9, 0xe2, -- 0x1d, 0x8a, 0xef, 0x47, 0xf5, 0xf3, 0xd4, 0xfc, 0x3a, 0x06, 0x3c, 0xe3, -- 0x0a, 0x50, 0x76, 0x6a, 0xd7, 0x55, 0xad, 0x00, 0x6c, 0x9a, 0x53, 0xef, -- 0x3e, 0x72, 0x18, 0xdb, 0x6f, 0x7c, 0x7c, 0x6f, 0x5f, 0xac, 0x75, 0xa2, -- 0xf8, 0x76, 0x88, 0xea, 0x18, 0x4d, 0xe2, 0x1f, 0xea, 0x07, 0xbf, 0xef, -- 0x7d, 0xbe, 0x6d, 0x71, 0xab, 0x6c, 0x1e, 0x0d, 0x9f, 0x41, 0xb0, 0x4e, -- 0x87, 0xc2, 0x06, 0x84, 0xb6, 0xa2, 0x76, 0x8f, 0xb6, 0xa1, 0xf1, 0x5f, -- 0x0c, 0x9f, 0x6e, 0x36, 0xe8, 0xa5, 0x9e, 0xce, 0x62, 0x09, 0xf0, 0xdd, -- 0xc5, 0xf1, 0xdb, 0x24, 0x92, 0xfc, 0xc4, 0x36, 0x81, 0xef, 0x9a, 0x5f, -- 0xfd, 0x57, 0x24, 0x40, 0xfa, 0xe2, 0xe8, 0xe8, 0x1c, 0xf2, 0x9f, 0xa6, -- 0xd8, 0x44, 0x31, 0x78, 0x22, 0xf7, 0x81, 0x04, 0x49, 0xf6, 0xcb, 0x6a, -- 0x96, 0x35, 0xcc, 0x7e, 0xca, 0x89, 0xae, 0xfc, 0x52, 0x36, 0xc8, 0xe6, -- 0xa4, 0xda, 0x67, 0xd0, 0x92, 0x19, 0xf2, 0x7c, 0x0a, 0xae, 0xb4, 0xc8, -- 0x8a, 0x0e, 0x1b, 0xba, 0x0c, 0xc0, 0x58, 0x8a, 0xc2, 0x63, 0xf3, 0x5d, -- 0x31, 0x4a, 0x2b, 0x07, 0xf2, 0x93, 0xa3, 0x5c, 0x01, 0x8b, 0x14, 0x6a, -- 0xf8, 0xba, 0xc9, 0x91, 0x4d, 0x1d, 0x65, 0x19, 0x5b, 0x25, 0xbc, 0x10, -- 0x24, 0x18, 0xe8, 0xe7, 0x93, 0xa2, 0x84, 0x43, 0x2a, 0x00, 0x79, 0x65, -- 0x64, 0xf1, 0x25, 0x02, 0x25, 0x79, 0x78, 0xf7, 0x1d, 0xba, 0xd1, 0x75, -- 0x21, 0x41, 0x8a, 0x58, 0x66, 0xe6, 0x4a, 0x92, 0x0d, 0x86, 0x50, 0x7c, -- 0x05, 0x01, 0x05, 0x41, 0x78, 0x56, 0x12, 0x6e, 0x54, 0x57, 0x30, 0xbd, -- 0xab, 0x56, 0xee, 0x72, 0x52, 0xd4, 0xad, 0xf1, 0x3a, 0xbf, 0x5a, 0x05, -- 0xd6, 0x8d, 0x00, 0xaa, 0xb6, 0x8c, 0xc9, 0x23, 0x72, 0xe2, 0xa5, 0xb0, -- 0x99, 0x76, 0x4d, 0x88, 0x0e, 0xd4, 0x85, 0x86, 0x70, 0x49, 0xd4, 0xf6, -- 0x60, 0xc1, 0xcf, 0x87, 0xa5, 0x4a, 0x5c, 0x20, 0x26, 0x52, 0x42, 0x58, -- 0x64, 0x69, 0x31, 0xb2, 0x43, 0x07, 0xb2, 0xe3, 0xea, 0x54, 0x40, 0x9e, -- 0xcd, 0x3f, 0x05, 0xa7, 0xdc, 0x1f, 0xb6, 0x82, 0x85, 0x48, 0x35, 0xbf, -- 0x74, 0x46, 0xb6, 0x7f, 0x2f, 0xf0, 0x35, 0x6a, 0xa0, 0x29, 0xf4, 0xa1, -- 0x30, 0xf1, 0xaa, 0xaa, 0x27, 0x05, 0x43, 0x88, 0x5a, 0x5c, 0x6a, 0x69, -- 0xb7, 0xf7, 0xbf, 0xff, 0x67, 0x9c, 0x85, 0xf2, 0xd3, 0x2f, 0x62, 0xc4, -- 0x13, 0xa0, 0x02, 0x9f, 0xb5, 0x6f, 0xa4, 0x53, 0xf9, 0x2a, 0x04, 0xbc, -- 0x49, 0x8c, 0xc8, 0x23, 0x0e, 0x50, 0x39, 0x42, 0x6d, 0xe1, 0x54, 0xdd, -- 0xb5, 0x7a, 0xf5, 0xea, 0xd8, 0x8c, 0xef, 0x03, 0xd4, 0x35, 0x0d, 0xac, -- 0x95, 0x1e, 0xca, 0x5b, 0x01, 0x7b, 0x27, 0xab, 0xe0, 0x91, 0x0d, 0xd6, -- 0x43, 0x11, 0x73, 0x0d, 0x9e, 0x83, 0x01, 0x15, 0xc4, 0xc3, 0x86, 0xf1, -- 0xf3, 0xcd, 0x82, 0xb0, 0xc5, 0x7c, 0x1e, 0xc3, 0x56, 0xca, 0xde, 0xaa, -- 0x27, 0xe9, 0xdf, 0x69, 0x2f, 0xfa, 0xf5, 0x5d, 0xf1, 0x9f, 0x43, 0x0e, -- 0xfd, 0x03, 0xe3, 0x1d, 0x14, 0x52, 0xed, 0xf7, 0xc3, 0x1f, 0x77, 0x58, -- 0xa9, 0xea, 0xc5, 0x55, 0x7c, 0xb1, 0x02, 0xb6, 0xc5, 0x0e, 0xed, 0x64, -- 0x05, 0x4a, 0x66, 0xb3, 0x3b, 0xee, 0xa5, 0xcf, 0x57, 0xc0, 0x7f, 0x0e, -- 0xf9, 0xe7, 0x4f, 0x3b, 0x83, 0x67, 0xbf, 0xb8, 0x5e, 0xff, 0xb8, 0xf3, -- 0xe1, 0x8f, 0xbb, 0xbd, 0xce, 0xd2, 0xcd, 0x9a, 0x0e, 0xd6, 0x0c, 0x7d, -- 0xab, 0x50, 0x47, 0x51, 0x63, 0x4d, 0x55, 0xaf, 0xf7, 0x7e, 0x72, 0x14, -- 0x89, 0x88, 0x53, 0x18, 0xd8, 0xde, 0xf7, 0x08, 0x42, 0x73, 0x58, 0x4e, -- 0x34, 0xd0, 0x5a, 0xb4, 0xba, 0xa6, 0x98, 0x6b, 0xe0, 0x55, 0x32, 0xc3, -- 0x71, 0x64, 0xa3, 0xe6, 0xd4, 0xc4, 0x64, 0x72, 0x4f, 0xf7, 0x9c, 0x20, -- 0x5a, 0x0e, 0x5d, 0xa0, 0x92, 0x49, 0x8f, 0x4a, 0xb8, 0x8a, 0x85, 0xb4, -- 0xe1, 0x6e, 0x7c, 0x46, 0xee, 0xda, 0xec, 0xb2, 0x01, 0x79, 0xe3, 0x9b, -- 0xa7, 0xf9, 0x91, 0x0a, 0xa5, 0x7c, 0x78, 0x85, 0xd8, 0xfd, 0x01, 0x6a, -- 0xa3, 0x4a, 0x3e, 0x72, 0x7c, 0xd2, 0xd0, 0x0d, 0x28, 0xf5, 0x53, 0xb4, -- 0x92, 0xb5, 0xc3, 0x5a, 0xc6, 0x57, 0x77, 0x19, 0xa4, 0xd7, 0xf6, 0xbd, -- 0xb3, 0x71, 0xe2, 0x74, 0x1d, 0x31, 0x93, 0x05, 0xd8, 0xdb, 0xe1, 0xeb, -- 0x41, 0xe0, 0x41, 0x96, 0x58, 0x61, 0xe6, 0xf1, 0xb2, 0x8e, 0x01, 0x1f, -- 0x86, 0x9b, 0x5d, 0xc1, 0xf4, 0x61, 0x5b, 0x06, 0x2e, 0xa5, 0x51, 0xcf, -- 0x49, 0x25, 0xa5, 0x3d, 0x44, 0x1f, 0x14, 0x4c, 0x4b, 0xe6, 0x45, 0x50, -- 0xf9, 0x3a, 0x64, 0x13, 0x57, 0xb3, 0xb3, 0xef, 0xb0, 0x74, 0xb3, 0x69, -- 0x15, 0xd3, 0xc6, 0x01, 0x3b, 0xd5, 0x18, 0x33, 0xac, 0x46, 0xbe, 0x70, -- 0x3f, 0x0c, 0x12, 0x73, 0xe9, 0x68, 0xe9, 0xad, 0x77, 0x97, 0xd9, 0x19, -- 0xd5, 0x70, 0xf2, 0x55, 0xf9, 0xbe, 0xc3, 0xa6, 0x79, 0xc2, 0x85, 0x78, -- 0xa5, 0xae, 0xae, 0x8e, 0xcf, 0x26, 0x0b, 0xf2, 0x9e, 0xbb, 0x52, 0x18, -- 0x81, 0xbe, 0x0e, 0xf6, 0x24, 0x79, 0x5f, 0xad, 0x11, 0x04, 0x2e, 0x2b, -- 0xc5, 0xf9, 0xe0, 0x67, 0x05, 0xf8, 0xa9, 0x1b, 0xd6, 0x5d, 0xb9, 0x4d, -- 0x0c, 0x4d, 0x7a, 0x39, 0x4d, 0xaf, 0xfe, 0xd0, 0x89, 0x06, 0xaa, 0x9e, -- 0x58, 0xe6, 0x44, 0xc0, 0x01, 0x45, 0xbf, 0x48, 0xdd, 0x0f, 0x9c, 0x88, -- 0x02, 0x14, 0x41, 0xf3, 0xce, 0xa5, 0x50, 0xc2, 0x9f, 0x76, 0xb7, 0x63, -- 0x56, 0xac, 0x39, 0x54, 0x00, 0xcb, 0xb2, 0xb2, 0x28, 0x4c, 0x4f, 0x95, -- 0x11, 0x94, 0x48, 0x94, 0x1e, 0x8b, 0x9d, 0x03, 0xa7, 0xb8, 0xd4, 0x5a, -- 0x35, 0x00, 0x1e, 0xc2, 0x2a, 0x34, 0xd0, 0x61, 0x17, 0x67, 0xf9, 0xad, -- 0x8c, 0xe5, 0x51, 0xce, 0x42, 0xb7, 0x17, 0x5f, 0xf8, 0xbb, 0x83, 0x51, -- 0x46, 0x37, 0x4f, 0x7b, 0x8e, 0x1b, 0x47, 0x6f, 0xf7, 0x4f, 0xfb, 0x9a, -- 0x6c, 0xdc, 0x8c, 0x56, 0xe3, 0xce, 0xbe, 0xc2, 0x3b, 0xc9, 0x05, 0x74, -- 0x3a, 0xa6, 0xed, 0x13, 0xae, 0xad, 0x9c, 0xec, 0x0e, 0xb7, 0x55, 0xf0, -- 0x7b, 0xd0, 0x52, 0x27, 0x76, 0xc7, 0x46, 0x1b, 0x81, 0x0d, 0x91, 0xe4, -- 0xf5, 0xbf, 0x2e, 0xe7, 0x4d, 0xf4, 0xf3, 0x2e, 0x87, 0xa2, 0xaa, 0x61, -- 0x26, 0xe5, 0x2b, 0xda, 0x7c, 0x23, 0x1c, 0x2c, 0x3c, 0xe5, 0x8a, 0x8d, -- 0x56, 0xb2, 0xfd, 0x27, 0x92, 0x32, 0xd0, 0xe0, 0x6a, 0x58, 0xfb, 0xd6, -- 0x60, 0x15, 0x30, 0xc2, 0xec, 0x37, 0x65, 0xa6, 0xce, 0x48, 0x91, 0xdf, -- 0x5c, 0x81, 0x1c, 0xdc, 0xd7, 0x67, 0x6f, 0x0e, 0x5a, 0xcd, 0x3d, 0xff, -- 0xec, 0xd9, 0xf6, 0xef, 0x18, 0xf9, 0xb3, 0xe8, 0x9b, 0x84, 0x56, 0x73, -- 0x5a, 0xc2, 0xb4, 0xcb, 0x66, 0x46, 0x6b, 0x85, 0xf0, 0x45, 0x91, 0xfb, -- 0xac, 0xb3, 0x8d, 0xc1, 0x47, 0xf7, 0x6e, 0x57, 0xe2, 0x2d, 0xfc, 0xfd, -- 0x51, 0xdc, 0xc1, 0x7c, 0x60, 0x4d, 0x41, 0x86, 0xd7, 0x44, 0x55, 0x43, -- 0xdd, 0x95, 0xac, 0x55, 0x0c, 0x84, 0xf9, 0x52, 0x29, 0x56, 0x30, 0xc3, -- 0xda, 0xfd, 0x78, 0xbf, 0xa2, 0x2c, 0x08, 0x6f, 0xda, 0x8c, 0x0e, 0xed, -- 0xd4, 0x92, 0x3b, 0xf3, 0x5a, 0x8b, 0xbe, 0x01, 0xa1, 0x1c, 0x9c, 0xdf, -- 0xc5, 0xc9, 0x57, 0x42, 0x4f, 0xd4, 0xcb, 0x20, 0xf2, 0x78, 0x4d, 0xd9, -- 0x10, 0x5d, 0x16, 0xa9, 0x44, 0xfc, 0x03, 0xa3, 0xd6, 0x71, 0x0f, 0x8c, -- 0xdb, 0x2c, 0xab, 0x07, 0x27, 0xef, 0xde, 0x1d, 0x1e, 0x04, 0xe5, 0x7f, -- 0x3a, 0x02, 0x06, 0x9d, 0x40, 0xeb, 0x42, 0x8b, 0x55, 0x70, 0x96, 0x34, -- 0x52, 0xcd, 0x8a, 0x50, 0x83, 0x96, 0xb9, 0x7a, 0xf4, 0x46, 0x60, 0x41, -- 0xb5, 0x5b, 0x06, 0x13, 0x96, 0x66, 0x59, 0xf4, 0xba, 0x56, 0xb6, 0x54, -- 0x75, 0x11, 0x6c, 0x6d, 0xb3, 0xde, 0xe9, 0xca, 0xe0, 0x52, 0xad, 0x1c, -- 0x07, 0x4d, 0xaa, 0x59, 0x59, 0x59, 0x6b, 0xdb, 0x15, 0xe5, 0x16, 0xa2, -- 0xa9, 0xe6, 0xc8, 0xed, 0x2b, 0xa0, 0x25, 0xde, 0x59, 0xa5, 0xf6, 0x78, -- 0x0d, 0xb5, 0x72, 0xbb, 0xe0, 0x78, 0x52, 0xe3, 0x2e, 0x4c, 0x56, 0xd5, -- 0x99, 0x99, 0x4f, 0x32, 0x86, 0x79, 0xc1, 0x17, 0xd3, 0x63, 0x9f, 0x69, -- 0x5b, 0x63, 0x03, 0x94, 0xf3, 0xd8, 0x32, 0x4f, 0x05, 0xa5, 0xce, 0x61, -- 0x4d, 0x5b, 0xb1, 0x38, 0xa6, 0x1a, 0x5b, 0x47, 0x20, 0x59, 0xae, 0x4a, -- 0x7f, 0x96, 0x02, 0xf0, 0xeb, 0x55, 0x78, 0xee, 0x35, 0xc0, 0x14, 0x76, -- 0x55, 0x5a, 0x28, 0x4b, 0xa1, 0x6b, 0x14, 0xf4, 0x4d, 0xab, 0x9b, 0x6a, -- 0x35, 0x9c, 0x04, 0x94, 0x8d, 0x1a, 0xd5, 0x31, 0x43, 0x60, 0x76, 0x6b, -- 0x51, 0x00, 0xf8, 0xf2, 0xba, 0x35, 0x4e, 0xde, 0xab, 0x66, 0x73, 0x6e, -- 0x8b, 0x22, 0xb4, 0x98, 0x48, 0x0e, 0x75, 0x28, 0xed, 0xdd, 0x55, 0x90, -- 0xf3, 0x21, 0x9d, 0x98, 0x1e, 0x03, 0xb8, 0xf7, 0xd4, 0x99, 0xdf, 0x40, -- 0xfa, 0x71, 0x6f, 0xd3, 0x4a, 0x04, 0x03, 0x8e, 0xef, 0x00, 0x93, 0xd8, -- 0x54, 0x1b, 0xe4, 0xfd, 0xda, 0x78, 0x3f, 0xcf, 0x3f, 0x42, 0x05, 0x8a, -- 0x61, 0x9f, 0x5c, 0x53, 0xab, 0x47, 0xd5, 0xdb, 0x79, 0xb1, 0x3b, 0xdc, -- 0x79, 0xfe, 0xf9, 0x70, 0x67, 0x7b, 0xb8, 0xd3, 0x0b, 0xa1, 0x29, 0xe1, -- 0xb4, 0x66, 0x37, 0x73, 0xd8, 0x4e, 0x87, 0x01, 0xa6, 0xcb, 0xce, 0x13, -- 0x76, 0x30, 0xbb, 0x1f, 0x06, 0xae, 0xff, 0xa8, 0x0b, 0x0d, 0x0f, 0x68, -- 0xb7, 0x3c, 0x08, 0xe4, 0x0f, 0x90, 0xda, 0x82, 0xe3, 0x24, 0xba, 0x8a, -- 0xd4, 0x5a, 0x02, 0x83, 0x2b, 0x4e, 0xdb, 0x85, 0x5b, 0x12, 0x04, 0xa8, -- 0x77, 0x97, 0xac, 0x75, 0xfd, 0x47, 0x7a, 0xe7, 0xaf, 0x66, 0xe6, 0x6c, -- 0x23, 0x76, 0xc7, 0x50, 0xed, 0x9c, 0xce, 0x9a, 0xce, 0xa5, 0x6d, 0x15, -- 0xb7, 0xc0, 0x15, 0xb1, 0x1e, 0x3a, 0xab, 0x32, 0x1c, 0x16, 0x21, 0xef, -- 0xb5, 0xd2, 0xbc, 0xd6, 0x1c, 0x6a, 0xe2, 0xfa, 0x74, 0xea, 0x90, 0xe1, -- 0xa2, 0x65, 0x97, 0x4e, 0x1f, 0xd6, 0x35, 0x66, 0x15, 0x1d, 0x2f, 0x72, -- 0x8e, 0x5c, 0x16, 0xba, 0x61, 0xf9, 0x9d, 0x3f, 0xff, 0xd9, 0xf3, 0xa8, -- 0x73, 0x4e, 0x26, 0xd0, 0xaa, 0x83, 0xb0, 0x50, 0x3d, 0xf3, 0x7a, 0xa9, -- 0xe4, 0xcf, 0x26, 0xbd, 0xbd, 0x9f, 0x90, 0x72, 0xf0, 0xcb, 0xe0, 0x27, -- 0xfa, 0xf3, 0x97, 0x9e, 0x63, 0x94, 0x88, 0xc1, 0x91, 0xdb, 0xda, 0x4d, -- 0xde, 0x02, 0xe2, 0xf1, 0x90, 0x8b, 0x55, 0x45, 0x02, 0x36, 0x3b, 0x0f, -- 0x70, 0x1a, 0x25, 0xe9, 0xd0, 0x27, 0x24, 0xa7, 0x96, 0x7b, 0x0a, 0x5b, -- 0x0d, 0x51, 0x8a, 0x5b, 0x4b, 0x09, 0xb6, 0xf7, 0x2f, 0xf5, 0xad, 0x90, -- 0x00, 0xeb, 0xc9, 0xa5, 0xa8, 0x19, 0x96, 0x9d, 0xaa, 0xec, 0x99, 0xc3, -- 0xed, 0x5c, 0xb6, 0x8d, 0x7e, 0xb6, 0xe6, 0xc0, 0x12, 0x38, 0x43, 0xca, -- 0x0a, 0xea, 0x8a, 0x2f, 0x58, 0xec, 0xac, 0x99, 0x0b, 0xd3, 0x70, 0xd9, -- 0x48, 0x3a, 0xc7, 0xea, 0x86, 0xa7, 0xa8, 0x59, 0x80, 0x82, 0xbd, 0xb3, -- 0x16, 0x04, 0x22, 0x61, 0x6c, 0x96, 0x39, 0x37, 0x0a, 0xf0, 0x7f, 0x43, -- 0xc1, 0x8d, 0x39, 0x59, 0xf2, 0x72, 0x71, 0x5d, 0x52, 0xbb, 0x0f, 0xa0, -- 0xa0, 0xd1, 0x53, 0xf2, 0x8c, 0xa3, 0xda, 0x85, 0x47, 0x0d, 0xfb, 0x1d, -- 0x43, 0x8f, 0x17, 0x74, 0x58, 0x9f, 0x6c, 0xef, 0xac, 0xa8, 0x31, 0x00, -- 0x5e, 0x6f, 0x01, 0x46, 0x25, 0x70, 0x8e, 0x6a, 0x96, 0x92, 0x92, 0x64, -- 0xf7, 0xf9, 0xce, 0xf3, 0x2d, 0xe2, 0x22, 0x4f, 0x86, 0xbb, 0x21, 0x76, -- 0x2d, 0x1d, 0x31, 0x1a, 0x43, 0xfb, 0xf2, 0x04, 0xd2, 0x82, 0x5d, 0xd6, -- 0x88, 0x39, 0xa4, 0xe6, 0x18, 0x3a, 0xc1, 0x7d, 0x84, 0x1b, 0xcd, 0x07, -- 0x81, 0xa7, 0x8c, 0x9d, 0xe0, 0x42, 0xb7, 0xa3, 0x98, 0x7b, 0x93, 0x4a, -- 0x59, 0xa0, 0xe1, 0xd1, 0xa8, 0x29, 0x70, 0x09, 0x80, 0xe4, 0xe5, 0x28, -- 0xa7, 0x9b, 0xbf, 0xe6, 0x72, 0xeb, 0x40, 0x08, 0x62, 0x03, 0xa7, 0x2b, -- 0xdb, 0xc0, 0xb8, 0xe0, 0x45, 0x97, 0x9a, 0x22, 0xf0, 0x01, 0x2e, 0xbd, -- 0xd5, 0x2c, 0x59, 0xa1, 0x53, 0x0b, 0x51, 0xe2, 0xb9, 0xc0, 0x4f, 0x03, -- 0xcc, 0x9e, 0x6f, 0xe5, 0xf1, 0x7d, 0xfb, 0x1e, 0xf9, 0x86, 0xc8, 0xf3, -- 0x96, 0x4d, 0xec, 0xa9, 0xdd, 0x50, 0x92, 0x87, 0x29, 0x4e, 0x91, 0x54, -- 0x16, 0xc3, 0xe3, 0x27, 0xea, 0x07, 0x12, 0x89, 0xcc, 0x06, 0xc2, 0xb8, -- 0x34, 0x5c, 0x10, 0xc2, 0x3e, 0xec, 0x08, 0x80, 0x51, 0x00, 0x42, 0xce, -- 0x2d, 0x14, 0xe3, 0xbf, 0x78, 0x96, 0xc1, 0x17, 0x1e, 0x8a, 0xdb, 0x7f, -- 0xa8, 0xee, 0x90, 0x90, 0xc5, 0xee, 0x7f, 0x43, 0xb2, 0xd8, 0xfd, 0xff, -- 0xc9, 0xe2, 0x9f, 0x48, 0x16, 0x2f, 0xba, 0xc8, 0xe2, 0xc9, 0x7f, 0x43, -- 0xb2, 0x78, 0xf2, 0xff, 0x93, 0xc5, 0x3f, 0x8f, 0x2c, 0x76, 0x9f, 0x37, -- 0x53, 0x8f, 0xa0, 0x4f, 0xd2, 0x25, 0x67, 0x6a, 0x65, 0x84, 0x2f, 0x0b, -- 0xca, 0xd0, 0xa5, 0x0b, 0x05, 0x9d, 0xc4, 0x32, 0x45, 0x42, 0x95, 0x54, -- 0x05, 0xf6, 0xca, 0x03, 0x26, 0xc5, 0x15, 0xf4, 0x18, 0x76, 0x2d, 0x9d, -- 0x0e, 0x93, 0x53, 0xf7, 0x1a, 0x6b, 0xf6, 0xfc, 0xd9, 0x12, 0x7e, 0xd5, -- 0x69, 0x76, 0x89, 0x2d, 0x80, 0x9c, 0xd2, 0xc7, 0x97, 0x10, 0xa3, 0x18, -- 0x18, 0x74, 0x10, 0x65, 0x9e, 0xf0, 0x2b, 0xe2, 0xea, 0x44, 0x2b, 0xac, -- 0x80, 0xa6, 0x3e, 0x51, 0xc0, 0xd2, 0xd3, 0xd6, 0x49, 0x96, 0x5a, 0xef, -- 0x27, 0x61, 0xfd, 0x07, 0xce, 0x6b, 0x8a, 0x2b, 0x51, 0x7c, 0x14, 0x33, -- 0xfe, 0xdf, 0xb3, 0xb2, 0x48, 0x2c, 0x2e, 0x49, 0x31, 0x77, 0x50, 0xb2, -- 0xc5, 0xc4, 0x04, 0xff, 0x21, 0xf7, 0x1b, 0x69, 0x19, 0x7f, 0x46, 0x25, -- 0x2b, 0x81, 0x59, 0xe2, 0x0c, 0x78, 0x97, 0xb8, 0x80, 0x14, 0xe0, 0xdc, -- 0x2c, 0xc9, 0x7e, 0xe5, 0x4c, 0x24, 0x46, 0x68, 0x74, 0x74, 0x0e, 0x58, -- 0x68, 0x61, 0xc3, 0x41, 0xe8, 0x2b, 0x77, 0xba, 0xe6, 0xa5, 0x60, 0x73, -- 0xc8, 0x70, 0x1c, 0x50, 0xfb, 0xb0, 0x43, 0x4e, 0x7f, 0x9d, 0xb1, 0x31, -- 0x2b, 0x1c, 0x50, 0x5f, 0x0a, 0x78, 0xab, 0xe6, 0xef, 0x82, 0x62, 0xbc, -- 0x6b, 0xdb, 0x0f, 0x31, 0x1e, 0x52, 0x73, 0xcc, 0x75, 0x47, 0x7c, 0xcc, -- 0x2b, 0xb7, 0x0c, 0xe6, 0xfa, 0x09, 0x17, 0x63, 0x03, 0xb9, 0x0e, 0x66, -- 0x08, 0x47, 0x97, 0x9f, 0xb2, 0x0c, 0x30, 0x99, 0x40, 0x69, 0xaf, 0x96, -- 0xa3, 0xbf, 0xaa, 0x46, 0xc8, 0x81, 0x93, 0xc8, 0x07, 0x6a, 0x54, 0x20, -- 0x13, 0x3c, 0xfe, 0xe5, 0x48, 0xed, 0xb6, 0x71, 0x73, 0xf4, 0x21, 0x6c, -- 0xf4, 0xae, 0x26, 0x80, 0xd2, 0x99, 0xba, 0xf8, 0x79, 0x4c, 0xd1, 0xa4, -- 0x02, 0x3f, 0x75, 0xb4, 0xef, 0x76, 0x9e, 0x58, 0x63, 0xa8, 0x14, 0xf5, -- 0x3e, 0xdc, 0x2c, 0xb7, 0x9a, 0x2a, 0xc4, 0x9a, 0x47, 0x9e, 0x1f, 0x5f, -- 0xd9, 0x16, 0x91, 0x6b, 0x9f, 0xfd, 0x26, 0x55, 0xff, 0xcf, 0xfc, 0x4f, -- 0xb7, 0xc2, 0xd4, 0x00, 0xb9, 0xb4, 0xf0, 0x1d, 0x7e, 0x1c, 0x67, 0x03, -- 0xaf, 0xaf, 0xea, 0xe0, 0x15, 0x7f, 0x2b, 0x3d, 0x3c, 0xdc, 0x36, 0x3c, -- 0x23, 0xbf, 0xa2, 0x83, 0xf7, 0x73, 0x49, 0x4a, 0x0e, 0x39, 0xc4, 0x42, -- 0x31, 0x2a, 0x98, 0xdd, 0xdd, 0xa5, 0xe5, 0x5c, 0xa2, 0x6f, 0xc2, 0x4a, -- 0xb4, 0x9c, 0x5e, 0xb2, 0x80, 0x91, 0x26, 0xc2, 0x34, 0xbc, 0x64, 0x43, -- 0x15, 0xac, 0x55, 0x1c, 0x86, 0x28, 0x99, 0x64, 0x8a, 0x9f, 0x66, 0x91, -- 0x2a, 0x8b, 0xa2, 0x36, 0x0b, 0x7d, 0x32, 0x61, 0xdd, 0xa3, 0xc4, 0xfd, -- 0xd0, 0x81, 0xc8, 0x6b, 0x1b, 0xe1, 0x6b, 0xbb, 0x70, 0xcb, 0x30, 0xc1, -- 0x2c, 0x17, 0x00, 0xd3, 0x0e, 0x42, 0x23, 0xa1, 0x66, 0x38, 0xca, 0x45, -- 0xd7, 0x6d, 0x9f, 0x36, 0x5c, 0xae, 0xb8, 0xf0, 0x1c, 0x0e, 0xdc, 0x6d, -- 0x91, 0x03, 0xe6, 0x10, 0xb9, 0x71, 0xc3, 0xdf, 0x86, 0x20, 0xde, 0x0f, -- 0x0a, 0x03, 0xa5, 0x55, 0x18, 0xa2, 0x1e, 0x07, 0x94, 0x78, 0xb5, 0x3b, -- 0x45, 0xd1, 0x26, 0x06, 0x07, 0x9c, 0xa7, 0xb5, 0x1d, 0x31, 0xbf, 0x0d, -- 0x18, 0xa6, 0xc0, 0xe0, 0x73, 0xbc, 0xfc, 0x38, 0x8b, 0x7d, 0xf4, 0x1e, -- 0x2b, 0xfa, 0xb1, 0x54, 0xfd, 0xdd, 0xe8, 0x3e, 0x91, 0x64, 0xd6, 0x47, -- 0x6f, 0x95, 0x00, 0xe0, 0xca, 0xb1, 0x80, 0x6c, 0x12, 0x52, 0x8b, 0x26, -- 0xf9, 0x05, 0x57, 0xa3, 0x20, 0x49, 0xac, 0xa0, 0x64, 0xc1, 0xd8, 0xb8, -- 0x0b, 0xf9, 0x6a, 0xc9, 0x96, 0x41, 0x62, 0xf5, 0x95, 0x44, 0x10, 0xfd, -- 0xca, 0xa9, 0x7c, 0xbc, 0x1f, 0xa4, 0xf3, 0x7b, 0xb6, 0xaa, 0x3f, 0x70, -- 0x2d, 0x32, 0x23, 0x47, 0x6e, 0x08, 0x51, 0x4c, 0x2e, 0x95, 0x03, 0x5a, -- 0xb1, 0x8c, 0x16, 0xdc, 0xa1, 0x68, 0x9a, 0xb3, 0x65, 0x64, 0xfc, 0xc3, -- 0x93, 0x16, 0x40, 0x2b, 0x3c, 0x58, 0x13, 0x42, 0x35, 0x50, 0xc7, 0x0a, -- 0x74, 0x49, 0xe1, 0x61, 0x49, 0x09, 0x43, 0x9e, 0x37, 0x3c, 0x5c, 0xdd, -- 0xf0, 0x71, 0x5b, 0x2e, 0x15, 0xac, 0xe4, 0x9a, 0x1b, 0x03, 0xe2, 0x75, -- 0x8b, 0x16, 0x1e, 0xce, 0x93, 0xae, 0x29, 0xa3, 0x00, 0xdf, 0x23, 0x72, -- 0x00, 0xf7, 0xbf, 0x12, 0xbf, 0x25, 0x98, 0xa9, 0xcd, 0x6c, 0x95, 0x23, -- 0x5b, 0x66, 0xa9, 0x93, 0x7c, 0x2f, 0xa9, 0x06, 0x68, 0x11, 0x70, 0x7f, -- 0xcc, 0x66, 0x78, 0x59, 0x82, 0x9e, 0x24, 0xc4, 0x38, 0x9a, 0x30, 0x8c, -- 0xbf, 0x06, 0xce, 0x28, 0x4f, 0xba, 0x13, 0x61, 0xdc, 0xb7, 0x7b, 0x57, -- 0x78, 0x4a, 0xb1, 0xdf, 0xa3, 0x92, 0x8e, 0x78, 0x60, 0x79, 0x33, 0x24, -- 0x5c, 0xd6, 0x68, 0x82, 0x38, 0x90, 0x47, 0xc9, 0x1a, 0x03, 0x97, 0x98, -- 0x91, 0xce, 0x35, 0xfa, 0xcd, 0x8b, 0x24, 0xfd, 0x77, 0xac, 0x92, 0x76, -- 0xd6, 0x09, 0x79, 0x18, 0x14, 0xcb, 0x8d, 0x67, 0xb4, 0x2a, 0xd4, 0x7d, -- 0xc5, 0xa4, 0x56, 0x05, 0xbb, 0xb7, 0xf7, 0xbe, 0x0b, 0x0b, 0xe7, 0x01, -- 0x32, 0x97, 0xd9, 0xcd, 0x1b, 0xa1, 0xd9, 0x8d, 0x09, 0xb6, 0x03, 0x09, -- 0xdd, 0x93, 0x8a, 0x81, 0x1a, 0xce, 0xf1, 0x61, 0x3d, 0xd9, 0x45, 0xd7, -- 0x7c, 0xe2, 0x84, 0x3b, 0xe2, 0xbb, 0x92, 0xff, 0xe2, 0x2e, 0x22, 0x92, -- 0xac, 0x31, 0x45, 0xf4, 0xd2, 0x98, 0x4a, 0x87, 0x25, 0x37, 0xda, 0xbc, -- 0x9d, 0xe1, 0x36, 0xb8, 0xed, 0xc7, 0x7b, 0x44, 0x53, 0xec, 0xf1, 0xbd, -- 0xf5, 0x4b, 0x9b, 0xe9, 0xbe, 0x57, 0x36, 0xeb, 0x4d, 0xf8, 0x98, 0x17, -- 0xbf, 0xab, 0x83, 0x72, 0xf5, 0xc6, 0x42, 0x20, 0x30, 0x87, 0x8b, 0xbe, -- 0x1a, 0x82, 0x1e, 0x10, 0xc2, 0x86, 0x40, 0xcf, 0x59, 0xb5, 0x78, 0x7f, -- 0x67, 0xfb, 0xf3, 0xed, 0x6e, 0xac, 0x40, 0xc8, 0x10, 0xe6, 0xd5, 0x1e, -- 0x67, 0x41, 0x95, 0xb1, 0xdc, 0x97, 0x98, 0x08, 0x3c, 0x67, 0x7a, 0x49, -- 0xb2, 0xe3, 0xac, 0x8b, 0xf3, 0xc3, 0x8d, 0x96, 0xab, 0x81, 0x59, 0xad, -- 0xb2, 0x0e, 0x07, 0xcd, 0x1c, 0x4e, 0xce, 0xd3, 0xe3, 0xdc, 0x49, 0x1d, -- 0x29, 0xaa, 0x0e, 0xaa, 0x63, 0xde, 0x58, 0x1b, 0x13, 0xde, 0x5d, 0x48, -- 0x51, 0xc8, 0x55, 0xf4, 0xc1, 0x9d, 0xc6, 0xa6, 0x2c, 0x47, 0x0f, 0x94, -- 0x4f, 0xf8, 0x66, 0x93, 0xe4, 0x62, 0x09, 0x4b, 0x93, 0x3a, 0x00, 0x9f, -- 0x58, 0x3c, 0x01, 0xaf, 0x44, 0x15, 0x36, 0xfe, 0xf9, 0x95, 0x13, 0xfe, -- 0x66, 0xed, 0x59, 0xcd, 0x3a, 0x1f, 0xd2, 0xe5, 0x6b, 0xb9, 0x15, 0xf3, -- 0x46, 0x09, 0x63, 0xc5, 0x13, 0x15, 0xb5, 0x1b, 0xa5, 0x70, 0xa2, 0x64, -- 0xf2, 0xa0, 0x68, 0x94, 0xcb, 0x32, 0x1d, 0x65, 0x52, 0x60, 0x51, 0x5d, -- 0xc1, 0x8a, 0x85, 0x0b, 0x3f, 0x73, 0x58, 0x4a, 0x2c, 0x06, 0xbb, 0xb3, -- 0xdc, 0x56, 0x1d, 0x46, 0xb3, 0xd2, 0x94, 0x46, 0x58, 0x64, 0x69, 0x49, -- 0x52, 0x15, 0x47, 0x9f, 0x04, 0x93, 0xfb, 0x9f, 0xdc, 0x2c, 0xea, 0xc8, -- 0x79, 0x6c, 0xeb, 0x0e, 0xcf, 0x9f, 0x56, 0x3d, 0x3f, 0x57, 0x20, 0xeb, -- 0xb4, 0x1c, 0xe5, 0x75, 0x99, 0x6a, 0x5a, 0x86, 0x22, 0x81, 0x07, 0x6e, -- 0x49, 0xce, 0xf0, 0x44, 0xe8, 0x2b, 0xbf, 0xd6, 0xe9, 0x0c, 0x23, 0xde, -- 0xf7, 0x3f, 0xd1, 0xab, 0x36, 0x20, 0xb2, 0x0b, 0xf0, 0x92, 0xbe, 0x3a, -- 0x7c, 0x73, 0x72, 0x76, 0xd8, 0x04, 0x19, 0x12, 0xc4, 0x61, 0x04, 0x89, -- 0xb5, 0x47, 0xf7, 0x57, 0x64, 0x64, 0x40, 0x72, 0x0a, 0xab, 0x15, 0x9e, -- 0x7e, 0xff, 0x3a, 0x80, 0xda, 0x36, 0x7c, 0xfa, 0x00, 0xbc, 0x46, 0xcb, -- 0xa6, 0x45, 0x99, 0x5f, 0xe9, 0xb8, 0xe6, 0xf2, 0x27, 0x0a, 0xb4, 0xe1, -- 0x86, 0x27, 0xb8, 0x8c, 0x3c, 0x00, 0xed, 0x2c, 0x95, 0x68, 0xf0, 0xaa, -- 0x62, 0x03, 0x85, 0x6b, 0x36, 0xf2, 0x4b, 0x66, 0x0c, 0xfa, 0xc9, 0x89, -- 0x05, 0xc6, 0xe6, 0x38, 0xd4, 0x89, 0xa3, 0x9f, 0x86, 0x89, 0xeb, 0xc4, -- 0xf7, 0x22, 0xb8, 0x2c, 0x88, 0x7d, 0x41, 0x2f, 0x5d, 0x26, 0x1d, 0x8e, -- 0x20, 0x91, 0x88, 0x17, 0xe1, 0x1c, 0x51, 0xb8, 0x4b, 0x3f, 0xf9, 0xab, -- 0x54, 0x16, 0xbc, 0x14, 0x08, 0x4b, 0xbf, 0x8e, 0x11, 0x11, 0xa2, 0xdb, -- 0x8d, 0x8a, 0x18, 0x8a, 0x1f, 0xa9, 0x5b, 0x36, 0x1d, 0xf0, 0xfa, 0x9f, -- 0xd7, 0x13, 0x55, 0xc6, 0xc1, 0x1b, 0x35, 0x51, 0x30, 0xce, 0x51, 0x16, -- 0xf4, 0x8d, 0xc4, 0x72, 0xbb, 0x37, 0x87, 0x2e, 0xd4, 0xc4, 0x33, 0x9a, -- 0xfb, 0x20, 0xa2, 0xc4, 0x66, 0x6d, 0x68, 0xc3, 0xdd, 0x5e, 0x53, 0xab, -- 0x00, 0x66, 0xce, 0x0d, 0x2b, 0x69, 0xa5, 0x7c, 0xc9, 0x1a, 0x91, 0xb3, -- 0xac, 0xe0, 0xad, 0xec, 0xc4, 0x8f, 0x8c, 0x27, 0x61, 0xd5, 0x66, 0x40, -- 0x51, 0x6b, 0xc5, 0x91, 0x1f, 0x2d, 0xad, 0x07, 0x50, 0x44, 0xd5, 0xfd, -- 0xbc, 0x86, 0x2f, 0x19, 0x3a, 0xd5, 0xb8, 0x28, 0xe1, 0x7d, 0x8f, 0xc9, -- 0xd8, 0xd3, 0x6d, 0x05, 0xcb, 0xe1, 0x8b, 0x67, 0x2f, 0xf8, 0xd8, 0xd1, -- 0xb9, 0xaf, 0x2c, 0xc7, 0x59, 0x83, 0x95, 0x01, 0xaa, 0xac, 0x23, 0x36, -- 0x43, 0x5c, 0x04, 0xdb, 0xa1, 0xdb, 0x6f, 0x46, 0xa6, 0x51, 0x36, 0xb5, -- 0xfc, 0xea, 0xf3, 0xa0, 0xa9, 0xe1, 0x4a, 0x35, 0xaa, 0xdd, 0x5c, 0x43, -- 0xa9, 0xd2, 0xc2, 0x09, 0xb4, 0x0b, 0xe9, 0x8d, 0xa6, 0x5b, 0xe8, 0x79, -- 0x90, 0x76, 0x1b, 0xbb, 0xbf, 0x6a, 0x74, 0x96, 0xed, 0x46, 0x13, 0x26, -- 0xc2, 0x64, 0x8f, 0xd3, 0xc6, 0xbf, 0x6e, 0x3a, 0x40, 0x1a, 0x85, 0x53, -- 0x66, 0xa4, 0xc0, 0x65, 0xd6, 0xc0, 0xd1, 0x5a, 0xd5, 0xdc, 0x25, 0x18, -- 0x16, 0xad, 0x5e, 0x3b, 0x1b, 0x47, 0x6a, 0x8a, 0xd5, 0xc5, 0x22, 0x49, -- 0xad, 0x46, 0x9d, 0xee, 0x7d, 0x1c, 0xc0, 0xc8, 0x73, 0x40, 0xe0, 0xf7, -- 0x48, 0x50, 0x9d, 0xed, 0xf6, 0x22, 0x89, 0x63, 0x8e, 0x70, 0x0e, 0xa5, -- 0x45, 0x8d, 0x0b, 0x80, 0x43, 0x9b, 0xe6, 0xca, 0x26, 0xbb, 0x0e, 0xd6, -- 0x24, 0x7c, 0x30, 0x38, 0x8d, 0x8a, 0x98, 0xd2, 0x2a, 0x13, 0x85, 0xd3, -- 0xac, 0x0c, 0xcf, 0x71, 0xb3, 0x37, 0x71, 0x02, 0xb0, 0x14, 0x62, 0xd5, -- 0xdc, 0x41, 0xb4, 0xcd, 0xf5, 0x5d, 0x48, 0xdc, 0x1a, 0x54, 0xf5, 0xbd, -- 0xe8, 0xf1, 0xd9, 0x8c, 0xa1, 0x25, 0x50, 0x1d, 0x14, 0xa0, 0x88, 0x5a, -- 0x9f, 0x03, 0xf9, 0x0f, 0x83, 0xb8, 0x56, 0xad, 0x90, 0x40, 0xf2, 0xc6, -- 0x19, 0x94, 0xd5, 0x3a, 0x26, 0x15, 0x27, 0x2e, 0x91, 0x0e, 0xe1, 0x60, -- 0x70, 0x64, 0x75, 0xfe, 0x66, 0x5c, 0xb6, 0x93, 0xe2, 0x62, 0x18, 0x93, -- 0xeb, 0xab, 0x72, 0x21, 0x10, 0x04, 0x49, 0x47, 0x4e, 0x73, 0x20, 0xd6, -- 0xc8, 0x93, 0xc6, 0x2b, 0x50, 0x8a, 0x0b, 0x62, 0x1f, 0x5e, 0x3d, 0x7a, -- 0xdd, 0x40, 0xaf, 0x91, 0xc8, 0x4a, 0xda, 0xe9, 0xee, 0xe6, 0x7c, 0x64, -- 0xa1, 0x84, 0xdf, 0xf8, 0xfb, 0xc4, 0xb5, 0xe6, 0xa5, 0xb8, 0xd1, 0xbd, -- 0xff, 0xa6, 0xbb, 0x39, 0x6d, 0x43, 0x6c, 0xe9, 0xd2, 0x82, 0x35, 0x0b, -- 0x5a, 0x31, 0xbc, 0x46, 0xa6, 0x06, 0x86, 0x6d, 0xb3, 0x4e, 0x86, 0xf1, -- 0x62, 0xcc, 0x8a, 0x89, 0x44, 0x76, 0x3c, 0xb6, 0x16, 0xfc, 0xa0, 0xad, -- 0x85, 0x5a, 0x27, 0xab, 0x70, 0x5e, 0x68, 0x84, 0xa8, 0x94, 0x29, 0x4f, -- 0xf9, 0x40, 0x77, 0x73, 0x7e, 0xa2, 0x10, 0x6b, 0xd0, 0x3c, 0x5e, 0x0e, -- 0xa7, 0x30, 0x4f, 0x8a, 0x71, 0x1d, 0xcc, 0x80, 0x1f, 0xe8, 0x6e, 0x4e, -- 0xdd, 0xcd, 0xf1, 0xcc, 0xd8, 0x52, 0x85, 0x68, 0xb3, 0xc7, 0x66, 0xc6, -- 0x0f, 0x46, 0xbb, 0x4c, 0x1f, 0x0a, 0x0f, 0x6f, 0x6d, 0xb1, 0x6c, 0xce, -- 0x8a, 0x20, 0x87, 0xc6, 0x06, 0xdb, 0x0e, 0x63, 0x0c, 0x5d, 0x1b, 0xac, -- 0xc1, 0x73, 0x31, 0x23, 0xf7, 0xa8, 0x4e, 0xb2, 0x3a, 0xee, 0xc1, 0x95, -- 0x1b, 0xac, 0x7d, 0x44, 0xab, 0x30, 0x9d, 0x2b, 0x7c, 0xfb, 0x07, 0xc9, -- 0x99, 0x67, 0x14, 0xbf, 0xfa, 0xc3, 0xc3, 0x0b, 0x32, 0x9d, 0x5b, 0xf5, -- 0x15, 0xa0, 0xb3, 0x38, 0x5e, 0xa1, 0x61, 0xd2, 0x69, 0xb3, 0x2e, 0x8b, -- 0x62, 0xee, 0xac, 0x20, 0x7b, 0xdf, 0x5f, 0xe2, 0xeb, 0x5c, 0xd0, 0x35, -- 0x9a, 0xcf, 0x6b, 0x8b, 0xf4, 0x03, 0x8f, 0x09, 0xc6, 0xd8, 0x55, 0x0e, -- 0x21, 0x48, 0xe4, 0x88, 0xa6, 0x38, 0xbb, 0x61, 0xd3, 0x94, 0x13, 0x0d, -- 0x3e, 0xac, 0x0e, 0x8a, 0x01, 0xa1, 0xe1, 0x69, 0xdb, 0x6d, 0x99, 0x92, -- 0x79, 0x8f, 0x7c, 0x34, 0xad, 0x3f, 0xce, 0x0f, 0xd0, 0x71, 0xb3, 0x4b, -- 0x77, 0x26, 0xdb, 0xe3, 0x5b, 0xdc, 0x4d, 0xac, 0x73, 0xfe, 0xd5, 0xba, -- 0x0e, 0xcb, 0x7e, 0x3a, 0xc8, 0x03, 0x16, 0x5d, 0xa5, 0xb1, 0x4b, 0x8b, -- 0x38, 0x5e, 0xb1, 0x14, 0xdd, 0x61, 0xc0, 0x51, 0xe7, 0xa5, 0x54, 0xea, -- 0x35, 0x44, 0x67, 0x6c, 0xc7, 0xea, 0xc5, 0xd1, 0xa7, 0xfd, 0x10, 0x85, -- 0xbf, 0x87, 0xc8, 0x5f, 0x7e, 0x8d, 0xec, 0x38, 0x3c, 0xc0, 0xf0, 0xac, -- 0xe8, 0x7b, 0x8b, 0xe5, 0x4d, 0x32, 0x2e, 0xfd, 0x24, 0xb4, 0x80, 0x50, -- 0xf1, 0xc7, 0x4f, 0x96, 0x8c, 0x7c, 0xe5, 0x1a, 0x97, 0xb3, 0x47, 0x0e, -- 0x39, 0x3d, 0xe0, 0x67, 0xc5, 0x55, 0x58, 0x82, 0x59, 0x45, 0xe7, 0x52, -- 0x91, 0x1d, 0x56, 0xac, 0xfc, 0xaa, 0x11, 0x34, 0xa8, 0x70, 0xf5, 0x48, -- 0xf4, 0xc9, 0xce, 0xe1, 0xf8, 0xc5, 0x65, 0x3f, 0xc6, 0xbd, 0x1f, 0x59, -- 0x77, 0x73, 0x3a, 0x5c, 0xff, 0x96, 0x2e, 0x4f, 0xdf, 0x41, 0x51, 0xa8, -- 0x22, 0xcf, 0xfa, 0x73, 0x4c, 0x1b, 0x76, 0xc0, 0x7f, 0x15, 0x83, 0x60, -- 0x6d, 0x6d, 0x1a, 0x1c, 0xc2, 0x41, 0x89, 0x48, 0x72, 0x44, 0x12, 0xbd, -- 0xc4, 0x3f, 0x5f, 0x74, 0x62, 0x6e, 0x9b, 0x86, 0xb5, 0xc5, 0xc0, 0x5f, -- 0x1c, 0x65, 0x09, 0xb7, 0x21, 0x73, 0x13, 0xc6, 0x72, 0xd5, 0x50, 0xa4, -- 0x0d, 0x0e, 0x5b, 0x4b, 0xa5, 0x74, 0x12, 0xb2, 0x30, 0x8a, 0x71, 0x64, -- 0x59, 0xe5, 0x9c, 0x9d, 0x4d, 0x0b, 0xfe, 0x4f, 0x13, 0x68, 0xeb, 0x5b, -- 0xa4, 0xad, 0xf7, 0x93, 0xa6, 0x4e, 0x66, 0xc2, 0x35, 0x97, 0xb3, 0xd5, -- 0x14, 0x08, 0xee, 0xba, 0xed, 0xf3, 0x3d, 0xe3, 0x8e, 0x5d, 0xcd, 0x76, -- 0x4f, 0x0a, 0xf0, 0xef, 0x7a, 0x41, 0x9e, 0x11, 0x59, 0xa3, 0x05, 0xdc, -- 0x1e, 0x3c, 0x7d, 0xf1, 0xa2, 0x71, 0xa5, 0x85, 0x9a, 0xf3, 0xb3, 0xed, -- 0x6d, 0xc1, 0xa9, 0x6d, 0xbf, 0x46, 0x5f, 0x0c, 0x5e, 0xe0, 0xc5, 0xe6, -- 0x6b, 0x02, 0x71, 0xbd, 0xfa, 0xbd, 0x01, 0x7f, 0xd3, 0xd1, 0x1d, 0xb4, -- 0xfb, 0x95, 0x6f, 0xbd, 0xe0, 0xee, 0x3a, 0xde, 0xc2, 0xc3, 0xb2, 0x8c, -- 0xc5, 0xe5, 0x25, 0x83, 0x34, 0xf2, 0x93, 0x52, 0xd3, 0xb5, 0x28, 0xef, -- 0xd2, 0x72, 0x12, 0x4f, 0x77, 0xbb, 0x3f, 0xd8, 0x59, 0x35, 0x5d, 0xd8, -- 0x04, 0x78, 0x24, 0xd8, 0x4f, 0xd6, 0xa0, 0x48, 0x78, 0xde, 0xf8, 0x66, -- 0xb3, 0x6b, 0xf6, 0x9f, 0x6d, 0x6f, 0xf7, 0x9f, 0xf3, 0xbf, 0x2f, 0x5e, -- 0xac, 0x74, 0x50, 0xf9, 0x3e, 0x9e, 0xd8, 0xd4, 0x1a, 0xa3, 0xa5, 0x76, -- 0x3a, 0x5a, 0xdf, 0xa1, 0x56, 0x77, 0x5e, 0xbc, 0xe8, 0x73, 0x2f, 0xcf, -- 0x3e, 0xa9, 0xf5, 0xfa, 0xae, 0xf0, 0x76, 0x16, 0x7e, 0xdd, 0xd3, 0x63, -- 0xd5, 0x9a, 0x01, 0x6b, 0x03, 0xaf, 0x80, 0xdc, 0x1b, 0x64, 0x3a, 0xfb, -- 0x08, 0xef, 0x30, 0x10, 0x17, 0x51, 0x02, 0x0b, 0xc0, 0x04, 0xc1, 0x32, -- 0x9a, 0x9a, 0xc2, 0x92, 0xfa, 0x10, 0x0b, 0x33, 0xe6, 0xfb, 0xb4, 0x0b, -- 0xc9, 0xb5, 0x99, 0xe4, 0x57, 0x0c, 0x1c, 0x6c, 0xf9, 0xc1, 0x55, 0xb2, -- 0x41, 0xf4, 0x22, 0x00, 0x90, 0x82, 0x30, 0xab, 0xce, 0xcd, 0x75, 0x44, -- 0x03, 0x0a, 0x46, 0xd4, 0x3a, 0x6b, 0x13, 0xeb, 0xb4, 0x15, 0xd9, 0x74, -- 0xe2, 0x9c, 0x7e, 0x7a, 0x89, 0xc8, 0x73, 0x03, 0x79, 0x42, 0x0e, 0x1a, -- 0x54, 0xc0, 0x8f, 0x43, 0x29, 0x7a, 0xc4, 0xb1, 0x18, 0xad, 0x3e, 0x13, -- 0x0f, 0xf0, 0xeb, 0x31, 0xe9, 0x04, 0x8c, 0x4e, 0xc2, 0xff, 0xfc, 0x54, -- 0xd7, 0xab, 0xa0, 0xd0, 0x8e, 0x99, 0x97, 0xc2, 0x1a, 0xa5, 0x93, 0xcc, -- 0x4a, 0x7e, 0x14, 0x0d, 0x04, 0x36, 0xf7, 0xba, 0x98, 0x70, 0x96, 0x12, -- 0x93, 0xee, 0x0f, 0xd9, 0x8f, 0x3e, 0x61, 0x14, 0x7e, 0x4a, 0x56, 0x68, -- 0xef, 0xd2, 0x32, 0xb3, 0x54, 0x77, 0x52, 0xb4, 0xed, 0xec, 0xbb, 0xba, -- 0x74, 0x93, 0x42, 0xa3, 0x59, 0x00, 0xfe, 0x84, 0x0d, 0xb2, 0xe6, 0xac, -- 0xb8, 0x8a, 0xba, 0x3a, 0x27, 0x88, 0x27, 0x31, 0xe4, 0x3f, 0x31, 0xfa, -- 0x22, 0xdf, 0x33, 0x0c, 0x02, 0x95, 0x7a, 0x38, 0x3a, 0x65, 0x81, 0xcc, -- 0x5f, 0x6b, 0x05, 0xdc, 0x5f, 0x65, 0x12, 0xd0, 0x2e, 0x18, 0xf4, 0x96, -- 0x54, 0xe8, 0x67, 0x61, 0xa8, 0xc7, 0x60, 0x49, 0xb2, 0xf8, 0x06, 0x4d, -- 0x59, 0x69, 0xd5, 0x2a, 0xf5, 0x4a, 0x0a, 0x9e, 0x3f, 0xc0, 0xc7, 0x1a, -- 0x3b, 0xc6, 0x9b, 0xe5, 0x98, 0x20, 0xed, 0x1a, 0xd1, 0x61, 0x18, 0xf5, -- 0x20, 0xf4, 0x15, 0x98, 0x0b, 0xac, 0xda, 0x43, 0x21, 0x3e, 0xfc, 0xcd, -- 0x21, 0xc6, 0xc0, 0xf4, 0x29, 0x3b, 0xc1, 0xdd, 0x86, 0x5b, 0x9a, 0x7d, -- 0xac, 0x51, 0x9d, 0x05, 0x8f, 0xd9, 0xad, 0x74, 0x7e, 0xf4, 0xbf, 0x0e, -- 0x87, 0x61, 0x64, 0xee, 0x3f, 0xc8, 0xd2, 0x78, 0x16, 0xe4, 0x1d, 0xf1, -- 0x6b, 0x5d, 0x49, 0x16, 0x01, 0x80, 0x6d, 0xab, 0x6e, 0x99, 0xed, 0x0d, -- 0x50, 0xdf, 0xae, 0x78, 0x37, 0xe1, 0xe6, 0x75, 0xe5, 0x91, 0x23, 0x24, -- 0x99, 0x3a, 0x9d, 0x2d, 0x12, 0x6f, 0x95, 0x30, 0xaf, 0x92, 0x80, 0x1b, -- 0x7a, 0xcc, 0x44, 0x09, 0x63, 0x4e, 0x7d, 0x2c, 0x88, 0x96, 0x8f, 0x6b, -- 0x0b, 0xd3, 0x3e, 0x91, 0x4e, 0xb6, 0x9d, 0x2b, 0xee, 0x21, 0x57, 0x8d, -- 0x17, 0x80, 0xfb, 0x0a, 0x4d, 0xc6, 0x7c, 0x13, 0x93, 0x4e, 0x8a, 0xc7, -- 0x3b, 0x13, 0x5d, 0x05, 0xd7, 0x22, 0xcc, 0x0e, 0x72, 0xc2, 0x90, 0xcc, -- 0x70, 0x9a, 0x59, 0x0e, 0x3e, 0x3c, 0x89, 0x61, 0x39, 0x8e, 0x8e, 0x7c, -- 0x83, 0x8a, 0x2e, 0xfc, 0x12, 0x89, 0x34, 0x15, 0x8e, 0xe9, 0x84, 0x2f, -- 0x48, 0x86, 0x26, 0xb3, 0x9c, 0x75, 0x01, 0x3a, 0xab, 0x82, 0x9a, 0x7d, -- 0x6a, 0x5e, 0x93, 0x87, 0xa3, 0x92, 0xad, 0x9c, 0x49, 0x0e, 0xeb, 0x02, -- 0x67, 0x1c, 0xfb, 0x78, 0xed, 0x2a, 0xc6, 0xfe, 0xcf, 0xae, 0x26, 0x21, -- 0x1c, 0x56, 0x73, 0x15, 0xee, 0x5c, 0x50, 0x5a, 0xb0, 0xbb, 0x79, 0x10, -- 0x2b, 0x91, 0x4e, 0xd5, 0x6c, 0xc1, 0xb8, 0x4e, 0x30, 0xbe, 0xbb, 0x3c, -- 0x33, 0x98, 0xd0, 0xa2, 0x99, 0xd6, 0xb0, 0x1e, 0x02, 0x77, 0xc0, 0x55, -- 0x5a, 0x42, 0x3e, 0x99, 0xc2, 0x25, 0x87, 0xf1, 0xd9, 0x0e, 0x56, 0x6a, -- 0x86, 0x3c, 0x06, 0x24, 0xb6, 0xb7, 0x9d, 0x83, 0xd4, 0x2f, 0xca, 0xd3, -- 0xf6, 0x69, 0x25, 0xee, 0xa2, 0x92, 0x50, 0x0d, 0x7f, 0x6a, 0x90, 0x32, -- 0xc7, 0x61, 0x1c, 0x0f, 0x05, 0x00, 0x5c, 0x8b, 0x64, 0xd1, 0xf0, 0x57, -- 0x4a, 0x72, 0x16, 0xaf, 0x29, 0x4f, 0xda, 0x25, 0x2a, 0x56, 0xdd, 0x96, -- 0xda, 0x49, 0x96, 0x5a, 0xd2, 0x37, 0xed, 0x29, 0x97, 0xa1, 0x8e, 0xd2, -- 0xf6, 0xee, 0xb2, 0x32, 0xf3, 0x70, 0x93, 0x88, 0x96, 0xa2, 0xd3, 0x37, -- 0x4c, 0xce, 0x0b, 0x7a, 0xbe, 0xa3, 0x1e, 0x88, 0xe5, 0x2f, 0x34, 0xe0, -- 0xe7, 0x30, 0x1e, 0x5f, 0x7d, 0x92, 0xf3, 0xf3, 0xc4, 0x00, 0xdc, 0x9c, -- 0x6f, 0x07, 0x8e, 0x0a, 0x2c, 0xb5, 0x34, 0x70, 0xab, 0x59, 0xda, 0x57, -- 0x26, 0x0a, 0x63, 0x23, 0xb3, 0x9c, 0xde, 0xa0, 0x48, 0x06, 0x00, 0xd0, -- 0x06, 0xc4, 0x4b, 0xd0, 0xdc, 0xf0, 0x01, 0xc7, 0xfd, 0xce, 0x8b, 0x66, -- 0x4c, 0x1b, 0x97, 0xa4, 0x99, 0x12, 0x43, 0x7f, 0xc9, 0xce, 0x30, 0xf8, -- 0xc2, 0xf6, 0x56, 0xe4, 0xf0, 0x9c, 0x3a, 0xc8, 0xa2, 0x31, 0x0d, 0x81, -- 0x43, 0xd4, 0x35, 0x57, 0x41, 0xe6, 0xe8, 0x27, 0x29, 0x09, 0x14, 0x42, -- 0x2b, 0xe2, 0x1c, 0x5b, 0xa4, 0x79, 0x39, 0x8c, 0x3c, 0x6c, 0x5a, 0xf9, -- 0x05, 0x55, 0x57, 0xef, 0x0d, 0x49, 0xce, 0x95, 0x97, 0xd4, 0x6a, 0x8a, -- 0x12, 0x0a, 0xb9, 0x51, 0x6d, 0x1a, 0x64, 0xe1, 0x0a, 0xb9, 0xbd, 0x91, -- 0x0f, 0xa3, 0x28, 0xdc, 0xb0, 0x35, 0x70, 0x62, 0xe4, 0x5d, 0x5e, 0x59, -- 0x25, 0x59, 0x04, 0xc5, 0x60, 0xca, 0x93, 0x00, 0xf7, 0x3d, 0x8a, 0x9f, -- 0x19, 0x29, 0x1c, 0xed, 0x50, 0x72, 0x59, 0xf9, 0xfc, 0xf3, 0xc1, 0xa2, -- 0xfe, 0x0b, 0x49, 0xdf, 0xdb, 0xca, 0xea, 0xf1, 0x96, 0x80, 0x99, 0x80, -- 0xc4, 0xe7, 0x00, 0xd3, 0x73, 0xda, 0x41, 0x54, 0x4e, 0x37, 0x72, 0xf0, -- 0x88, 0xf9, 0x21, 0xa8, 0x46, 0x14, 0xe4, 0xe3, 0x80, 0xa3, 0x9a, 0x47, -- 0xb1, 0xc3, 0x40, 0x7b, 0x69, 0xc0, 0x20, 0xc1, 0xa2, 0x3b, 0xd7, 0x9b, -- 0x01, 0x86, 0x34, 0x2b, 0x6f, 0xd0, 0x2b, 0xbe, 0x02, 0x56, 0x07, 0xf5, -- 0x72, 0xbd, 0x7b, 0x77, 0xeb, 0xb8, 0x50, 0xaf, 0x26, 0x16, 0x98, 0x03, -- 0xad, 0x0a, 0x36, 0xbe, 0xcb, 0xf4, 0xce, 0xa7, 0x07, 0x23, 0x90, 0xb8, -- 0x2d, 0x4b, 0xc8, 0x05, 0x2e, 0xc2, 0x23, 0xa8, 0x5f, 0x96, 0x32, 0xa9, -- 0xd1, 0x3d, 0x3e, 0xa3, 0x94, 0xad, 0xce, 0x13, 0xfd, 0xc4, 0x25, 0xe8, -- 0x74, 0x04, 0x3e, 0xe9, 0xe6, 0x3e, 0x1c, 0xbc, 0xb2, 0x33, 0x7c, 0xd2, -- 0x3c, 0x03, 0xac, 0x11, 0x76, 0xa1, 0xc9, 0x43, 0x88, 0x03, 0x27, 0x04, -- 0x00, 0x3e, 0x62, 0x93, 0x24, 0xe1, 0x84, 0x2d, 0x0c, 0x99, 0x85, 0xa9, -- 0xc0, 0xfd, 0x2d, 0x09, 0xec, 0xcc, 0x6d, 0x14, 0x76, 0x3f, 0x86, 0xdf, -- 0x0a, 0xfc, 0x47, 0xb9, 0xd5, 0x42, 0x92, 0xce, 0x71, 0x25, 0x7b, 0x9d, -- 0x48, 0xe6, 0xac, 0x96, 0x63, 0xe2, 0x65, 0x7c, 0x54, 0x96, 0x8b, 0x61, -- 0x8c, 0x75, 0xef, 0xe2, 0x95, 0xf4, 0x5d, 0xea, 0x7e, 0x3b, 0x4c, 0x7e, -- 0x43, 0xea, 0x87, 0x46, 0x92, 0x56, 0x56, 0x67, 0xc8, 0x82, 0x3d, 0x22, -- 0x9e, 0x08, 0x56, 0x0a, 0x90, 0x58, 0x37, 0x65, 0x9d, 0xb3, 0x66, 0xaf, -- 0x08, 0x9e, 0xcd, 0x1e, 0x2f, 0x8a, 0xd4, 0xa2, 0xe9, 0x9b, 0x2f, 0xe0, -- 0xe9, 0xc7, 0x8f, 0xf1, 0x4e, 0xf8, 0xa2, 0xa9, 0xd0, 0x15, 0xd5, 0x51, -- 0xfc, 0xec, 0xe3, 0xc7, 0xe6, 0x97, 0x0f, 0x94, 0xc3, 0x64, 0xd9, 0x61, -- 0x54, 0x48, 0xba, 0xbd, 0xac, 0x54, 0x1a, 0xac, 0xa2, 0x41, 0x8e, 0x2a, -- 0x52, 0xd8, 0x5d, 0x9a, 0x77, 0xe2, 0x41, 0xaa, 0xf6, 0x27, 0x1c, 0xa9, -- 0xbe, 0xce, 0xfc, 0x35, 0xc1, 0xf0, 0x2b, 0xd7, 0x74, 0x2a, 0x05, 0x91, -- 0x5f, 0x89, 0xde, 0x55, 0xc8, 0x5c, 0x6a, 0xf6, 0x52, 0x3b, 0x48, 0x21, -- 0x95, 0xc2, 0x69, 0x80, 0xc2, 0x5e, 0xce, 0xeb, 0x7c, 0xca, 0xef, 0xa0, -- 0x78, 0x14, 0xbd, 0xbe, 0x43, 0xeb, 0x9f, 0xcf, 0x97, 0xac, 0x53, 0x69, -- 0xc5, 0x7b, 0xee, 0xd0, 0xce, 0x62, 0xe7, 0xb2, 0x4f, 0xd3, 0xfb, 0xc4, -- 0xf9, 0xf5, 0xad, 0x72, 0x66, 0x00, 0x05, 0x80, 0x71, 0x09, 0xee, 0x96, -- 0xe5, 0x41, 0x61, 0x2d, 0x06, 0x78, 0xb5, 0xab, 0x34, 0x95, 0xdd, 0x41, -- 0x9a, 0xf4, 0x95, 0x7d, 0xa4, 0xc5, 0x96, 0x50, 0x3f, 0x49, 0x5d, 0x24, -- 0x45, 0x8f, 0x6f, 0x99, 0xab, 0xa2, 0xa4, 0x0d, 0x9d, 0xa9, 0xd4, 0x21, -- 0x41, 0x8b, 0x51, 0xd0, 0x80, 0x74, 0xe5, 0xaa, 0x4a, 0x49, 0x00, 0xa9, -- 0x14, 0x24, 0x80, 0x77, 0xb0, 0xa8, 0x55, 0x4e, 0xb5, 0x62, 0x0a, 0x58, -- 0x5d, 0x1b, 0xf5, 0x43, 0x57, 0xd1, 0x6e, 0x78, 0x0c, 0xff, 0xf1, 0x39, -- 0x3f, 0xc1, 0x1a, 0x3d, 0x50, 0x0b, 0xcb, 0x04, 0xe0, 0x6a, 0x9a, 0x65, -- 0x0b, 0x8d, 0xaa, 0xb0, 0x52, 0xaf, 0x32, 0x2d, 0x3d, 0x86, 0x22, 0x02, -- 0x28, 0x15, 0xaa, 0x5a, 0xb3, 0xea, 0x80, 0xeb, 0xed, 0xcd, 0x9e, 0x27, -- 0xbe, 0x67, 0x9c, 0xa2, 0x5a, 0xb7, 0xcf, 0xd5, 0x86, 0xa8, 0x86, 0x26, -- 0xce, 0x74, 0x9f, 0x48, 0xb7, 0x65, 0xba, 0xca, 0xba, 0x6d, 0x8e, 0x64, -- 0x74, 0xad, 0x37, 0x87, 0x0d, 0x29, 0x29, 0x86, 0x8b, 0x11, 0xdf, 0x2b, -- 0xe4, 0xc1, 0x4c, 0x2a, 0xc4, 0xb3, 0xe0, 0xa3, 0xec, 0x0f, 0x41, 0xa5, -- 0x8a, 0x50, 0x39, 0x0c, 0x58, 0x0b, 0xe3, 0xc7, 0x63, 0x09, 0x23, 0x56, -- 0x8b, 0xc0, 0xef, 0x96, 0x1a, 0x61, 0xba, 0xba, 0x8d, 0xdc, 0x53, 0x1b, -- 0x8f, 0x7d, 0xe8, 0x29, 0x20, 0x06, 0x64, 0xff, 0x67, 0x11, 0xc4, 0xa3, -- 0xf5, 0xd1, 0xc4, 0x94, 0x28, 0xdb, 0xcc, 0x0f, 0x6a, 0x54, 0x0f, 0xc7, -- 0x45, 0xf2, 0x84, 0xbc, 0x63, 0x5c, 0xd8, 0x8e, 0xdb, 0x73, 0x55, 0xa1, -- 0x22, 0x33, 0x98, 0xf2, 0x15, 0x1b, 0x15, 0x00, 0x1e, 0x52, 0x9e, 0x06, -- 0x17, 0x19, 0xdb, 0x60, 0x04, 0x21, 0x1d, 0xda, 0x26, 0x7f, 0x0c, 0x6c, -- 0x50, 0x8d, 0x13, 0x41, 0xef, 0x11, 0x62, 0x02, 0x40, 0xc3, 0x85, 0xdd, -- 0x4c, 0xc2, 0x82, 0x41, 0x5a, 0x2f, 0xe8, 0x5d, 0xc1, 0xb9, 0xcc, 0xae, -- 0x1a, 0x80, 0x6b, 0x47, 0xdf, 0x8c, 0xa1, 0xc1, 0xb5, 0x9d, 0x4c, 0x1a, -- 0xe8, 0x37, 0x6a, 0x0d, 0xdb, 0xa0, 0x91, 0xa5, 0x2e, 0x40, 0x61, 0x82, -- 0xd8, 0xa7, 0x77, 0x5c, 0x47, 0xc4, 0x9a, 0x5c, 0x6e, 0xec, 0xb8, 0x44, -- 0xd4, 0x03, 0xcf, 0xa7, 0xa3, 0xba, 0x11, 0x76, 0x80, 0x1a, 0xc9, 0x19, -- 0xd6, 0xf4, 0xa2, 0x50, 0x8e, 0x12, 0xd5, 0x4d, 0x94, 0x1c, 0x47, 0x1d, -- 0xcd, 0x7a, 0xe5, 0x4a, 0xbb, 0xf0, 0xeb, 0x52, 0x72, 0x01, 0x55, 0xef, -- 0x82, 0xb2, 0x77, 0x43, 0xb9, 0x18, 0x9b, 0x16, 0x8a, 0x08, 0x4d, 0x13, -- 0xb4, 0x5b, 0x0b, 0xfe, 0x9c, 0x95, 0x55, 0x73, 0x8c, 0xf6, 0x9f, 0xc8, -- 0xa4, 0x2a, 0x94, 0xfa, 0xcc, 0xa7, 0x71, 0xc4, 0xfd, 0x39, 0x3e, 0x14, -- 0x5d, 0xec, 0x6f, 0xcb, 0x9c, 0x67, 0x24, 0xe9, 0xeb, 0xaf, 0x51, 0x0e, -- 0xbb, 0xd2, 0xd8, 0xdd, 0x2b, 0x48, 0x62, 0x1a, 0x46, 0x54, 0x2a, 0x57, -- 0x59, 0x51, 0xe4, 0x9e, 0xef, 0x10, 0x01, 0xf9, 0x07, 0xb4, 0xf3, 0x8c, -- 0x2e, 0xa9, 0xa1, 0x43, 0x28, 0x26, 0x86, 0xd0, 0x01, 0xde, 0xad, 0x86, -- 0x9b, 0xea, 0x26, 0x96, 0x40, 0xfb, 0x8d, 0xf8, 0x71, 0x38, 0xed, 0xd5, -- 0x09, 0x51, 0x73, 0x46, 0x02, 0x69, 0x7e, 0x5b, 0x02, 0xb0, 0x63, 0x55, -- 0x6c, 0xb9, 0x29, 0x0b, 0x4d, 0x6e, 0x93, 0x4d, 0x23, 0x4c, 0xaf, 0x4a, -- 0xab, 0xe9, 0x20, 0x6f, 0x13, 0xbe, 0x80, 0xc7, 0xf9, 0xe2, 0xe2, 0xbe, -- 0x76, 0x03, 0x27, 0x34, 0x9d, 0xef, 0x93, 0x26, 0x1d, 0x23, 0xca, 0x3d, -- 0xc4, 0x6e, 0x9e, 0xec, 0x34, 0x54, 0xa1, 0x73, 0x6c, 0x05, 0x2d, 0xeb, -- 0x00, 0x8b, 0xb8, 0x02, 0xd7, 0xd5, 0xb3, 0xf3, 0x41, 0x25, 0x52, 0x5c, -- 0x20, 0x6d, 0x61, 0x53, 0x2c, 0x86, 0xdd, 0x90, 0x45, 0xf9, 0x10, 0x46, -- 0x95, 0x71, 0x11, 0xbf, 0xd0, 0x98, 0x73, 0x35, 0x95, 0x60, 0x29, 0x03, -- 0x38, 0x11, 0xb0, 0x13, 0x81, 0x39, 0xb9, 0x60, 0x09, 0x51, 0x42, 0xf4, -- 0x38, 0x95, 0xf6, 0xe2, 0xf8, 0x3c, 0x50, 0x01, 0xbc, 0xf9, 0x20, 0xe6, -- 0x3c, 0x9c, 0x76, 0x26, 0xb2, 0x33, 0x4c, 0x91, 0x28, 0x75, 0x99, 0x85, -- 0xe5, 0x40, 0xad, 0xd8, 0xa5, 0x98, 0x56, 0xad, 0x22, 0x81, 0xda, 0xcd, -- 0xda, 0x14, 0x29, 0x5d, 0x87, 0x36, 0x0a, 0x49, 0xf7, 0xa6, 0xb1, 0x0f, -- 0x2c, 0xf9, 0x9c, 0x79, 0x04, 0x66, 0x43, 0x2c, 0xed, 0x6f, 0x22, 0x0a, -- 0xa8, 0x0a, 0x30, 0x88, 0xac, 0x20, 0x75, 0xc2, 0x20, 0x7a, 0x53, 0x60, -- 0xd4, 0x64, 0xf3, 0x71, 0x79, 0xdf, 0xc0, 0x68, 0x9b, 0x7c, 0x42, 0x31, -- 0xaf, 0xa6, 0xf2, 0xc0, 0x80, 0x80, 0xcc, 0x94, 0x18, 0x05, 0x57, 0x6b, -- 0xbc, 0xd1, 0x27, 0x6e, 0x8c, 0xcd, 0x73, 0xcd, 0x9b, 0x3f, 0x8c, 0x9a, -- 0x4b, 0xeb, 0x06, 0xa0, 0x26, 0xab, 0x23, 0x72, 0x30, 0x4c, 0x8f, 0x0a, -- 0x8a, 0x98, 0x8e, 0xd4, 0xec, 0x75, 0x2b, 0xf4, 0x15, 0x4b, 0x03, 0x97, -- 0x4b, 0x98, 0x45, 0x35, 0x6d, 0xae, 0xb5, 0xdb, 0x58, 0x9f, 0x8e, 0x60, -- 0xb9, 0x7e, 0xa2, 0x04, 0xa0, 0x14, 0xa0, 0x24, 0x40, 0x9b, 0xa9, 0x70, -- 0xa3, 0x21, 0x05, 0x68, 0xda, 0xff, 0x8a, 0xfd, 0xbf, 0x90, 0x73, 0x58, -- 0xab, 0xa9, 0xe4, 0x53, 0xb7, 0xdd, 0x6d, 0xf4, 0x27, 0x57, 0x1d, 0x5c, -- 0xb9, 0x1b, 0x7e, 0x3b, 0x74, 0x3f, 0x60, 0x41, 0xf3, 0x54, 0x03, 0x1a, -- 0xd9, 0x48, 0xb5, 0xdd, 0x58, 0x20, 0x78, 0x36, 0x7c, 0xb6, 0x39, 0xfc, -- 0xd4, 0x6d, 0x71, 0x32, 0xb6, 0x6e, 0x4a, 0x0c, 0xd3, 0x99, 0x3e, 0xb2, -- 0x25, 0x10, 0x60, 0x19, 0x7c, 0x28, 0x8a, 0x56, 0x57, 0xa0, 0xdc, 0x50, -- 0xbe, 0xaa, 0x1b, 0xa1, 0xcf, 0x7c, 0x91, 0xa0, 0x04, 0x43, 0x8a, 0xfc, -- 0x81, 0xb0, 0xae, 0xec, 0xe5, 0x34, 0xbd, 0xeb, 0x82, 0x0c, 0xc5, 0x61, -- 0x96, 0x72, 0x54, 0xb4, 0xda, 0x61, 0xf8, 0x6c, 0xe5, 0xa9, 0xf7, 0xab, -- 0xc3, 0xfd, 0xf3, 0x8b, 0x61, 0xfb, 0xca, 0x89, 0xd2, 0x59, 0x78, 0xfb, -- 0xcc, 0x4c, 0x04, 0xae, 0xc0, 0x86, 0xc5, 0x84, 0xcb, 0x5e, 0x96, 0x0e, -- 0xae, 0x89, 0x87, 0x27, 0xa3, 0xb3, 0xf6, 0x39, 0xff, 0xa6, 0x03, 0x40, -- 0x07, 0x12, 0x22, 0x1c, 0x9e, 0xa3, 0x7c, 0xca, 0x33, 0xa0, 0x71, 0x11, -- 0xeb, 0x9d, 0x69, 0x9c, 0x3f, 0x97, 0x1e, 0x4e, 0x8a, 0x29, 0x9b, 0x44, -- 0xa4, 0x9b, 0x16, 0x78, 0x6e, 0x54, 0x0a, 0x70, 0xff, 0xec, 0xdd, 0xd1, -- 0xbb, 0xaf, 0xf7, 0x1a, 0x77, 0xe6, 0xb4, 0x28, 0xaa, 0x4c, 0x7d, 0xf4, -- 0x82, 0xdb, 0x2b, 0xab, 0x25, 0xf9, 0x89, 0x0e, 0xf1, 0xa1, 0xe3, 0x12, -- 0x67, 0x38, 0x2d, 0x01, 0x27, 0xac, 0x6e, 0xc4, 0x34, 0xa7, 0x65, 0x23, -- 0x58, 0xe2, 0x19, 0x3e, 0x5c, 0xc3, 0xb3, 0x2a, 0xc6, 0x37, 0xd5, 0x53, -- 0x31, 0x76, 0x7d, 0x72, 0xe4, 0xf7, 0xf9, 0xc9, 0xc1, 0xb7, 0xe7, 0x4f, -- 0x83, 0xb8, 0xef, 0xba, 0x65, 0xb8, 0x51, 0xa4, 0x71, 0xbc, 0x11, 0xa7, -- 0x49, 0x3e, 0x12, 0xf4, 0xfd, 0x40, 0xcd, 0xe5, 0xce, 0x63, 0xe5, 0xcb, -- 0x13, 0xb0, 0x29, 0x84, 0x4d, 0x5d, 0x79, 0xb1, 0x74, 0x98, 0xcd, 0x01, -- 0x5c, 0x52, 0xdf, 0x6a, 0x15, 0x74, 0x54, 0x20, 0xb3, 0xca, 0x05, 0x41, -- 0xad, 0x82, 0x28, 0x3a, 0x8e, 0x61, 0x20, 0xc4, 0x58, 0xf2, 0x59, 0xbf, -- 0x2d, 0xee, 0x10, 0xa7, 0x20, 0xf9, 0x6f, 0xba, 0xe4, 0x9e, 0x81, 0x17, -- 0xe1, 0x00, 0x35, 0x56, 0x15, 0x70, 0xd4, 0x95, 0xb7, 0x68, 0x72, 0x86, -- 0x0a, 0xf1, 0x43, 0xd5, 0xcd, 0x4e, 0xf5, 0xa9, 0xbd, 0xad, 0x2d, 0x6f, -- 0xce, 0x92, 0xe0, 0xc2, 0xe1, 0xef, 0xa7, 0x15, 0x48, 0x9f, 0xe9, 0x6f, -- 0x22, 0x8a, 0xf4, 0xd3, 0xa8, 0x22, 0x92, 0x92, 0x7f, 0x25, 0x55, 0x7c, -- 0xbe, 0x8a, 0xd9, 0xea, 0xf4, 0x7f, 0x05, 0x4d, 0x18, 0xda, 0xfb, 0x7f, -- 0x27, 0xaa, 0x48, 0x3f, 0x8d, 0x2c, 0xd2, 0x06, 0x5d, 0xac, 0xc8, 0x49, -- 0xfe, 0x3d, 0xeb, 0x17, 0x62, 0x18, 0xcf, 0x06, 0x0e, 0x8d, 0xf9, 0x31, -- 0x8a, 0x69, 0x98, 0x68, 0x59, 0x48, 0x00, 0xd1, 0x3c, 0xd3, 0xd9, 0x6e, -- 0xc0, 0x12, 0x9c, 0x85, 0xa0, 0x5d, 0x66, 0x8c, 0xef, 0x06, 0x85, 0xc6, -- 0xdd, 0xb7, 0xf9, 0x28, 0x07, 0x72, 0xb4, 0x25, 0xf8, 0x41, 0x42, 0x5d, -- 0x51, 0x38, 0xf3, 0xaf, 0xa7, 0xb5, 0xff, 0x23, 0x38, 0xd0, 0x33, 0x8f, -- 0xa5, 0xfd, 0x29, 0x34, 0xf7, 0xec, 0xda, 0xd1, 0x5c, 0x57, 0x41, 0x3f, -- 0xe3, 0x4d, 0xff, 0x68, 0x92, 0x6b, 0xc9, 0x1e, 0x1d, 0x72, 0x95, 0xad, -- 0x3a, 0xdc, 0xd4, 0x25, 0xa9, 0xd8, 0x88, 0x6e, 0x08, 0x21, 0x9b, 0x35, -- 0x09, 0x24, 0xc6, 0x76, 0x54, 0x3a, 0x76, 0xa9, 0xbc, 0x81, 0xf5, 0x58, -- 0xd0, 0x90, 0x68, 0x04, 0xd1, 0x9d, 0xf9, 0xec, 0xb7, 0xb0, 0x47, 0xa3, -- 0x74, 0xce, 0xa7, 0x1f, 0x49, 0xd2, 0xb0, 0xd0, 0xb7, 0x1c, 0x0c, 0x71, -- 0x13, 0x75, 0xc4, 0x14, 0xc2, 0x19, 0x0c, 0x00, 0x58, 0x4b, 0xb2, 0x7a, -- 0x94, 0xd6, 0x1b, 0x7c, 0xb4, 0x23, 0xb3, 0x60, 0x55, 0x82, 0xd5, 0xff, -- 0x29, 0x3c, 0xf4, 0xd9, 0xa7, 0x91, 0xf3, 0x3f, 0xe3, 0x66, 0xfd, 0x6f, -- 0x44, 0xbc, 0x1d, 0xdb, 0xbc, 0xa1, 0xc8, 0x58, 0xa2, 0x19, 0xca, 0xc5, -- 0xb2, 0x29, 0x38, 0x27, 0x4e, 0x84, 0xc7, 0x22, 0x1e, 0x9d, 0x7e, 0xf7, -- 0x5c, 0x02, 0xdf, 0xce, 0x63, 0x30, 0xe7, 0xe3, 0xd7, 0xfb, 0xa7, 0x1d, -- 0x37, 0xc3, 0x15, 0x29, 0xfc, 0x8b, 0x7c, 0xc0, 0x6a, 0x15, 0x9b, 0xe0, -- 0x5e, 0xea, 0x2f, 0x4c, 0xe2, 0x5d, 0x46, 0x46, 0x33, 0x92, 0xda, 0xf3, -- 0x82, 0x16, 0x2b, 0x1e, 0x63, 0xcc, 0x52, 0xf5, 0x33, 0x76, 0x38, 0x8d, -- 0x67, 0x93, 0x2d, 0xf9, 0x73, 0x70, 0xf9, 0xb7, 0x49, 0xac, 0xea, 0x85, -- 0x50, 0xac, 0x8d, 0xb4, 0x38, 0x85, 0xb7, 0xcd, 0xeb, 0x55, 0xe5, 0x55, -- 0xab, 0xbd, 0xe0, 0x94, 0x27, 0x9a, 0xe9, 0x09, 0x18, 0xd3, 0x55, 0xf3, -- 0x12, 0x9a, 0x8b, 0xf0, 0xb6, 0x05, 0x9d, 0x1e, 0x38, 0xd7, 0xfc, 0xf5, -- 0x56, 0xd0, 0x94, 0x6b, 0xbf, 0xe3, 0x33, 0x6b, 0xbd, 0x23, 0x81, 0x87, -- 0x3b, 0x93, 0xb6, 0x18, 0xe1, 0x4d, 0x47, 0x15, 0xf4, 0x13, 0x7f, 0x09, -- 0x7b, 0x03, 0xe7, 0xfe, 0x57, 0x11, 0xee, 0x3d, 0xbb, 0xf3, 0xfd, 0x5d, -- 0x2b, 0xcf, 0xbb, 0x7d, 0x97, 0x2a, 0x09, 0x8a, 0x47, 0x36, 0x1f, 0xe7, -- 0x8b, 0x74, 0xaa, 0x49, 0x86, 0x0f, 0x55, 0xeb, 0x68, 0x17, 0x3b, 0x68, -- 0x4e, 0x88, 0x94, 0xed, 0x76, 0x65, 0xc4, 0x26, 0xfc, 0xab, 0x3c, 0x97, -- 0x58, 0x02, 0x2f, 0xf6, 0x0e, 0xc7, 0x53, 0xb5, 0x74, 0x09, 0xfb, 0x47, -- 0x46, 0x29, 0x1e, 0x89, 0x93, 0x92, 0xe0, 0xa0, 0x06, 0xf4, 0xd0, 0xce, -- 0x8b, 0xe7, 0x3b, 0x49, 0xc5, 0xc5, 0xed, 0x73, 0xae, 0x08, 0x25, 0x0d, -- 0x3c, 0x1d, 0x3e, 0xd9, 0x7a, 0x3a, 0x7c, 0x9a, 0xf8, 0xba, 0x91, 0xa3, -- 0xcc, 0x3a, 0x20, 0xc6, 0x19, 0xa1, 0x32, 0xc8, 0x79, 0x7a, 0x77, 0x78, -- 0xc0, 0xac, 0xda, 0x12, 0x4e, 0x5b, 0xea, 0x9d, 0x81, 0x02, 0xd1, 0xaa, -- 0x0d, 0x5d, 0x8e, 0x6a, 0x97, 0x52, 0xda, 0xb1, 0x1c, 0x89, 0xd1, 0x26, -- 0x42, 0xf4, 0xe7, 0x6e, 0x24, 0xcc, 0x2c, 0x85, 0x4c, 0x75, 0x65, 0xba, -- 0x20, 0x28, 0xc2, 0x45, 0x09, 0x96, 0x6c, 0xf8, 0x70, 0xfd, 0x89, 0xaa, -- 0x26, 0x3d, 0xb5, 0xec, 0x8e, 0x12, 0x3a, 0x53, 0x63, 0x24, 0x5c, 0x81, -- 0x5c, 0xca, 0x56, 0xfc, 0xcc, 0xfa, 0x8a, 0xc5, 0xcf, 0x37, 0x52, 0x2a, -- 0x2c, 0xf8, 0x05, 0x77, 0x53, 0x07, 0x0a, 0x84, 0x07, 0xd9, 0x96, 0x8a, -- 0x12, 0xa8, 0xfa, 0xb9, 0x3e, 0x58, 0xb7, 0x4b, 0xca, 0x62, 0x67, 0xb8, -- 0xb7, 0x5a, 0x2c, 0xa6, 0x6d, 0x14, 0xf2, 0x7f, 0xb8, 0xdc, 0x5a, 0xf3, -- 0x6d, 0x50, 0x67, 0xd3, 0x79, 0x56, 0x6b, 0x29, 0xb9, 0xe4, 0xe5, 0xc9, -- 0xe9, 0xc5, 0xab, 0xdb, 0x74, 0x1a, 0xc5, 0x78, 0x30, 0x8a, 0x9f, 0x15, -- 0xde, 0x73, 0xd6, 0x5c, 0x7e, 0x33, 0x48, 0x8e, 0x3a, 0x77, 0x39, 0x42, -- 0x41, 0x89, 0xbe, 0x28, 0x17, 0xe8, 0xe2, 0xe2, 0xc7, 0xd3, 0xc3, 0x57, -- 0x2f, 0xd9, 0x16, 0xfc, 0x05, 0x1b, 0xe4, 0xab, 0x86, 0x69, 0x98, 0x4b, -- 0xbc, 0xc6, 0x37, 0xe3, 0x0f, 0xaf, 0x8f, 0xce, 0x4f, 0x8f, 0x4f, 0x0e, -- 0x5e, 0xbd, 0xfc, 0x81, 0x5d, 0x98, 0xb4, 0x7a, 0xf7, 0xc1, 0xbb, 0xee, -- 0x33, 0x97, 0xee, 0x10, 0x97, 0x5b, 0x3a, 0xfc, 0xfe, 0xc3, 0xe1, 0xbb, -- 0xef, 0x5e, 0xbd, 0xbc, 0x4d, 0xcb, 0x3e, 0xcf, 0x4f, 0xde, 0x66, 0x93, -- 0x6c, 0x47, 0xc5, 0xd3, 0x60, 0x8d, 0x2e, 0x50, 0x7f, 0x6b, 0xc1, 0xb1, -- 0x83, 0x0f, 0x84, 0x95, 0xc9, 0x5d, 0xe6, 0x2b, 0x1c, 0xb5, 0x05, 0xfc, -- 0x20, 0x8a, 0xad, 0x99, 0xd2, 0xfa, 0xfe, 0xec, 0x78, 0xd8, 0x49, 0x30, -- 0x0e, 0x03, 0xdc, 0x23, 0xc0, 0xab, 0x6d, 0xc8, 0xb7, 0x0a, 0xb8, 0xf5, -- 0x03, 0x97, 0xdc, 0xa6, 0x90, 0x95, 0x0f, 0xc6, 0xd0, 0x09, 0xeb, 0xf2, -- 0xe1, 0xb4, 0xae, 0xf8, 0x98, 0x04, 0xd1, 0xd0, 0x0c, 0x72, 0x64, 0xd0, -- 0x6f, 0x59, 0x64, 0xca, 0x34, 0x36, 0x79, 0xf9, 0xd8, 0x77, 0xf8, 0xde, -- 0x21, 0xd4, 0x70, 0x04, 0x08, 0xe6, 0x76, 0x20, 0x40, 0xb9, 0x92, 0xa0, -- 0xd2, 0x9c, 0x84, 0x30, 0xe2, 0xa2, 0xec, 0x46, 0x49, 0xe7, 0x0a, 0x51, -- 0xd7, 0x1c, 0x1a, 0x6f, 0xe3, 0x2a, 0x85, 0x7e, 0x9b, 0xc9, 0x0f, 0x96, -- 0x9a, 0x16, 0x40, 0xd7, 0x77, 0xa4, 0xc7, 0x35, 0xf1, 0x35, 0xc5, 0x13, -- 0xc9, 0x32, 0x25, 0xe7, 0xee, 0x71, 0xfa, 0xa5, 0x8b, 0x1c, 0x96, 0x8d, -- 0xf5, 0xe8, 0xcc, 0xb1, 0x2f, 0x13, 0xf5, 0x96, 0xdd, 0x99, 0xb3, 0xc3, -- 0x56, 0x38, 0x58, 0xea, 0x8d, 0xf3, 0x4d, 0x97, 0xee, 0xc8, 0x2d, 0x9e, -- 0xbe, 0xbf, 0x08, 0x32, 0x5d, 0xa3, 0x68, 0xb5, 0xe8, 0x10, 0xb6, 0x04, -- 0x65, 0xbf, 0x50, 0xbd, 0x41, 0xaf, 0x5d, 0xc9, 0xc0, 0x4c, 0xfd, 0xc4, -- 0x18, 0xb8, 0x64, 0xb0, 0xcf, 0xa4, 0x8f, 0x44, 0x3f, 0x8d, 0x23, 0x96, -- 0x5c, 0x2f, 0xae, 0xc1, 0x2d, 0x81, 0x48, 0x99, 0x43, 0xdc, 0x0f, 0xfa, -- 0x19, 0x86, 0xfd, 0x88, 0xe3, 0x6d, 0x33, 0x4a, 0xea, 0xbb, 0x6f, 0x47, -- 0xea, 0xbb, 0xbe, 0x79, 0x9c, 0x0e, 0xd2, 0x4c, 0x46, 0x06, 0x9b, 0x37, -- 0xbb, 0x15, 0x46, 0x44, 0x79, 0x1d, 0xa8, 0xfd, 0x72, 0x7d, 0x01, 0x79, -- 0x5b, 0x4a, 0xf8, 0x72, 0x76, 0x3a, 0x82, 0xbe, 0x0c, 0x52, 0x59, 0xbd, -- 0x4d, 0xe6, 0x53, 0xb4, 0x66, 0xab, 0x4e, 0xd0, 0x20, 0xd9, 0xc4, 0x8e, -- 0x45, 0xfd, 0xb1, 0x25, 0x20, 0x33, 0x2b, 0x1c, 0x5c, 0xf8, 0xa8, 0x3d, -- 0x0e, 0xba, 0xeb, 0x0c, 0xc0, 0x42, 0x41, 0xa7, 0xc1, 0x45, 0x84, 0x47, -- 0xc6, 0x2f, 0x70, 0xc8, 0x5a, 0x10, 0xca, 0x8e, 0x08, 0x51, 0xde, 0x17, -- 0xa1, 0x24, 0xcd, 0xb8, 0x81, 0x50, 0x31, 0xd4, 0x00, 0x5a, 0xf6, 0x87, -- 0xac, 0xc8, 0x6b, 0xae, 0x92, 0xde, 0xd5, 0xb4, 0x18, 0x8d, 0x68, 0x52, -- 0x3d, 0x87, 0xfd, 0x7e, 0x41, 0x6c, 0xf3, 0x0a, 0x22, 0x6f, 0xdf, 0xd0, -- 0xea, 0xfc, 0x61, 0x45, 0xcd, 0x14, 0xf4, 0xb5, 0x2a, 0x37, 0x17, 0x7b, -- 0x6b, 0xc8, 0xe6, 0xb6, 0xaf, 0xa8, 0x69, 0x72, 0x1f, 0x14, 0x5c, 0x43, -- 0x2c, 0x16, 0x7f, 0x6a, 0xfd, 0x47, 0x61, 0xbc, 0x9c, 0x4b, 0xea, 0xb3, -- 0x3e, 0x95, 0xf9, 0x80, 0xe5, 0x68, 0x2d, 0x8b, 0xbc, 0x5a, 0x51, 0xae, -- 0xfe, 0x22, 0xe9, 0xfd, 0x3b, 0x0f, 0x62, 0xa7, 0xcf, 0x3f, 0x77, 0xff, -- 0xb3, 0x67, 0x15, 0x4b, 0xb8, 0x46, 0x94, 0x0c, 0xbe, 0xe6, 0x22, 0x11, -- 0x95, 0x95, 0x49, 0xe9, 0xa8, 0x8a, 0xc2, 0x6e, 0xc3, 0x95, 0xad, 0xe7, -- 0xb3, 0xab, 0x9f, 0x76, 0x06, 0x3b, 0xdb, 0xdb, 0xdb, 0xbf, 0x0c, 0x17, -- 0xbc, 0x74, 0x97, 0x68, 0x9e, 0x7e, 0x0e, 0x17, 0xf9, 0x98, 0x0d, 0xf9, -- 0xb4, 0x99, 0x79, 0xca, 0x4d, 0x6f, 0x49, 0x7f, 0x5b, 0xc1, 0xcd, 0x5f, -- 0x8f, 0x17, 0x83, 0x79, 0xd1, 0x15, 0x22, 0x73, 0xb1, 0x2c, 0xe7, 0x41, -- 0xb9, 0xbf, 0x0f, 0xef, 0x4e, 0x5e, 0x1f, 0x1e, 0xef, 0xff, 0x68, 0x21, -- 0xb6, 0x0e, 0x36, 0x81, 0x07, 0xf2, 0x21, 0x4b, 0xab, 0xfb, 0x0f, 0x55, -- 0x56, 0xd3, 0x97, 0x1b, 0x4f, 0x36, 0x91, 0xf9, 0x1a, 0xd5, 0xd6, 0xbd, -- 0xca, 0x1a, 0x35, 0xc2, 0x35, 0x62, 0xc9, 0xdf, 0xde, 0xc3, 0xb6, 0xeb, -- 0xa9, 0x11, 0xf8, 0x5a, 0xb3, 0x37, 0x64, 0x34, 0xbd, 0xa9, 0xf2, 0xbf, -- 0xd3, 0xbd, 0xc3, 0xd8, 0x7e, 0x71, 0x3c, 0xf3, 0x85, 0x22, 0x28, 0xd4, -- 0x09, 0xff, 0x96, 0x7c, 0x75, 0xfc, 0x2d, 0x87, 0x91, 0x3b, 0xa5, 0x66, -- 0x26, 0x29, 0xfb, 0xc9, 0x17, 0xcf, 0x76, 0x76, 0x37, 0x83, 0x3a, 0xea, -- 0x9c, 0x8c, 0xc2, 0x87, 0x33, 0x72, 0xab, 0xff, 0x5d, 0x03, 0x04, 0x02, -- 0xae, 0xec, 0x7d, 0x8c, 0x88, 0x6d, 0xb1, 0x5b, 0x0e, 0xa0, 0x73, 0xf0, -- 0x05, 0xd7, 0x80, 0xf9, 0xe3, 0x44, 0x91, 0x08, 0x2c, 0xe7, 0xc2, 0x67, -- 0x05, 0x0d, 0x83, 0xf2, 0x80, 0x09, 0x0d, 0x47, 0xf3, 0x4b, 0xba, 0x65, -- 0x93, 0x7f, 0xb4, 0xac, 0xf3, 0xa8, 0xa7, 0x8a, 0x56, 0x7b, 0x5a, 0xb1, -- 0x97, 0x98, 0xe5, 0x8f, 0xe4, 0xa5, 0xfd, 0xf6, 0x45, 0x1c, 0x59, 0x97, -- 0xb0, 0x53, 0x26, 0xc6, 0xb0, 0x81, 0xdc, 0x82, 0xda, 0xc8, 0x1c, 0xd3, -- 0xe8, 0x4b, 0x9b, 0x84, 0xf9, 0x06, 0x71, 0xf8, 0xa7, 0x9b, 0x57, 0xef, -- 0xfc, 0xec, 0xb4, 0xd7, 0x57, 0x3d, 0x85, 0x3a, 0x18, 0xd0, 0xdf, 0x34, -- 0x5e, 0x88, 0xf0, 0xcf, 0xb6, 0x9f, 0x3d, 0xdd, 0x54, 0xa3, 0x07, 0xc6, -- 0x29, 0x25, 0x25, 0x62, 0xcc, 0x7f, 0x7c, 0xe9, 0xca, 0x73, 0x0a, 0xf6, -- 0x85, 0x4f, 0xb4, 0x23, 0xd2, 0x6b, 0xce, 0x52, 0x0c, 0x26, 0x7d, 0xc5, -- 0xb5, 0x5f, 0x19, 0x15, 0xa1, 0x7b, 0x06, 0xb9, 0x0f, 0xc3, 0x8c, 0x4b, -- 0x27, 0x3f, 0x6d, 0x2d, 0xa4, 0x1b, 0xc3, 0x4b, 0xfb, 0xad, 0x6b, 0x21, -- 0x7d, 0x21, 0x51, 0x2d, 0x83, 0xe4, 0x50, 0x7e, 0x78, 0x85, 0xdb, 0x0b, -- 0xac, 0x48, 0x53, 0xab, 0xbd, 0x29, 0xce, 0xff, 0x1e, 0x4e, 0x72, 0xe8, -- 0x1c, 0xa4, 0x0a, 0x6d, 0xe3, 0x17, 0xd0, 0x32, 0x5c, 0xaa, 0x8e, 0x0a, -- 0x3c, 0x0f, 0x4f, 0x0f, 0xaf, 0xbf, 0xe4, 0x9f, 0x5d, 0xd3, 0xe2, 0xcf, -- 0x9d, 0xc6, 0xfe, 0x4f, 0x98, 0x56, 0x30, 0x2f, 0xb7, 0xa2, 0x3a, 0xb7, -- 0x48, 0x75, 0xae, 0x1f, 0xdf, 0xbb, 0xdb, 0x9d, 0xe1, 0x76, 0xa7, 0x93, -- 0xf3, 0x0d, 0x17, 0x4d, 0x6a, 0x62, 0x3a, 0xf1, 0x84, 0x0c, 0xfc, 0x95, -- 0xfd, 0x94, 0x60, 0x10, 0x4e, 0x07, 0x73, 0xb5, 0x8c, 0xbb, 0x81, 0xc6, -- 0xf8, 0x65, 0x07, 0x74, 0x10, 0x0e, 0xea, 0xc9, 0xd3, 0xe8, 0x64, 0xd2, -- 0xa0, 0x76, 0x7e, 0xdb, 0xa0, 0x76, 0x7e, 0xd7, 0x41, 0xed, 0xfe, 0xb6, -- 0x41, 0xed, 0xfe, 0x5e, 0x83, 0x2a, 0x07, 0x96, 0x94, 0xd1, 0x8d, 0x51, -- 0x7c, 0xa6, 0xe1, 0x5b, 0x29, 0x4b, 0x3c, 0x8c, 0xe8, 0xc7, 0xec, 0xf4, -- 0x42, 0x39, 0xfa, 0xe0, 0x50, 0xdf, 0xf5, 0x21, 0x34, 0x22, 0x30, 0xc4, -- 0x91, 0xb3, 0x2a, 0xab, 0xb8, 0x90, 0xc3, 0xaa, 0x59, 0xe4, 0x4e, 0x9c, -- 0xb5, 0xcb, 0xb9, 0x75, 0xa2, 0xb9, 0xde, 0x08, 0x1c, 0x82, 0x4c, 0x17, -- 0xcd, 0x73, 0x9c, 0xe5, 0x8a, 0xa0, 0xfa, 0x58, 0x84, 0xf6, 0xf3, 0xe6, -- 0x84, 0x19, 0x3a, 0xa7, 0x53, 0x27, 0x73, 0x35, 0x25, 0x53, 0x0e, 0xb8, -- 0xe0, 0xb8, 0x0c, 0x79, 0x38, 0x99, 0x2c, 0x67, 0x0b, 0x83, 0xb5, 0xc8, -- 0xe7, 0x1a, 0xe4, 0xcb, 0xe3, 0xa5, 0xcb, 0xf9, 0xaa, 0xb0, 0x5b, 0xad, -- 0x1f, 0x19, 0x76, 0xc6, 0xd3, 0xa5, 0x14, 0x62, 0xca, 0x04, 0x5d, 0x93, -- 0xc3, 0xfa, 0x83, 0x72, 0xdb, 0x7d, 0x87, 0x2e, 0x01, 0xe1, 0x5b, 0x45, -- 0x58, 0x11, 0xc1, 0xdf, 0x47, 0xae, 0x74, 0x16, 0x9b, 0x39, 0x2a, 0x85, -- 0x83, 0xb9, 0x54, 0x63, 0x41, 0xfe, 0x5c, 0x50, 0x93, 0x0c, 0x80, 0x3d, -- 0xab, 0xed, 0x00, 0xdd, 0x36, 0xea, 0xd0, 0x3e, 0x8d, 0xf8, 0x99, 0xc1, -- 0xad, 0x56, 0xb5, 0x1e, 0x15, 0x55, 0x26, 0x49, 0x21, 0x58, 0x87, 0xc8, -- 0x66, 0x54, 0x8d, 0xf3, 0xfc, 0xf7, 0x74, 0x92, 0x49, 0xaf, 0xe8, 0xe6, -- 0xe1, 0x0d, 0x4b, 0x65, 0xbb, 0x64, 0xb7, 0xc2, 0xcd, 0xf2, 0xbb, 0x25, -- 0x11, 0x87, 0x6e, 0xbf, 0xfe, 0x5f, 0xb4, 0x61, 0xf4, 0xff, 0x28, 0x3c, -- 0x5e, 0xe5, 0xb3, 0x7c, 0x9a, 0xc2, 0x98, 0xa4, 0x4b, 0x23, 0x68, 0xb6, -- 0xd3, 0x2c, 0xe5, 0xcc, 0x74, 0x33, 0x61, 0x5f, 0x67, 0x1f, 0x45, 0xf9, -- 0x8f, 0x2f, 0x7b, 0x05, 0x4c, 0xba, 0x66, 0xb3, 0x19, 0x9e, 0xdd, 0x3f, -- 0x3f, 0x38, 0x3a, 0x6a, 0xd8, 0x11, 0x79, 0xf1, 0x24, 0xb9, 0x03, 0xa1, -- 0x68, 0x15, 0xa7, 0xb9, 0x70, 0x38, 0x20, 0x86, 0x1b, 0xd9, 0x1c, 0x38, -- 0xc3, 0x13, 0xc8, 0x98, 0x5c, 0x43, 0x34, 0xad, 0x72, 0x4b, 0xa9, 0x4d, -- 0xf5, 0x82, 0x9e, 0xb3, 0x75, 0x80, 0x73, 0x1b, 0xae, 0x97, 0x24, 0xeb, -- 0x56, 0xff, 0x68, 0x82, 0x1c, 0xfe, 0xde, 0xa4, 0xd7, 0x91, 0xfb, 0x78, -- 0x5a, 0x6a, 0x7a, 0xa6, 0xe4, 0x2d, 0x68, 0xf2, 0x22, 0x23, 0xe8, 0xb0, -- 0x06, 0x28, 0x14, 0x48, 0x23, 0xb4, 0xc1, 0x42, 0x3d, 0xb4, 0xfc, 0xd5, -- 0x0e, 0xc8, 0x4b, 0x35, 0x43, 0x55, 0xed, 0xda, 0xb7, 0x4d, 0x2e, 0xed, -- 0x4a, 0xba, 0x8b, 0x08, 0xb1, 0x67, 0x97, 0xf6, 0x5f, 0xd4, 0x6a, 0x16, -- 0xc9, 0x14, 0xaa, 0xbe, 0x06, 0xb5, 0xd8, 0xb5, 0x6a, 0x9b, 0xbf, 0xee, -- 0xe7, 0x13, 0x07, 0xcb, 0x9d, 0x4c, 0x8b, 0x2b, 0xae, 0x32, 0xed, 0x8c, -- 0x75, 0x1d, 0x65, 0x51, 0x45, 0xcc, 0x34, 0x6d, 0x3b, 0x0a, 0x8e, 0x3c, -- 0x71, 0xbb, 0x97, 0x0c, 0xe6, 0x08, 0xa2, 0x9d, 0x67, 0x75, 0x39, 0x4e, -- 0xba, 0x65, 0x4e, 0x7c, 0x37, 0xb0, 0xee, 0x57, 0x57, 0x75, 0x45, 0xa2, -- 0xed, 0x7d, 0xa3, 0x1c, 0x8e, 0x2b, 0x4c, 0xd6, 0x97, 0xfb, 0x8f, 0x46, -- 0x15, 0x3a, 0x70, 0x30, 0x93, 0x4e, 0xa1, 0xb4, 0xea, 0x07, 0x1a, 0xca, -- 0x82, 0x34, 0x8f, 0x85, 0xa5, 0xd4, 0xd9, 0x9a, 0x74, 0x8d, 0x83, 0x87, -- 0x01, 0x43, 0x17, 0xd7, 0xf6, 0x3e, 0x3d, 0x1a, 0x68, 0x5a, 0xb2, 0x96, -- 0xe0, 0x15, 0xac, 0x27, 0xe4, 0x89, 0x69, 0x9e, 0x4e, 0x88, 0x56, 0x19, -- 0x17, 0xb8, 0xb5, 0xd2, 0xb3, 0x3e, 0x47, 0x4d, 0xca, 0x4a, 0xda, 0xb5, -- 0x5f, 0x65, 0x53, 0x94, 0xd6, 0x0a, 0xe7, 0x29, 0xcd, 0xd3, 0x10, 0x07, -- 0x91, 0x93, 0x84, 0xe5, 0x60, 0xce, 0xb5, 0x87, 0xe9, 0x2b, 0xb4, 0x4a, -- 0x8e, 0xee, 0x5b, 0x4b, 0x27, 0x8e, 0x3b, 0x57, 0xe7, 0x65, 0x5c, 0x4c, -- 0x23, 0x1b, 0xbb, 0x61, 0x83, 0x7a, 0x17, 0xdb, 0x1e, 0x71, 0xb0, 0x65, -- 0xb2, 0x87, 0xbc, 0xc0, 0x51, 0xa3, 0x29, 0xb7, 0xd2, 0x8e, 0x66, 0x8a, -- 0xb8, 0x34, 0x38, 0x57, 0x25, 0x2e, 0xee, 0x68, 0xb6, 0x97, 0x1e, 0xb9, -- 0x1b, 0x2d, 0xfe, 0x85, 0x97, 0xe7, 0x15, 0xaf, 0x54, 0x6f, 0xa5, 0x01, -- 0xc6, 0xcc, 0x6d, 0x2b, 0x48, 0x14, 0x2c, 0x2b, 0x28, 0x94, 0xe4, 0x4c, -- 0xca, 0xdd, 0x60, 0x99, 0x63, 0x47, 0x04, 0x76, 0x14, 0x67, 0x92, 0x27, -- 0xa3, 0x61, 0xb8, 0x93, 0x25, 0x54, 0xd3, 0x36, 0x55, 0xef, 0xd7, 0x31, -- 0x8a, 0x1e, 0x38, 0x36, 0x18, 0xa9, 0x2f, 0x21, 0x28, 0xa9, 0xe3, 0x6f, -- 0x59, 0x6f, 0xd5, 0xb0, 0xc7, 0xe6, 0x68, 0xe1, 0xe4, 0x0d, 0x31, 0x05, -- 0xbc, 0x48, 0x14, 0x9e, 0x50, 0x79, 0x29, 0xb8, 0x6e, 0xa4, 0x38, 0x37, -- 0xc0, 0xf0, 0x83, 0x4f, 0x9d, 0x4d, 0x20, 0x36, 0xda, 0x36, 0x96, 0x68, -- 0xca, 0x75, 0x79, 0x50, 0x55, 0x58, 0x0a, 0x4a, 0x3c, 0xf9, 0xfc, 0x69, -- 0x5f, 0x3d, 0x3c, 0xcf, 0xb6, 0x5f, 0x58, 0x55, 0x89, 0xa3, 0xc3, 0x8b, -- 0x37, 0xc4, 0x86, 0xca, 0xf4, 0x32, 0x32, 0xda, 0xf2, 0x67, 0x83, 0x2c, -- 0x2d, 0xaf, 0x39, 0xcb, 0x9d, 0x28, 0x74, 0x50, 0xcd, 0xea, 0xc5, 0x60, -- 0x7b, 0x9b, 0xcb, 0xd2, 0x36, 0x65, 0x4a, 0x09, 0x80, 0xfd, 0xdd, 0xb8, -- 0xf1, 0x7b, 0xe7, 0x83, 0xee, 0x62, 0x82, 0x0f, 0x32, 0xbf, 0xf8, 0x18, -- 0xe1, 0xd8, 0x04, 0x65, 0x4b, 0xdb, 0xc5, 0xa1, 0xbb, 0xca, 0x52, 0xff, -- 0x57, 0x38, 0x03, 0x83, 0x1d, 0xb4, 0x31, 0x6c, 0xbb, 0xfa, 0x58, 0xcd, -- 0x15, 0x80, 0x72, 0xbd, 0x5c, 0x3c, 0x30, 0x9f, 0xb6, 0x0e, 0xf8, 0x6b, -- 0x98, 0x42, 0x83, 0x27, 0x24, 0x5d, 0x00, 0xc6, 0xc1, 0x2e, 0x32, 0x4b, -- 0x78, 0x4f, 0x2c, 0xe1, 0xf7, 0x94, 0xfa, 0x78, 0xd6, 0x2f, 0xdf, 0x9f, -- 0x1d, 0xaf, 0xdc, 0xd7, 0x54, 0x8b, 0x93, 0xba, 0x7a, 0xd1, 0xcd, 0x64, -- 0x25, 0xae, 0xd8, 0x51, 0x54, 0x1c, 0xc5, 0x79, 0x4d, 0x6b, 0xa4, 0xe5, -- 0x3a, 0xe2, 0x52, 0x71, 0x96, 0x89, 0x6a, 0x2c, 0x84, 0x9a, 0xe4, 0xd4, -- 0x60, 0x84, 0xf6, 0x06, 0x70, 0xa5, 0x0f, 0xca, 0x2c, 0x6a, 0xe5, 0x96, -- 0xf8, 0x82, 0x06, 0xa4, 0xa4, 0xc2, 0x1d, 0x72, 0x3a, 0x8a, 0x2b, 0xa6, -- 0x26, 0x36, 0xde, 0xae, 0xc5, 0x95, 0xf9, 0x30, 0x92, 0x82, 0xf8, 0xf2, -- 0xfa, 0x8e, 0xff, 0x35, 0x0a, 0x71, 0x6b, 0x94, 0x76, 0x23, 0xbf, 0xbc, -- 0xcb, 0x97, 0xe1, 0x2a, 0x7d, 0xda, 0x9a, 0x86, 0xf2, 0x53, 0x47, 0xd6, -- 0x9a, 0x02, 0xc4, 0xf0, 0x52, 0x32, 0x4d, 0x80, 0xe1, 0x98, 0x04, 0xb3, -- 0x55, 0xa7, 0xd3, 0x1b, 0x24, 0x24, 0x73, 0xc6, 0x87, 0xac, 0x2b, 0x8f, -- 0x8e, 0xc1, 0x46, 0x3b, 0xf1, 0x5f, 0x47, 0xcb, 0xab, 0x2b, 0xa9, 0x2e, -- 0xb0, 0x2f, 0xc2, 0x4f, 0x65, 0x35, 0xd3, 0x70, 0xc3, 0xac, 0x7f, 0xb1, -- 0xae, 0x09, 0xa0, 0xbd, 0x6b, 0x92, 0x13, 0x39, 0x64, 0x9c, 0x24, 0xf1, -- 0x9e, 0x48, 0xc2, 0x11, 0x4c, 0x15, 0x1f, 0x81, 0x7e, 0xb2, 0xfe, 0xb2, -- 0xfb, 0x1d, 0xd1, 0x01, 0x05, 0x11, 0x6a, 0xec, 0xbc, 0x48, 0xb4, 0x8c, -- 0xd7, 0x39, 0x31, 0xa7, 0x79, 0x1c, 0x06, 0x2e, 0x79, 0xdb, 0xe2, 0xd4, -- 0xd7, 0xea, 0x25, 0x9d, 0x63, 0xfc, 0x57, 0xeb, 0xcf, 0xaa, 0x86, 0x00, -- 0xc3, 0xed, 0xb2, 0x88, 0xae, 0x03, 0xc5, 0x6f, 0xd2, 0xfe, 0x63, 0x1f, -- 0xa2, 0x2f, 0x95, 0x26, 0x0c, 0x43, 0xea, 0xc7, 0x30, 0xe5, 0x69, 0x79, -- 0x4e, 0x99, 0x8f, 0x56, 0xd2, 0x11, 0xeb, 0x1f, 0xf6, 0x9a, 0x45, 0xa8, -- 0x3c, 0x46, 0x5d, 0x16, 0x0d, 0x25, 0xf3, 0x52, 0xb7, 0xbf, 0x23, 0x81, -- 0x7c, 0x52, 0xf2, 0xbd, 0x5c, 0xdc, 0x68, 0x6d, 0xf2, 0x95, 0x82, 0x95, -- 0xb9, 0xcd, 0x3c, 0x25, 0x4b, 0x08, 0xbc, 0x45, 0xef, 0xb3, 0x7a, 0x83, -- 0x07, 0xb3, 0x39, 0xc0, 0x9b, 0xd5, 0x1a, 0xdd, 0x8f, 0xb1, 0x83, 0x25, -- 0x9d, 0xdd, 0x52, 0x49, 0x9d, 0xf8, 0xdb, 0xd4, 0xdd, 0xcc, 0xd1, 0xfd, -- 0x5b, 0xc5, 0xff, 0x46, 0x63, 0xa1, 0xf8, 0xdf, 0xe1, 0x12, 0x0b, 0xd3, -- 0xa0, 0x9a, 0xa0, 0xa0, 0xc8, 0x7c, 0x0a, 0x18, 0xcd, 0x1d, 0x3f, 0x08, -- 0x57, 0x3d, 0x9f, 0x2f, 0x52, 0x30, 0x71, 0xc1, 0xb6, 0xb9, 0xce, 0x6b, -- 0x85, 0x52, 0x35, 0xaf, 0x8d, 0xf9, 0x8d, 0xb1, 0x66, 0x48, 0x49, 0x32, -- 0x14, 0x5e, 0xb6, 0x5c, 0x4c, 0xb3, 0x3a, 0x13, 0xd9, 0x5a, 0x31, 0x79, -- 0x23, 0xf3, 0x1c, 0x1f, 0x1b, 0xe7, 0x3c, 0x34, 0xcc, 0x0f, 0xe9, 0x3a, -- 0x11, 0x47, 0xbf, 0xd6, 0x96, 0x57, 0xfc, 0x9c, 0x7b, 0x03, 0x17, 0x91, -- 0x00, 0x80, 0x28, 0x92, 0xe1, 0x23, 0xab, 0x60, 0x5c, 0x3e, 0x47, 0x51, -- 0x51, 0x43, 0x26, 0xe4, 0x6a, 0xc3, 0x0b, 0x40, 0x80, 0x36, 0x1c, 0x80, -- 0x68, 0x75, 0x06, 0x13, 0x43, 0x5c, 0xe9, 0xc9, 0xc3, 0xbd, 0xbe, 0x01, -- 0xec, 0x88, 0x52, 0x27, 0xe5, 0x04, 0x81, 0xfc, 0x35, 0x5e, 0xb2, 0x32, -- 0x0a, 0xaf, 0x60, 0x54, 0x88, 0xd0, 0x35, 0x77, 0xcf, 0xb1, 0x0a, 0xbd, -- 0x2f, 0x4d, 0x05, 0xee, 0x99, 0xb7, 0xcb, 0xd7, 0x3a, 0x04, 0x17, 0x47, -- 0xe3, 0x8a, 0x52, 0xa9, 0x4b, 0xd1, 0xe1, 0x1b, 0x10, 0x9f, 0x1e, 0x50, -- 0x04, 0x50, 0x3d, 0xbd, 0xf7, 0xe5, 0xa0, 0xd7, 0x0d, 0x74, 0xee, 0x26, -- 0xee, 0x45, 0x36, 0xf5, 0x46, 0x99, 0xca, 0x2e, 0xbd, 0xb8, 0xfa, 0xe1, -- 0xcb, 0x11, 0x1d, 0x80, 0x7a, 0x19, 0x9b, 0xdb, 0x15, 0xbc, 0x0d, 0x9e, -- 0x14, 0xf0, 0x5f, 0x5e, 0x70, 0xef, 0xee, 0xc0, 0x41, 0x62, 0x15, 0xbf, -- 0x46, 0x80, 0xaa, 0xda, 0x0d, 0x46, 0x0e, 0x39, 0xb7, 0xad, 0xa1, 0xee, -- 0xb3, 0x4d, 0xc2, 0x8f, 0xae, 0x69, 0x6e, 0xe7, 0x82, 0xdc, 0xff, 0x6e, -- 0x5f, 0x02, 0xad, 0xf0, 0x3f, 0x6d, 0xbd, 0xac, 0x5c, 0x7d, 0x37, 0x3f, -- 0xfb, 0x13, 0x16, 0x05, 0x58, 0xcb, 0xb2, 0x32, 0x00, 0x52, 0xe1, 0xe6, -- 0xfe, 0x34, 0x74, 0x12, 0xb5, 0x35, 0x91, 0xcc, 0xb3, 0x3b, 0x51, 0x4a, -- 0x23, 0x6e, 0x2b, 0xc7, 0xf8, 0xe7, 0x39, 0x97, 0xd6, 0x1a, 0xa7, 0x74, -- 0x1c, 0xd9, 0x1b, 0x25, 0xf8, 0x04, 0x42, 0x5e, 0x3f, 0x97, 0xca, 0x34, -- 0xeb, 0x74, 0x24, 0x60, 0xb1, 0xfa, 0x79, 0x6c, 0xba, 0xe0, 0x80, 0x81, -- 0x3d, 0xec, 0xc6, 0x9f, 0x06, 0x82, 0x44, 0xa9, 0xd4, 0xad, 0xc0, 0xb2, -- 0xf6, 0x99, 0x6c, 0xcb, 0x5d, 0x3e, 0x7f, 0xb2, 0x3b, 0x08, 0xa4, 0x95, -- 0x7e, 0x67, 0xcc, 0x15, 0x9b, 0x74, 0x8a, 0xb1, 0x94, 0x57, 0x1f, 0x0b, -- 0x73, 0xf8, 0x93, 0xc2, 0x98, 0x40, 0x98, 0x97, 0x3c, 0xfb, 0x89, 0xa5, -- 0x54, 0x2f, 0x3d, 0x2e, 0x48, 0xa7, 0x4a, 0xd8, 0x49, 0x3c, 0xc1, 0xee, -- 0x38, 0xa4, 0xa1, 0xae, 0xa0, 0x14, 0x3e, 0x96, 0x34, 0xd0, 0x0f, 0xf0, -- 0x8b, 0x28, 0xdd, 0x1d, 0xc8, 0x67, 0x83, 0x0b, 0x7c, 0x66, 0xe2, 0xbd, -- 0xa6, 0x9c, 0xb2, 0x9e, 0xa1, 0x81, 0x89, 0xfd, 0x18, 0xf6, 0x25, 0xe9, -- 0x8a, 0xe7, 0xe0, 0x10, 0x47, 0x3a, 0xd2, 0xd1, 0x38, 0xed, 0x3c, 0x7d, -- 0x90, 0x8a, 0x34, 0xc4, 0xad, 0x1f, 0x6e, 0x0d, 0xe8, 0xa4, 0x53, 0x92, -- 0x49, 0x0c, 0xa5, 0x5e, 0xec, 0x51, 0x8e, 0x8c, 0x2d, 0x62, 0x49, 0x81, -- 0x9a, 0xa2, 0x42, 0xbf, 0x49, 0x57, 0xec, 0x4a, 0xae, 0xc8, 0x58, 0x41, -- 0x79, 0x34, 0xba, 0xe5, 0x0c, 0x6a, 0xa1, 0x2e, 0xa6, 0xe2, 0xd7, 0xe6, -- 0x96, 0x1f, 0x99, 0x2b, 0xe7, 0x14, 0x0a, 0xf8, 0x68, 0x50, 0xa0, 0xa2, -- 0x89, 0xa0, 0x83, 0xdc, 0x55, 0x13, 0x84, 0x1e, 0x29, 0xc5, 0xa4, 0x7e, -- 0xd2, 0xe4, 0x08, 0x59, 0xbe, 0x85, 0x84, 0xaa, 0x60, 0x78, 0x00, 0x90, -- 0x1d, 0x19, 0xa8, 0xe5, 0x8a, 0xea, 0xeb, 0x49, 0x8c, 0x5a, 0x80, 0x71, -- 0xc8, 0x55, 0x3d, 0x08, 0x24, 0xac, 0x61, 0x3b, 0x41, 0x68, 0x27, 0x8a, -- 0x17, 0xbd, 0xac, 0x17, 0x1f, 0x80, 0x12, 0xf9, 0x01, 0xa8, 0x51, 0x17, -- 0x01, 0x30, 0x3c, 0x3e, 0xc0, 0x72, 0x09, 0xb0, 0x17, 0x49, 0xf8, 0xb9, -- 0x96, 0xf1, 0x20, 0x4d, 0xee, 0x4a, 0xac, 0xe8, 0x8f, 0xae, 0x5c, 0x0b, -- 0xec, 0xde, 0x6c, 0xfe, 0xad, 0x4c, 0xa0, 0xa7, 0xd1, 0xc0, 0xd8, 0xbf, -- 0xfe, 0x01, 0x70, 0x1a, 0x8e, 0x42, 0xe8, 0xe2, 0xc8, 0x4a, 0xc6, 0x1b, -- 0x6f, 0xe1, 0x6d, 0x80, 0x4e, 0x24, 0x21, 0x72, 0x39, 0x37, 0xbf, 0xfe, -- 0xc3, 0x03, 0x83, 0x90, 0xaf, 0x45, 0xe7, 0xb4, 0xe0, 0x05, 0x87, 0xbd, -- 0x60, 0x17, 0x69, 0x98, 0x2c, 0x68, 0x3b, 0xaf, 0x30, 0xef, 0xd4, 0x23, -- 0xf3, 0x44, 0x2e, 0xc1, 0x6e, 0xa2, 0x0e, 0x84, 0x3c, 0xf5, 0x60, 0x76, -- 0x32, 0x05, 0x9c, 0x13, 0x4c, 0x98, 0x05, 0xfa, 0xeb, 0xe2, 0xee, 0xd1, -- 0xc3, 0x25, 0xd1, 0x0c, 0x2c, 0xd3, 0x0d, 0x57, 0xac, 0x8c, 0x56, 0xbd, -- 0x6e, 0xad, 0x4c, 0x73, 0x41, 0x74, 0x45, 0xbc, 0xf0, 0xd6, 0x11, 0xfb, -- 0x94, 0xac, 0x80, 0x32, 0x49, 0x92, 0x0d, 0x87, 0x8e, 0x29, 0xc5, 0x34, -- 0x2c, 0x00, 0x43, 0xcf, 0xa4, 0x56, 0xd0, 0x78, 0xac, 0x39, 0xf0, 0x96, -- 0x28, 0xd1, 0x3c, 0xde, 0x70, 0x84, 0x74, 0x7d, 0xc8, 0x17, 0x01, 0x4b, -- 0x08, 0x8a, 0x44, 0x3b, 0x53, 0x84, 0x44, 0x7e, 0x31, 0x49, 0x06, 0xf6, -- 0x09, 0x3e, 0x44, 0x8f, 0x8d, 0x63, 0x0c, 0x1f, 0x76, 0x22, 0x98, 0x04, -- 0x41, 0x7e, 0xe8, 0xc0, 0x04, 0x0e, 0x01, 0x7c, 0xa1, 0x4e, 0x6f, 0x9f, -- 0xc6, 0x21, 0x5d, 0xad, 0xff, 0xe8, 0xa1, 0xe7, 0xcd, 0xc3, 0xf5, 0xa2, -- 0x23, 0x97, 0x44, 0xa6, 0x24, 0xb8, 0x50, 0x3a, 0x25, 0x19, 0x7e, 0x18, -- 0xe3, 0xaf, 0x86, 0x6d, 0xf0, 0x81, 0xd6, 0x30, 0x1f, 0x1e, 0x43, 0x30, -- 0x87, 0x47, 0x47, 0x42, 0x7d, 0x19, 0xc9, 0x70, 0x11, 0xc6, 0x77, 0x8a, -- 0xb7, 0x44, 0x7d, 0xd3, 0x6d, 0x9b, 0xb8, 0x6f, 0x00, 0x7d, 0xa0, 0x57, -- 0x9e, 0x0c, 0x45, 0x4e, 0xc1, 0xe0, 0xe1, 0x91, 0x5c, 0x46, 0x27, 0xba, -- 0x0b, 0x49, 0x80, 0xc7, 0x60, 0x39, 0xf1, 0x95, 0x1b, 0x03, 0x0d, 0xc1, -- 0x7f, 0xa8, 0x30, 0x8a, 0x08, 0x5f, 0x96, 0x62, 0xa0, 0x99, 0xa7, 0xde, -- 0xdf, 0x46, 0x68, 0xf1, 0x38, 0xac, 0xbb, 0x0f, 0xa0, 0x62, 0xcd, 0x76, -- 0x37, 0xc0, 0x1e, 0x07, 0x06, 0x91, 0xea, 0x6a, 0x98, 0xf1, 0x76, 0x70, -- 0x0c, 0x34, 0xbd, 0x62, 0xfa, 0xc8, 0x5a, 0x70, 0xf4, 0x97, 0x9b, 0x90, -- 0xa6, 0x3c, 0xd8, 0x95, 0xad, 0xe8, 0x03, 0x9c, 0x39, 0x0f, 0x4e, 0x31, -- 0xe6, 0xfc, 0x89, 0x87, 0x9b, 0x83, 0xe2, 0x1d, 0xd4, 0x39, 0x73, 0x31, -- 0xe1, 0x00, 0x9c, 0x10, 0x8b, 0x0c, 0xdd, 0x87, 0x7e, 0xd6, 0x9f, 0xc2, -- 0xa8, 0x3a, 0x96, 0x84, 0x19, 0xb4, 0x3b, 0x7c, 0x17, 0x9e, 0x67, 0x37, -- 0x8f, 0xe0, 0x7f, 0x99, 0x50, 0x57, 0x1c, 0xb6, 0xd6, 0x79, 0x7a, 0x6c, -- 0x0e, 0x9d, 0x24, 0xae, 0x73, 0xb0, 0xd3, 0x16, 0xcc, 0x61, 0xd5, 0x69, -- 0xfb, 0xbd, 0x0e, 0x1b, 0x87, 0x1c, 0x7d, 0x30, 0x78, 0x4e, 0x19, 0x89, -- 0x20, 0x07, 0x79, 0xb0, 0x1d, 0x09, 0x14, 0x12, 0x3e, 0xcd, 0xd4, 0x6e, -- 0x4f, 0x77, 0x04, 0xf8, 0xa0, 0x35, 0x35, 0x2b, 0x24, 0x0f, 0xb5, 0x66, -- 0x1e, 0x32, 0xd7, 0x14, 0x94, 0xf7, 0x47, 0xc8, 0x95, 0x0b, 0x25, 0x74, -- 0xf6, 0x68, 0x07, 0xe1, 0xd3, 0xc6, 0x2f, 0x95, 0x58, 0x3e, 0xe9, 0xa0, -- 0x86, 0xc7, 0xac, 0xbb, 0x6b, 0x0d, 0x3c, 0xfc, 0xc4, 0xae, 0x57, 0xc6, -- 0x4a, 0x92, 0x24, 0x9f, 0x4d, 0xfc, 0x3e, 0x70, 0x5b, 0x29, 0x5b, 0xfb, -- 0x02, 0xec, 0x54, 0x79, 0x26, 0x10, 0x34, 0x49, 0x56, 0xac, 0x96, 0xa5, -- 0xe0, 0x3a, 0x3d, 0x7e, 0x47, 0x9b, 0x46, 0xed, 0xda, 0xe3, 0x80, 0x30, -- 0x1e, 0xdd, 0x82, 0x21, 0xee, 0x80, 0xb8, 0xb3, 0x62, 0x54, 0x6e, 0x8a, -- 0xe1, 0xa8, 0xf4, 0xc3, 0xf6, 0x98, 0xfc, 0xa0, 0x7e, 0xe5, 0xa8, 0xa4, -- 0xbd, 0x4f, 0x19, 0x53, 0x35, 0xfd, 0x40, 0x63, 0x20, 0x75, 0x98, 0xb6, -- 0xbd, 0x22, 0x41, 0xfc, 0x71, 0x69, 0x3d, 0x91, 0x07, 0x8d, 0xe8, 0x38, -- 0xad, 0x9d, 0x86, 0x5d, 0x26, 0xe3, 0x8c, 0x54, 0x6f, 0x14, 0x5a, 0x05, -- 0xf2, 0x00, 0x7e, 0x7d, 0x84, 0x04, 0x25, 0x4a, 0xd9, 0x44, 0x16, 0xa7, -- 0x8c, 0x0c, 0x19, 0xdd, 0x0d, 0x46, 0x2e, 0x28, 0xb8, 0xda, 0x56, 0x47, -- 0xf2, 0x45, 0xd2, 0xb6, 0x9b, 0x56, 0x41, 0xc1, 0xa1, 0xe1, 0x03, 0x88, -- 0x90, 0xae, 0x7f, 0x52, 0x54, 0xd2, 0xc5, 0x42, 0x8f, 0xf8, 0x27, 0xcc, -- 0x5d, 0x10, 0x79, 0x40, 0xee, 0x8a, 0xab, 0xa4, 0x28, 0x77, 0x75, 0x51, -- 0xdc, 0xf8, 0x72, 0xb9, 0x30, 0xda, 0x3d, 0xdc, 0x9c, 0x40, 0xaa, 0xe9, -- 0x0a, 0x6e, 0x9d, 0x9f, 0x7f, 0xc3, 0x58, 0x8b, 0x8e, 0xdb, 0x6c, 0xb1, -- 0x81, 0xb8, 0xba, 0x06, 0xa7, 0xaf, 0x8b, 0x4f, 0xba, 0x04, 0x5d, 0x91, -- 0x3b, 0xac, 0x83, 0x33, 0xf9, 0x7c, 0xea, 0x32, 0x34, 0xc5, 0xca, 0xdf, -- 0x65, 0xa2, 0x17, 0x07, 0xa7, 0x89, 0xeb, 0x46, 0x67, 0xd5, 0xac, 0xd4, -- 0xc8, 0xd0, 0xc4, 0x8f, 0xd0, 0xb9, 0x0a, 0xa4, 0xcd, 0x39, 0x76, 0xce, -- 0x88, 0xd5, 0x21, 0x36, 0x39, 0x2e, 0x17, 0xff, 0x0f, 0x6d, 0x2c, 0xf4, -- 0x31, 0xc9, 0x06, 0x85, 0x01, 0xf7, 0xf1, 0x21, 0x73, 0xdd, 0x9d, 0xee, -- 0x3a, 0x54, 0x1d, 0x63, 0x96, 0x21, 0x4b, 0x22, 0x54, 0x7b, 0xc0, 0x0a, -- 0x6f, 0x2f, 0x99, 0x1b, 0x9f, 0x3a, 0x66, 0x1f, 0x4c, 0xef, 0xd0, 0xbe, -- 0x78, 0xcc, 0x52, 0x3d, 0xcc, 0xf0, 0x09, 0x47, 0x19, 0xe9, 0x7f, 0x9f, -- 0xa2, 0x85, 0xab, 0x41, 0x58, 0xe0, 0x79, 0x39, 0x8d, 0xdd, 0x35, 0xea, -- 0xeb, 0x42, 0x91, 0x28, 0xcf, 0x61, 0x63, 0x8f, 0xb2, 0x89, 0x54, 0xdd, -- 0xff, 0x28, 0xe7, 0xe7, 0x2d, 0x53, 0x63, 0x53, 0x33, 0x03, 0xb3, 0x5f, -- 0x47, 0x52, 0x55, 0xa4, 0x9a, 0x8e, 0x8b, 0xa9, 0x38, 0x54, 0x6e, 0x01, -- 0x91, 0xda, 0xbd, 0x17, 0x5e, 0xee, 0xea, 0x5e, 0x6c, 0x2e, 0xe5, 0x0d, -- 0xda, 0x50, 0x94, 0xc5, 0xa0, 0x54, 0xfb, 0xc3, 0xfd, 0x13, 0x8b, 0x5b, -- 0x54, 0x16, 0xd2, 0x93, 0xa9, 0x63, 0x44, 0x08, 0xb5, 0x6f, 0xe7, 0x03, -- 0xe5, 0xa6, 0x3e, 0x8d, 0x14, 0x60, 0x87, 0xb3, 0xa5, 0x35, 0x14, 0x3f, -- 0x2d, 0xab, 0xc3, 0xde, 0x01, 0xf9, 0x52, 0x91, 0x83, 0x79, 0x43, 0x1f, -- 0x1b, 0x5d, 0x2a, 0x35, 0xbf, 0x5a, 0xab, 0x20, 0xb1, 0x39, 0x8d, 0x5b, -- 0x26, 0xfb, 0x98, 0xc5, 0xe5, 0x15, 0x3a, 0x59, 0x7c, 0xae, 0x01, 0xa4, -- 0x3e, 0xae, 0x3f, 0x58, 0xad, 0x20, 0xc2, 0xe4, 0x53, 0xa4, 0xd8, 0x2e, -- 0xc1, 0x1e, 0x43, 0xc5, 0xc8, 0x3f, 0xfd, 0xf8, 0xfc, 0x2e, 0x47, 0x5e, -- 0xc0, 0xf2, 0x50, 0x01, 0xa0, 0xeb, 0xe8, 0x24, 0x9f, 0xaa, 0x54, 0x01, -- 0x18, 0xca, 0xac, 0x59, 0x76, 0x90, 0xda, 0x2c, 0x42, 0x2c, 0x9e, 0x31, -- 0x9a, 0x65, 0x87, 0x64, 0xa0, 0xa0, 0x96, 0x60, 0x07, 0x1a, 0x28, 0xc3, -- 0x58, 0xb8, 0x99, 0x14, 0x19, 0x22, 0xd1, 0x7c, 0xca, 0xa7, 0xa7, 0xce, -- 0x3e, 0xe9, 0xa6, 0xe1, 0xeb, 0xbf, 0xfb, 0xcc, 0x88, 0xc4, 0xe6, 0x57, -- 0xd8, 0xa1, 0x66, 0x36, 0x8f, 0x8e, 0xa5, 0x54, 0x49, 0x6c, 0x1c, 0x7c, -- 0x0e, 0x9f, 0x42, 0x46, 0x6c, 0xc2, 0xc8, 0xb4, 0xa2, 0x11, 0x26, 0xe4, -- 0xc0, 0x06, 0xc5, 0xf3, 0x61, 0xae, 0x86, 0x59, 0xfe, 0xa8, 0xaa, 0x96, -- 0x2b, 0x5a, 0x2a, 0xb8, 0xf3, 0xb2, 0xd3, 0xe2, 0x8a, 0xb4, 0x08, 0x33, -- 0x62, 0xca, 0x84, 0x58, 0x25, 0xf3, 0x26, 0x27, 0x76, 0x4a, 0x66, 0x52, -- 0xb3, 0xc2, 0x27, 0x23, 0x40, 0xbd, 0x60, 0xe1, 0xe5, 0x91, 0x11, 0x78, -- 0xb3, 0x24, 0x3b, 0xc7, 0x90, 0x6e, 0x36, 0x9d, 0x04, 0x7e, 0x07, 0xd1, -- 0x81, 0x7d, 0xcd, 0xa3, 0xbd, 0x87, 0x9b, 0x53, 0x67, 0xdd, 0xef, 0x81, -- 0xb8, 0x1f, 0xa4, 0xd9, 0xbf, 0xfc, 0xc9, 0x82, 0x59, 0xf6, 0xb6, 0xb6, -- 0x7e, 0xf9, 0xa9, 0x11, 0xeb, 0xf0, 0xe5, 0x2f, 0xbf, 0xbe, 0xda, 0xac, -- 0xc0, 0xca, 0x74, 0xfa, 0x49, 0x14, 0x53, 0x21, 0x76, 0x0c, 0xc9, 0x9b, -- 0x5a, 0x77, 0x31, 0x18, 0x8e, 0xab, 0xcf, 0x57, 0xac, 0xaa, 0xe0, 0xda, -- 0x04, 0xb0, 0xfe, 0xe8, 0x2b, 0xe1, 0x55, 0x52, 0x7c, 0xd7, 0xc1, 0xf2, -- 0xf4, 0x93, 0x00, 0x8b, 0xa5, 0xdf, 0x09, 0x44, 0xc0, 0x1d, 0x72, 0x2d, -- 0x3a, 0x0f, 0x9f, 0x81, 0xe8, 0x42, 0x51, 0x9c, 0x82, 0x49, 0x8e, 0x05, -- 0x23, 0xc2, 0x45, 0x4b, 0x77, 0x41, 0x70, 0x0b, 0x16, 0xe9, 0xbb, 0xc2, -- 0x63, 0x16, 0x04, 0xa8, 0x0f, 0x9a, 0x6c, 0xa4, 0x47, 0x7d, 0x2a, 0x48, -- 0xdf, 0x95, 0x07, 0x67, 0x8b, 0xa0, 0x59, 0xb9, 0x1e, 0x15, 0x1c, 0x36, -- 0xae, 0x5a, 0xae, 0xa0, 0x3d, 0x5e, 0x04, 0xe5, 0xde, 0x5d, 0x30, 0x90, -- 0xb7, 0x4e, 0xe6, 0xf3, 0xae, 0x18, 0x40, 0x81, 0x6f, 0xe8, 0x46, 0x86, -- 0x7c, 0x18, 0xaf, 0xc2, 0x6c, 0x49, 0xb2, 0xd2, 0xb2, 0x8d, 0xca, 0x5e, -- 0x23, 0x97, 0x87, 0x61, 0x5a, 0x08, 0x8b, 0x5c, 0x8d, 0x61, 0xd1, 0x81, -- 0xcd, 0x42, 0x77, 0x50, 0x2e, 0x20, 0xaf, 0x5d, 0xa9, 0xaf, 0x2a, 0x31, -- 0x54, 0x59, 0xdd, 0x91, 0xc4, 0x2c, 0x23, 0xb3, 0xe4, 0x4a, 0x99, 0x52, -- 0x99, 0xad, 0xaf, 0xcc, 0xa3, 0x45, 0xc6, 0x81, 0x14, 0x1d, 0x4b, 0xd7, -- 0x3a, 0x64, 0xd2, 0xbe, 0xc7, 0xb0, 0x90, 0x44, 0x62, 0x69, 0xbd, 0x87, -- 0x8c, 0x42, 0x1b, 0x71, 0x57, 0x48, 0xf8, 0xbe, 0xf1, 0xc0, 0x96, 0x90, -- 0xa3, 0x81, 0x7b, 0x9c, 0xa1, 0x79, 0x9b, 0x79, 0x60, 0x69, 0x5f, 0xaa, -- 0xb8, 0xfb, 0x32, 0x21, 0x59, 0x48, 0x6c, 0x1b, 0x52, 0xe5, 0x81, 0xc1, -- 0x11, 0x65, 0x6d, 0xf9, 0x6d, 0x8f, 0x8e, 0xee, 0x22, 0x3f, 0xe9, 0x7b, -- 0xf6, 0xe1, 0x3e, 0x1a, 0xa7, 0x16, 0x0c, 0x51, 0x7c, 0xfc, 0x5a, 0x8d, -- 0xd7, 0xf9, 0xa2, 0x3c, 0x13, 0x04, 0xde, 0x28, 0x4b, 0x0a, 0x69, 0x8c, -- 0xba, 0x76, 0xe9, 0x96, 0xa9, 0x5e, 0x92, 0xa8, 0x33, 0x8d, 0xcb, 0x30, -- 0xc3, 0x5f, 0x29, 0x0c, 0x49, 0x53, 0x4d, 0x06, 0x0b, 0xe3, 0x41, 0xed, -- 0xc9, 0xde, 0x6b, 0x23, 0x2b, 0xbc, 0x66, 0xef, 0x2b, 0xbd, 0x25, 0x7d, -- 0x78, 0x55, 0x23, 0x32, 0xd8, 0x97, 0xb9, 0x8a, 0xa9, 0x95, 0xf7, 0x60, -- 0x2d, 0x36, 0xc9, 0xa1, 0xb4, 0x44, 0x10, 0x58, 0x21, 0x93, 0x6e, 0xa2, -- 0x51, 0x70, 0x6f, 0xb8, 0xf0, 0xd4, 0xa3, 0xa8, 0x75, 0x71, 0xe2, 0x64, -- 0xff, 0x12, 0x0a, 0x2b, 0xaa, 0x33, 0x7c, 0xe9, 0x53, 0x1a, 0xff, 0xf4, -- 0x74, 0x9b, 0x99, 0x8b, 0xb5, 0x92, 0x6a, 0x00, 0x14, 0x96, 0xe3, 0x4f, -- 0x4f, 0xd2, 0x87, 0x18, 0x26, 0x94, 0xa8, 0x88, 0x5b, 0x4a, 0x95, 0x96, -- 0x74, 0xac, 0xd5, 0x46, 0xee, 0xd2, 0x7b, 0xc3, 0xde, 0xc5, 0x5b, 0x11, -- 0x64, 0x65, 0xc7, 0x49, 0xea, 0x07, 0x21, 0xe8, 0x75, 0xc8, 0x4a, 0x8c, -- 0xef, 0x26, 0x1b, 0xca, 0xaa, 0xda, 0xf9, 0xb6, 0x56, 0xbd, 0x1b, 0x75, -- 0x3c, 0xe1, 0x4d, 0xe2, 0x4d, 0xf9, 0xf3, 0x83, 0xb1, 0xad, 0xff, 0xa0, -- 0xab, 0xeb, 0x07, 0x89, 0x46, 0x12, 0xae, 0xbc, 0xb2, 0x76, 0xb3, 0x24, -- 0x93, 0x9c, 0xbb, 0x2c, 0x58, 0x57, 0xfa, 0xc1, 0xde, 0xd4, 0xac, 0xa6, -- 0x30, 0x6f, 0xf0, 0xe1, 0x6a, 0xf6, 0x8e, 0x70, 0x71, 0x60, 0x5d, 0xb2, -- 0xcb, 0x45, 0xe3, 0xf2, 0x73, 0x66, 0x36, 0x8f, 0xb3, 0xd9, 0x51, 0x04, -- 0xc1, 0x92, 0x93, 0x03, 0x8f, 0x87, 0x8c, 0xc6, 0x97, 0x7c, 0xc0, 0xea, -- 0x28, 0xe8, 0x7d, 0x98, 0xde, 0xf6, 0xf5, 0xe1, 0xc5, 0x66, 0x0c, 0x96, -- 0x9a, 0x06, 0xb5, 0xd4, 0x51, 0xf9, 0x48, 0xcf, 0x77, 0xea, 0x2a, 0x8b, -- 0xb8, 0x0c, 0x4f, 0x09, 0xc3, 0xcc, 0x3e, 0x92, 0x6c, 0x35, 0xef, 0x06, -- 0x3d, 0x3c, 0xa0, 0x65, 0x60, 0x86, 0x1c, 0x04, 0x23, 0x69, 0xf4, 0x90, -- 0xd5, 0xb4, 0x08, 0xf4, 0x1c, 0xce, 0x26, 0xe7, 0x16, 0x5f, 0x1f, 0x1e, -- 0x1f, 0x5e, 0x1c, 0x22, 0x43, 0x20, 0x32, 0xe4, 0x4e, 0x71, 0x7b, 0xd5, -- 0xd9, 0xf8, 0x7a, 0x5e, 0x70, 0xd0, 0x28, 0x6d, 0x07, 0x12, 0x74, 0xbf, -- 0xcf, 0x46, 0xaf, 0xf7, 0xbf, 0xe3, 0xd2, 0x5d, 0x7c, 0x66, 0x4e, 0xcf, -- 0x4e, 0x4e, 0xdf, 0x1c, 0xbd, 0x7b, 0xdd, 0x4f, 0x0e, 0x4e, 0x4e, 0x7f, -- 0xec, 0x27, 0x6f, 0x4f, 0xbe, 0x3b, 0xec, 0x88, 0xe6, 0xe6, 0x68, 0xb1, -- 0x8e, 0xc0, 0x27, 0x2d, 0x90, 0xa1, 0x18, 0xf2, 0xc0, 0x19, 0x96, 0xc2, -- 0x10, 0xcd, 0x64, 0x56, 0x66, 0xcb, 0x15, 0xd2, 0x9a, 0x69, 0xe9, 0x69, -- 0x2d, 0xfb, 0xc9, 0x37, 0x87, 0xfb, 0xaf, 0xdb, 0xe2, 0xc0, 0xe9, 0xc9, -- 0xb9, 0xcc, 0x8a, 0x67, 0xe7, 0x26, 0xcd, 0xec, 0x9b, 0x98, 0x25, 0xdb, -- 0xb9, 0x59, 0xc9, 0xbc, 0xc9, 0x02, 0xb0, 0x47, 0x3a, 0x02, 0x30, 0x92, -- 0x4d, 0x56, 0x96, 0xfd, 0x45, 0x0c, 0x84, 0x8b, 0x94, 0x7b, 0xf8, 0x26, -- 0x44, 0xde, 0x84, 0x61, 0xab, 0x0b, 0x81, 0x88, 0x73, 0x41, 0xa3, 0xb0, -- 0x85, 0x3a, 0x94, 0xbd, 0xf1, 0xd6, 0xac, 0x75, 0x3a, 0x4f, 0xa4, 0xa0, -- 0x8e, 0xe1, 0xc4, 0x40, 0x54, 0x92, 0xe8, 0x87, 0x54, 0xe3, 0xd7, 0x46, -- 0x19, 0x27, 0x88, 0x54, 0x28, 0x0c, 0x03, 0x22, 0xd1, 0xb0, 0xe9, 0x98, -- 0xbd, 0xcb, 0xba, 0x4a, 0x24, 0x99, 0x45, 0x39, 0x41, 0x52, 0x63, 0x33, -- 0x24, 0x2f, 0xa1, 0xef, 0x53, 0x83, 0xb3, 0x7e, 0x90, 0x8f, 0x3b, 0x10, -- 0x06, 0x20, 0x52, 0x2c, 0x2f, 0x89, 0x3c, 0x33, 0x09, 0x17, 0xc1, 0x3e, -- 0xe9, 0x41, 0xc4, 0xcd, 0x70, 0xc4, 0x47, 0xfc, 0x1a, 0xe9, 0xfb, 0xdd, -- 0x57, 0xc0, 0xc6, 0x9b, 0x15, 0xa7, 0x3b, 0xac, 0x56, 0xa5, 0x2d, 0x06, -- 0x48, 0x00, 0xc7, 0x47, 0xb4, 0xaf, 0x7c, 0xd4, 0xdb, 0x51, 0x84, 0xc8, -- 0xd1, 0x91, 0x3a, 0xa3, 0x39, 0x6f, 0x35, 0xce, 0x3a, 0xb5, 0x15, 0x77, -- 0xcc, 0xf1, 0xd7, 0x9d, 0x3d, 0x23, 0x30, 0xfb, 0x91, 0xae, 0x23, 0x33, -- 0xd8, 0xd9, 0xe1, 0xc5, 0x59, 0xcb, 0xab, 0xff, 0xbc, 0xc3, 0x96, 0xb7, -- 0xc1, 0xb1, 0xdf, 0x9d, 0xbd, 0xf2, 0x17, 0xab, 0x7a, 0x05, 0x77, 0xe1, -- 0x7e, 0x1f, 0xca, 0x1d, 0x7d, 0xd2, 0x85, 0x86, 0xbb, 0x21, 0xc0, 0xbd, -- 0x1d, 0xfd, 0x21, 0xea, 0x7c, 0xf5, 0x2c, 0xbf, 0x39, 0x3c, 0x3e, 0x8d, -- 0x67, 0xf9, 0xdd, 0xd9, 0x9b, 0x1f, 0x87, 0x0f, 0x64, 0x05, 0xfe, 0xe3, -- 0x63, 0x7a, 0x3f, 0xa6, 0x75, 0xdd, 0x09, 0x83, 0x5d, 0xa5, 0xb0, 0xda, -- 0x19, 0x56, 0xb8, 0x45, 0x82, 0x34, 0xb1, 0xcc, 0x04, 0x1e, 0x37, 0xd0, -- 0xdb, 0x68, 0xea, 0x91, 0xd8, 0xe0, 0x44, 0x2c, 0xad, 0x73, 0x4c, 0xec, -- 0x55, 0xb2, 0x07, 0xe9, 0x33, 0x57, 0x3c, 0x0d, 0xdf, 0xf1, 0x58, 0xf2, -- 0x11, 0x97, 0xd5, 0x18, 0x06, 0xc9, 0xd7, 0x1d, 0xc2, 0x2b, 0x4b, 0x22, -- 0x8c, 0xa3, 0xc6, 0xbd, 0xb9, 0xe3, 0xfd, 0x71, 0x72, 0x35, 0x2c, 0xca, -- 0x9c, 0xed, 0x73, 0x5a, 0xec, 0x4c, 0x1a, 0x4b, 0x50, 0xd2, 0x93, 0x4f, -- 0x2d, 0x33, 0x80, 0xae, 0xe6, 0x2c, 0x64, 0x48, 0x32, 0xbf, 0x93, 0xb8, -- 0xe9, 0x19, 0xb4, 0x7b, 0xfe, 0xce, 0xb5, 0xba, 0xa2, 0x24, 0xbd, 0x54, -- 0x44, 0xbd, 0xa7, 0x7d, 0x9e, 0x79, 0x86, 0x62, 0xfa, 0x86, 0x9b, 0xad, -- 0x9f, 0x28, 0x47, 0x74, 0x11, 0xb7, 0x28, 0x81, 0x0c, 0x11, 0xeb, 0x06, -- 0x39, 0xe9, 0x06, 0x8d, 0x0d, 0xbb, 0x47, 0x10, 0x25, 0x3b, 0x4a, 0xb4, -- 0xbe, 0x01, 0xff, 0xec, 0xac, 0x68, 0xe3, 0x5c, 0x3d, 0x3c, 0x1b, 0x76, -- 0x28, 0x2b, 0x3e, 0xbf, 0xbc, 0x2c, 0x50, 0xfc, 0xa3, 0x96, 0x83, 0x44, -- 0xf3, 0x2d, 0xa2, 0xd4, 0xff, 0xa0, 0x43, 0x41, 0x15, 0xe9, 0x37, 0x3c, -- 0x6e, 0x1c, 0x87, 0x08, 0x44, 0x04, 0x31, 0x9d, 0x51, 0xf7, 0xc1, 0x0b, -- 0xd1, 0x9c, 0xac, 0x3e, 0x5d, 0x80, 0x8d, 0x16, 0x0c, 0xc9, 0x08, 0x75, -- 0xc7, 0x10, 0xe5, 0x59, 0x9d, 0x10, 0xc4, 0xbb, 0x1f, 0x1f, 0xab, 0x2b, -- 0x24, 0xe1, 0xdc, 0x4d, 0xf4, 0x1e, 0x91, 0xbf, 0x96, 0x0a, 0x4e, 0x00, -- 0xf6, 0x0e, 0xab, 0x06, 0xd6, 0x64, 0xad, 0xd3, 0xd7, 0x59, 0x25, 0x59, -- 0x3d, 0x6e, 0x00, 0xc5, 0x20, 0xf0, 0x9c, 0xe8, 0x58, 0x24, 0x04, 0xe2, -- 0xf0, 0xfd, 0x44, 0x2a, 0x47, 0x48, 0x3c, 0x94, 0xbe, 0x37, 0xe8, 0xb0, -- 0x09, 0xb1, 0xed, 0x6b, 0x05, 0x6b, 0xfe, 0xc7, 0x9d, 0xe2, 0x1f, 0x3d, -- 0x51, 0xc8, 0x22, 0xbe, 0xc4, 0x1f, 0xbf, 0x8a, 0x2c, 0x82, 0xb2, 0x0d, -- 0xe2, 0x87, 0xdb, 0x20, 0xda, 0x6f, 0xd0, 0xc7, 0x20, 0x4a, 0x5a, 0x9c, -- 0x6c, 0x62, 0x3d, 0x82, 0xcd, 0x56, 0x1b, 0x17, 0x5f, 0xa7, 0x4d, 0x9a, -- 0x08, 0x9e, 0x01, 0xd8, 0x59, 0xac, 0x94, 0xca, 0x1e, 0x4b, 0x6a, 0x46, -- 0xce, 0x55, 0x4b, 0xf9, 0x36, 0xc5, 0xe9, 0xc9, 0x7e, 0x4f, 0xe0, 0xac, -- 0xbf, 0x03, 0x38, 0x8b, 0x8b, 0x1f, 0xe2, 0x00, 0xbc, 0x9c, 0xa4, 0x30, -- 0xed, 0x22, 0xd5, 0x99, 0x9a, 0xfe, 0xe2, 0x3f, 0xba, 0x6b, 0x0f, 0x5a, -- 0x51, 0x5e, 0x05, 0x6d, 0x97, 0x3c, 0x6c, 0x71, 0x1e, 0xb0, 0x8a, 0xc5, -- 0x95, 0x61, 0x50, 0xd6, 0x4d, 0x2b, 0xbd, 0xb3, 0x9d, 0xac, 0xf6, 0x4b, -- 0x9d, 0x75, 0x62, 0xfc, 0x48, 0xe5, 0x17, 0x3e, 0x85, 0xf4, 0x6c, 0x9f, -- 0x75, 0x20, 0x1e, 0xf7, 0x8a, 0xf6, 0x02, 0x5b, 0x77, 0x04, 0x86, 0xa9, -- 0x25, 0x32, 0x58, 0xe0, 0x8e, 0xe6, 0x63, 0xea, 0x51, 0x1a, 0xca, 0x77, -- 0x78, 0x48, 0xf4, 0xbe, 0x2a, 0xbe, 0x95, 0x50, 0xdb, 0xc0, 0x85, 0xa0, -- 0x0b, 0x8a, 0x1e, 0xc7, 0x33, 0xbb, 0xa2, 0x83, 0x34, 0xcc, 0xca, 0xc0, -- 0xcf, 0x38, 0x3c, 0x03, 0xa0, 0xe6, 0xa9, 0x8b, 0x67, 0xec, 0xd0, 0x88, -- 0xc2, 0x4a, 0x5a, 0x57, 0x59, 0xed, 0xa2, 0x99, 0x26, 0x5e, 0x16, 0x97, -- 0x41, 0x6d, 0xcc, 0x78, 0x32, 0x9b, 0x62, 0x8f, 0xee, 0xdc, 0x0a, 0x07, -- 0xd6, 0xd6, 0x40, 0x74, 0xa1, 0x46, 0xf9, 0x7d, 0x46, 0x73, 0xa1, 0x1b, -- 0x18, 0xf0, 0x2d, 0x5a, 0xcb, 0x0c, 0xcd, 0x06, 0x2b, 0x12, 0xe5, 0x49, -- 0xd4, 0xcd, 0xb2, 0x0d, 0x96, 0xe4, 0x52, 0xa7, 0xa5, 0xab, 0x99, 0x11, -- 0xae, 0xa8, 0x19, 0xe3, 0x18, 0xd6, 0x29, 0xd9, 0x18, 0x6c, 0x3a, 0xa9, -- 0x0f, 0xf5, 0xa2, 0x84, 0x34, 0x62, 0xf7, 0x75, 0xea, 0x42, 0x4e, 0x5d, -- 0x6e, 0x84, 0xa0, 0xad, 0x1b, 0x85, 0x28, 0x4d, 0x70, 0x67, 0x5b, 0x62, -- 0x42, 0x36, 0x6e, 0x09, 0xc4, 0xdf, 0x48, 0x2e, 0x6b, 0x35, 0x36, 0xcf, -- 0xee, 0xc2, 0xc6, 0xbc, 0xde, 0xe5, 0x1a, 0xfc, 0x1d, 0xcf, 0xd4, 0xb5, -- 0x48, 0xa5, 0xd3, 0x45, 0x64, 0x8f, 0x60, 0x6f, 0x3f, 0x7f, 0x11, 0x3c, -- 0xfc, 0xb6, 0x8f, 0xc2, 0x2e, 0xf3, 0x38, 0x22, 0xe8, 0x2d, 0x3e, 0x1c, -- 0x26, 0xaf, 0x35, 0xb2, 0x1f, 0x49, 0xd4, 0x4b, 0x6d, 0x01, 0x01, 0xdf, -- 0x41, 0x33, 0xdf, 0x69, 0x26, 0x4d, 0xc7, 0x96, 0xea, 0xfb, 0x55, 0x47, -- 0xae, 0x9e, 0xa0, 0x3a, 0xcd, 0xad, 0x34, 0xce, 0x08, 0x7f, 0x9b, 0xb5, -- 0x32, 0x47, 0x7c, 0x6a, 0x35, 0xec, 0xb2, 0x37, 0x68, 0x35, 0x32, 0x89, -- 0xd7, 0xf6, 0x2e, 0x0a, 0x33, 0xea, 0x5b, 0x13, 0xc5, 0xa5, 0x66, 0xca, -- 0x58, 0xdb, 0x1d, 0xb9, 0xdf, 0xd0, 0x93, 0x9e, 0x94, 0x13, 0xb8, 0xf1, -- 0xee, 0xf9, 0xc9, 0x32, 0x2d, 0x45, 0xf5, 0x9b, 0xdf, 0x98, 0xb1, 0x57, -- 0x6c, 0x18, 0xd9, 0x78, 0x59, 0x37, 0x41, 0xed, 0x82, 0x31, 0xe9, 0x15, -- 0x8e, 0x21, 0x6d, 0xc0, 0x6d, 0xa3, 0xe2, 0x79, 0xef, 0xd4, 0x2c, 0xbd, -- 0x7b, 0xbd, 0x4d, 0xcb, 0x32, 0x47, 0x12, 0xbe, 0x33, 0x01, 0x77, 0x25, -- 0x90, 0xdb, 0x90, 0xcb, 0x4c, 0xe0, 0xad, 0xea, 0xc2, 0x04, 0x99, 0xce, -- 0xee, 0x89, 0x76, 0xca, 0xce, 0xde, 0xdf, 0x48, 0xe5, 0xe0, 0xa0, 0x73, -- 0x67, 0x54, 0xd3, 0xa2, 0xc2, 0xed, 0xee, 0x3b, 0x7a, 0x86, 0xea, 0x4b, -- 0x5a, 0xa9, 0x8b, 0xfc, 0xb6, 0x57, 0x6d, 0xf1, 0xa3, 0x30, 0x70, 0x44, -- 0x56, 0x35, 0xf3, 0x56, 0xf1, 0x91, 0x2e, 0x67, 0x1e, 0x1f, 0xf1, 0x9b, -- 0x72, 0xf4, 0x94, 0xfe, 0xf9, 0x96, 0xff, 0x61, 0x56, 0xc1, 0x2a, 0x92, -- 0xa0, 0xf5, 0x0a, 0xe0, 0x4f, 0xcc, 0x13, 0xb8, 0x30, 0x82, 0xa8, 0xfc, -- 0xe7, 0xa0, 0xa2, 0x37, 0xf8, 0xa5, 0xcc, 0x1e, 0x78, 0x87, 0xe6, 0xf6, -- 0x77, 0xb6, 0x7a, 0x2e, 0x49, 0x49, 0x20, 0x4a, 0x1c, 0xc3, 0xa2, 0x36, -- 0x73, 0xcc, 0x04, 0x15, 0x5b, 0x1d, 0x9a, 0x87, 0xc0, 0x7f, 0xc1, 0xfe, -- 0x29, 0x76, 0x85, 0x7c, 0x85, 0xfb, 0x72, 0x75, 0x7f, 0x92, 0xe1, 0x28, -- 0xff, 0xb4, 0xf0, 0x6a, 0x1e, 0x9c, 0xdb, 0xd7, 0xe7, 0xe7, 0x83, 0x77, -- 0x8a, 0x69, 0xb2, 0xc2, 0x25, 0xe6, 0xbe, 0x6e, 0x37, 0xcc, 0x4b, 0x41, -- 0x8b, 0xf9, 0xec, 0xd3, 0x56, 0xf1, 0x35, 0x67, 0xa6, 0x99, 0x2c, 0x27, -- 0xaa, 0x04, 0x12, 0x8c, 0x52, 0x47, 0x07, 0xa3, 0x65, 0x6e, 0x85, 0x5c, -- 0xf1, 0xb0, 0x5a, 0x1d, 0x25, 0xb1, 0x73, 0xc5, 0x8a, 0x20, 0x57, 0x0e, -- 0x35, 0x7a, 0x90, 0x93, 0x74, 0x63, 0xc0, 0x20, 0xb3, 0x6c, 0xc6, 0x00, -- 0x84, 0x2e, 0x1d, 0x4e, 0x64, 0x3d, 0xe4, 0xf3, 0xa2, 0xf3, 0x15, 0x8e, -- 0xab, 0x09, 0x17, 0xb1, 0x61, 0x1d, 0x5e, 0x62, 0xeb, 0xff, 0x10, 0x59, -- 0xb1, 0xab, 0xfb, 0xf9, 0xf8, 0xfa, 0xf5, 0xbb, 0xf3, 0xb5, 0xd5, 0x21, -- 0x01, 0x56, 0x3c, 0x8d, 0x61, 0xac, 0xf9, 0xe9, 0xb2, 0x98, 0x73, 0x36, -- 0x55, 0x10, 0x27, 0x91, 0x75, 0xdc, 0x3b, 0xa7, 0xef, 0x0e, 0xbf, 0x3e, -- 0xb1, 0x7f, 0x56, 0x2e, 0xf9, 0x83, 0x2b, 0x7c, 0x9c, 0x96, 0x57, 0x59, -- 0x07, 0xbe, 0x62, 0x34, 0x38, 0xc3, 0x7c, 0x09, 0x04, 0x68, 0x22, 0xc8, -- 0x29, 0xbf, 0x2e, 0xb4, 0xd8, 0x57, 0x92, 0xc4, 0x47, 0x2b, 0xbc, 0xcc, -- 0xb8, 0x74, 0x76, 0xbf, 0xfe, 0x2a, 0xbe, 0x60, 0x5e, 0xbf, 0x5b, 0xd1, -- 0x1d, 0x7f, 0x33, 0x30, 0x79, 0x42, 0x2d, 0x69, 0x13, 0x3a, 0x1f, 0xb9, -- 0xd4, 0x82, 0xe9, 0x58, 0x95, 0xf3, 0xd3, 0x23, 0xfb, 0xa7, 0x31, 0xf5, -- 0x30, 0x01, 0x58, 0x68, 0x9e, 0x53, 0xbe, 0x50, 0x87, 0x3c, 0x19, 0x4d, -- 0xd3, 0xf9, 0x8d, 0xe4, 0x74, 0x77, 0x8f, 0x5c, 0xd0, 0x0b, 0x2c, 0xf3, -- 0x02, 0x38, 0x9c, 0x7e, 0x95, 0xd5, 0x20, 0x8f, 0xec, 0x5d, 0x49, 0x74, -- 0x11, 0x78, 0xa8, 0x0e, 0x96, 0xee, 0x5c, 0x11, 0x2b, 0x4c, 0xbc, 0x8a, -- 0x09, 0xd6, 0xfd, 0x16, 0x83, 0x85, 0x6d, 0x9c, 0x4b, 0x11, 0xa7, 0x33, -- 0x09, 0x0e, 0x3a, 0xd5, 0x86, 0x36, 0x3b, 0x76, 0x7d, 0x25, 0x1e, 0x99, -- 0x29, 0xa4, 0x44, 0xd8, 0x1d, 0x75, 0x7e, 0xde, 0x92, 0x98, 0xc3, 0xf7, -- 0xcb, 0x03, 0x14, 0xa1, 0xeb, 0xe0, 0x36, 0xc9, 0xbd, 0x93, 0x6c, 0x8c, -- 0xe8, 0xd2, 0x72, 0x77, 0x9c, 0x64, 0xd9, 0x3f, 0x05, 0xc0, 0x59, 0x77, -- 0x73, 0xcf, 0x3e, 0x7f, 0xf6, 0x74, 0x73, 0xb3, 0x9f, 0x98, 0x91, 0x56, -- 0x52, 0xb1, 0xd8, 0x91, 0xc2, 0xe7, 0x53, 0x02, 0x61, 0x58, 0xc4, 0xbd, -- 0x46, 0x66, 0x6e, 0xb0, 0xfe, 0xdd, 0xcd, 0xf1, 0xde, 0xda, 0xab, 0x3c, -- 0x3d, 0xc6, 0xf5, 0x04, 0x8f, 0xcc, 0xd5, 0x8b, 0x05, 0x16, 0x9c, 0xc9, -- 0x03, 0x1b, 0xe6, 0x61, 0x58, 0xe9, 0xd9, 0x97, 0xca, 0xdb, 0xa5, 0x45, -- 0x06, 0x88, 0x5f, 0x07, 0xec, 0xc2, 0x2e, 0x1b, 0x4e, 0xa1, 0x7f, 0x73, -- 0x74, 0x7c, 0xe8, 0x0e, 0xf7, 0xff, 0xde, 0x1a, 0xf2, 0x20, 0xcb, 0x71, -- 0x9c, 0x93, 0x08, 0x11, 0x2d, 0x48, 0x53, 0xee, 0x23, 0xd1, 0x7f, 0xf0, -- 0x6d, 0x5f, 0xf4, 0x44, 0x7c, 0xec, 0x61, 0x04, 0xa9, 0xe1, 0xc3, 0x77, -- 0xdf, 0x1d, 0x9d, 0x9d, 0xbc, 0x7b, 0x7b, 0xf8, 0xce, 0x65, 0x14, 0xf0, -- 0x75, 0xda, 0xed, 0xd0, 0x8b, 0x7c, 0x1b, 0x39, 0xe7, 0xa4, 0xb0, 0xa8, -- 0xc7, 0xce, 0x26, 0x9e, 0x05, 0xed, 0x96, 0xfe, 0x35, 0x0c, 0x9b, 0x0b, -- 0x1e, 0xb2, 0x7d, 0x63, 0x9d, 0x62, 0xc1, 0xa1, 0xc0, 0x13, 0xce, 0xd9, -- 0x1a, 0x4a, 0x7a, 0x85, 0xf8, 0x51, 0x72, 0x71, 0x03, 0x7e, 0x1c, 0x67, -- 0x8a, 0x36, 0x5e, 0x05, 0xd5, 0xcd, 0x2c, 0xbd, 0xc8, 0x67, 0x61, 0x35, -- 0x06, 0xe1, 0xa9, 0x5d, 0xaa, 0x3f, 0xaf, 0xf2, 0x27, 0x02, 0x55, 0x23, -- 0x2c, 0x8c, 0x71, 0xad, 0x4e, 0x19, 0x38, 0x69, 0x12, 0x89, 0x3d, 0x48, -- 0x02, 0x74, 0x78, 0x0f, 0x78, 0x69, 0x0e, 0xf9, 0xb6, 0x62, 0x1d, 0xcc, -- 0xa0, 0xe1, 0xaa, 0x47, 0x59, 0x83, 0x2f, 0xd4, 0x2f, 0x1f, 0xa3, 0xbc, -- 0x55, 0xa1, 0xf3, 0x4b, 0x88, 0x20, 0x80, 0x21, 0x80, 0xdf, 0x70, 0x2d, -- 0x88, 0xe1, 0x3d, 0xff, 0x70, 0x7a, 0x76, 0xf2, 0xc3, 0x8f, 0xff, 0xe0, -- 0x2e, 0xce, 0xfd, 0x34, 0x7e, 0xe2, 0x6b, 0xc8, 0x1a, 0xff, 0xe5, 0x37, -- 0xf5, 0xf6, 0x60, 0x77, 0xcd, 0xf6, 0xfb, 0x9a, 0xc2, 0xb7, 0x0a, 0x92, -- 0x1b, 0x6e, 0x2e, 0x01, 0xba, 0xf6, 0xd5, 0xa7, 0x2d, 0x44, 0xd7, 0x31, -- 0x07, 0x1c, 0x61, 0x4e, 0xbc, 0x09, 0x2a, 0xa1, 0x74, 0x95, 0x4b, 0x03, -- 0x48, 0x32, 0x2a, 0xa0, 0xb1, 0xac, 0x14, 0xd7, 0xc1, 0xeb, 0x03, 0x76, -- 0x1f, 0x97, 0xb2, 0x5b, 0x8f, 0xfd, 0xe3, 0xe3, 0xdf, 0xbe, 0x08, 0x2e, -- 0x94, 0xa2, 0xb1, 0x0c, 0x30, 0x2d, 0xb8, 0x09, 0x0d, 0x9c, 0x40, 0x6a, -- 0xe4, 0xdf, 0x01, 0xb6, 0xe7, 0x86, 0xf3, 0xee, 0x44, 0x47, 0x23, 0x2e, -- 0xb5, 0x41, 0x95, 0x91, 0xe0, 0x0e, 0x8f, 0x06, 0x9b, 0xc4, 0xf9, 0xc2, -- 0x44, 0xc9, 0xf0, 0x2f, 0x22, 0xc1, 0xcf, 0x7f, 0x69, 0x85, 0xad, 0xe1, -- 0x9e, 0x07, 0x68, 0x3b, 0x92, 0xbb, 0x0b, 0xe7, 0x0d, 0x96, 0xf2, 0x14, -- 0xa8, 0x3a, 0x84, 0xdc, 0xf0, 0x0e, 0x1f, 0x3e, 0x5b, 0x64, 0x39, 0x22, -- 0xa8, 0xcc, 0xab, 0x1b, 0x24, 0xc6, 0xf3, 0xa1, 0xec, 0x4b, 0x59, 0xce, -- 0x1a, 0x55, 0x8a, 0x59, 0xc4, 0xc7, 0x50, 0x68, 0xec, 0x32, 0x62, 0xfa, -- 0x79, 0x71, 0x72, 0x70, 0x72, 0x4c, 0xbf, 0x1c, 0xbe, 0x39, 0xfa, 0xc1, -- 0x33, 0x34, 0x29, 0x57, 0xa1, 0x9c, 0xd7, 0x18, 0x84, 0x2b, 0x5f, 0x11, -- 0x3b, 0x87, 0x23, 0x14, 0xe1, 0x26, 0xe4, 0x5d, 0x67, 0x60, 0xca, 0x27, -- 0x85, 0xa2, 0x84, 0x11, 0x3c, 0xc1, 0x0e, 0xe1, 0x92, 0x0f, 0x99, 0x5e, -- 0x73, 0x6f, 0x65, 0x50, 0x48, 0x62, 0xcb, 0x2f, 0x5d, 0xdc, 0x67, 0x68, -- 0xca, 0x34, 0xeb, 0x85, 0x9a, 0x2f, 0x80, 0xb9, 0xe3, 0x00, 0x71, 0x59, -- 0x97, 0xed, 0x07, 0x93, 0x34, 0xb5, 0x36, 0x08, 0x27, 0xd1, 0xf0, 0x83, -- 0xb5, 0x30, 0xe4, 0xc1, 0x0f, 0x16, 0xea, 0x97, 0x6b, 0xae, 0x39, 0x27, -- 0x5d, 0x00, 0x4d, 0x2a, 0x46, 0xb2, 0x1e, 0xbc, 0xe5, 0x5e, 0x61, 0x71, -- 0x91, 0x37, 0x9d, 0x08, 0x10, 0xb9, 0xf0, 0x48, 0x46, 0x88, 0xbc, 0x4d, -- 0x91, 0x3c, 0x8f, 0xcc, 0x7b, 0x79, 0xa9, 0xd5, 0x46, 0xfa, 0x9b, 0x1a, -- 0x49, 0x9b, 0xad, 0x3c, 0xfb, 0x2d, 0x8d, 0x3c, 0x6b, 0xb5, 0x71, 0xfd, -- 0x9b, 0x1a, 0x71, 0x65, 0x97, 0xe8, 0x5a, 0xfc, 0xe1, 0xe8, 0x22, 0x39, -- 0x38, 0x79, 0xed, 0x69, 0xf4, 0xc2, 0x5d, 0xed, 0x29, 0x69, 0x04, 0x24, -- 0x3f, 0xc3, 0x72, 0xe5, 0x2a, 0xcf, 0x5b, 0x11, 0x73, 0x8e, 0x4f, 0xa8, -- 0x7c, 0x1d, 0xf0, 0x1c, 0x1f, 0x95, 0x92, 0xdd, 0x17, 0x82, 0x29, 0xba, -- 0x9a, 0xe7, 0x28, 0xe0, 0xd9, 0xc0, 0x1f, 0x62, 0xf4, 0xf5, 0xb4, 0x34, -- 0xf0, 0xa1, 0x51, 0xca, 0xbe, 0xca, 0xb9, 0xb8, 0x78, 0x2b, 0x06, 0x1f, -- 0xf2, 0x31, 0x85, 0x85, 0xcb, 0x16, 0x86, 0xe9, 0x84, 0x73, 0x6a, 0x11, -- 0xe9, 0x23, 0xea, 0x3a, 0xd7, 0x7d, 0xc6, 0x68, 0x1a, 0x69, 0xca, 0x3b, -- 0xca, 0x09, 0xe7, 0x0d, 0x8a, 0x51, 0xdc, 0x7d, 0x48, 0x5e, 0xac, 0xef, -- 0x4c, 0xcc, 0x76, 0x80, 0x7b, 0x71, 0xee, 0x74, 0x6f, 0x2d, 0x09, 0x19, -- 0xb1, 0x28, 0xd7, 0x84, 0xeb, 0x67, 0x57, 0xfe, 0x79, 0x23, 0xf5, 0xa9, -- 0xe9, 0xfc, 0x69, 0x7e, 0x6b, 0xfe, 0xf7, 0xe0, 0x8e, 0x7e, 0xe2, 0x43, -- 0x3b, 0x66, 0xe9, 0x54, 0x02, 0x6e, 0x14, 0x94, 0xe0, 0x7e, 0x5e, 0xa7, -- 0x1f, 0x11, 0x23, 0xc5, 0x22, 0x11, 0xd6, 0x70, 0x1c, 0xb0, 0xc1, 0xa7, -- 0xca, 0x9c, 0x13, 0x53, 0xc5, 0xe5, 0xfc, 0x99, 0x31, 0x5e, 0x33, 0xda, -- 0xd2, 0xca, 0x85, 0x5a, 0x72, 0x64, 0x88, 0x82, 0x71, 0x89, 0xf1, 0xbf, -- 0xe2, 0x02, 0xa0, 0xdd, 0x0e, 0x59, 0xd7, 0xad, 0x81, 0xf7, 0x14, 0x12, -- 0x8c, 0x0d, 0x77, 0x7c, 0x3e, 0xce, 0x25, 0x79, 0x49, 0x0a, 0xa0, 0x4f, -- 0x50, 0xea, 0x4a, 0x16, 0x6d, 0xb0, 0xc2, 0x12, 0x5a, 0x48, 0x09, 0x57, -- 0xe5, 0x70, 0x26, 0x7f, 0x4c, 0x0a, 0xac, 0xa4, 0x84, 0x2e, 0x71, 0xfd, -- 0x43, 0xfa, 0xe2, 0x5e, 0x9c, 0xac, 0xe9, 0x1c, 0x76, 0x99, 0xa8, 0x7a, -- 0x86, 0x6e, 0x8c, 0x6a, 0xa6, 0x5e, 0x0d, 0x7c, 0x66, 0x11, 0x01, 0xca, -- 0xcb, 0xad, 0x0a, 0x92, 0x31, 0x71, 0x18, 0x8d, 0x14, 0xca, 0x5d, 0xb9, -- 0x96, 0x44, 0xfc, 0x8f, 0x25, 0xab, 0x8d, 0xe7, 0x1a, 0xc7, 0xb3, 0x69, -- 0x2b, 0x81, 0x06, 0xf1, 0x7c, 0x45, 0x3f, 0xdc, 0x98, 0xec, 0x9b, 0x74, -- 0xd2, 0x4e, 0x88, 0xe0, 0xf6, 0xe3, 0xd6, 0x3e, 0x6b, 0x93, 0x88, 0xe5, -- 0x27, 0x30, 0x22, 0x62, 0x11, 0xa6, 0x29, 0x7d, 0xae, 0x4f, 0xb2, 0x11, -- 0xe2, 0x2e, 0x63, 0x4b, 0x8f, 0x8b, 0xa4, 0x2d, 0xb3, 0xc5, 0xd4, 0x4d, -- 0xd1, 0x3e, 0x44, 0x5e, 0x14, 0xdc, 0x7c, 0x58, 0xf1, 0xb1, 0x8e, 0x37, -- 0x0e, 0xd6, 0x0a, 0x05, 0xc6, 0x17, 0xbe, 0x93, 0x14, 0x79, 0x2c, 0x44, -- 0x24, 0xf3, 0xdc, 0x11, 0xa4, 0x16, 0x32, 0xc5, 0x47, 0x86, 0xa9, 0xe5, -- 0xfe, 0xb6, 0x37, 0xe2, 0x18, 0x43, 0xb9, 0x29, 0x7c, 0x88, 0x3c, 0xd6, -- 0x61, 0x59, 0x0a, 0x1e, 0x8a, 0x2f, 0x49, 0x00, 0xf8, 0x8a, 0x74, 0xae, -- 0xd1, 0x62, 0x28, 0x99, 0x3d, 0x04, 0xae, 0x4e, 0x84, 0x0d, 0x56, 0x0b, -- 0x6c, 0x11, 0x6c, 0xd8, 0x93, 0xa0, 0xfc, 0x0e, 0xae, 0xe4, 0xa0, 0xa2, -- 0x02, 0x9f, 0x00, 0x77, 0xef, 0x20, 0x52, 0x2f, 0xe9, 0x84, 0x63, 0xb3, -- 0x10, 0x19, 0xcf, 0x21, 0x76, 0xda, 0x8b, 0x7d, 0xba, 0x7f, 0x7e, 0x6e, -- 0x0b, 0x7d, 0x10, 0x2e, 0xa8, 0x2c, 0xa1, 0xe6, 0xad, 0x02, 0x42, 0x4a, -- 0xe1, 0x55, 0x62, 0x75, 0x47, 0xdb, 0x68, 0xe5, 0x9f, 0xed, 0x3c, 0x71, -- 0x7d, 0xb9, 0xae, 0xbe, 0x93, 0xb6, 0xfa, 0x9f, 0xd8, 0x55, 0x77, 0x5f, -- 0xdf, 0x75, 0xf4, 0xf5, 0x34, 0x22, 0xa2, 0xdd, 0xdd, 0xcf, 0x0c, 0x5a, -- 0x44, 0x10, 0xb7, 0xa7, 0x89, 0xef, 0x30, 0xe8, 0x91, 0x9e, 0x1b, 0xc0, -- 0xb6, 0x18, 0xf7, 0xa5, 0x74, 0xc1, 0xa3, 0x09, 0xba, 0x7a, 0xe6, 0xba, -- 0x22, 0x9d, 0x69, 0x1d, 0xee, 0x28, 0x3d, 0x24, 0xd1, 0xd9, 0x81, 0x5d, -- 0x99, 0x0f, 0xca, 0x11, 0xaf, 0x01, 0x89, 0x61, 0x2b, 0x33, 0xfa, 0x6c, -- 0x14, 0x41, 0x3f, 0x9f, 0xf9, 0x29, 0xf9, 0x71, 0x4b, 0x11, 0x79, 0x40, -- 0x8d, 0x0d, 0x83, 0xc3, 0xea, 0x08, 0xc5, 0x22, 0xd8, 0x5d, 0x68, 0x55, -- 0x9b, 0xcf, 0xc8, 0xab, 0xbe, 0x17, 0x39, 0x7e, 0xa7, 0x4c, 0xc4, 0x5a, -- 0xfe, 0x63, 0x98, 0x9c, 0x40, 0x09, 0x6b, 0x80, 0x84, 0x42, 0x95, 0xe5, -- 0xe3, 0xee, 0x80, 0xdd, 0xc3, 0xd3, 0xbe, 0xf3, 0xc2, 0xaf, 0x89, 0x0d, -- 0xc9, 0xdc, 0x81, 0x5b, 0x7a, 0x7c, 0xbc, 0xe7, 0xc1, 0xbc, 0xfd, 0x19, -- 0x62, 0x2f, 0x38, 0x33, 0x09, 0xb0, 0x8f, 0x11, 0xae, 0x35, 0x1d, 0xa9, -- 0x4d, 0x17, 0xe8, 0x70, 0x09, 0x4e, 0x12, 0xdc, 0x41, 0x9e, 0x92, 0xff, -- 0xb6, 0x64, 0x86, 0x84, 0x5b, 0x97, 0xee, 0x50, 0xfd, 0xd3, 0xde, 0x13, -- 0x2c, 0x13, 0x2e, 0x12, 0x84, 0x5b, 0xd9, 0x67, 0x1f, 0xe8, 0xc9, 0x70, -- 0xeb, 0xef, 0x33, 0x29, 0x05, 0x92, 0x5f, 0x18, 0xa7, 0x03, 0x34, 0x18, -- 0xba, 0x24, 0x3d, 0x43, 0xf6, 0x00, 0xb2, 0xa4, 0x32, 0x40, 0x01, 0x05, -- 0x88, 0x7c, 0x31, 0xae, 0x73, 0x65, 0xfa, 0x3a, 0x88, 0x66, 0x18, 0x5b, -- 0x20, 0x5d, 0x24, 0x6a, 0x1f, 0x48, 0x9e, 0x6e, 0x6f, 0x77, 0x14, 0x41, -- 0x49, 0x47, 0xc5, 0xad, 0x45, 0x83, 0x2a, 0x46, 0x0b, 0xde, 0x12, 0xa5, -- 0x19, 0xa2, 0x45, 0xc5, 0x62, 0xea, 0xe0, 0x92, 0x6d, 0x02, 0xbc, 0x62, -- 0xe6, 0x6b, 0x09, 0xd6, 0x4d, 0x4e, 0xe5, 0xf7, 0x00, 0x8d, 0xb1, 0x45, -- 0x6b, 0x1d, 0x47, 0x41, 0x94, 0x31, 0xd4, 0xfe, 0x34, 0x28, 0x0d, 0xa3, -- 0xf1, 0x07, 0xd1, 0xc8, 0x14, 0xa8, 0x36, 0xe8, 0xe6, 0x59, 0x4c, 0x11, -- 0xe7, 0x17, 0x27, 0x67, 0x4a, 0x61, 0x31, 0xd7, 0xd5, 0xba, 0xc3, 0xfc, -- 0x88, 0x8f, 0x88, 0xed, 0x77, 0x38, 0xf8, 0x9d, 0xe9, 0x57, 0x72, 0x31, -- 0x19, 0x77, 0xcc, 0xf7, 0xfa, 0xdc, 0x07, 0xe3, 0xe9, 0xd4, 0xbe, 0x4b, -- 0x4b, 0x20, 0x4b, 0x59, 0xf5, 0x10, 0x2b, 0x46, 0x1c, 0xbc, 0x24, 0x07, -- 0xed, 0x64, 0x09, 0x62, 0x17, 0x2b, 0x2e, 0xd3, 0x91, 0xda, 0x73, 0x39, -- 0x02, 0x55, 0x8d, 0x62, 0xce, 0xe9, 0xd6, 0xa6, 0x45, 0x39, 0x44, 0x27, -- 0xae, 0x40, 0x8c, 0x39, 0xe8, 0xdd, 0xdd, 0xe5, 0x55, 0x57, 0x38, 0x84, -- 0xd9, 0x41, 0x24, 0xe1, 0x0e, 0x9a, 0xa0, 0x99, 0x72, 0xc6, 0x43, 0x7b, -- 0xb7, 0xc7, 0x24, 0x19, 0x49, 0x5c, 0x68, 0x61, 0x15, 0xb8, 0x4d, 0x54, -- 0xf4, 0x52, 0xd6, 0xb6, 0x5b, 0xe7, 0xd3, 0x93, 0xb3, 0x0b, 0x1b, 0x1a, -- 0xba, 0xc5, 0x07, 0xad, 0xf3, 0xc3, 0xf8, 0x64, 0xea, 0xa2, 0x01, 0x67, -- 0x91, 0x4d, 0x88, 0xb4, 0x52, 0x95, 0x08, 0x65, 0x53, 0xd0, 0x8e, 0x35, -- 0xc4, 0x3a, 0x5b, 0x79, 0x6f, 0xf1, 0x5a, 0xac, 0xed, 0x38, 0x9e, 0x23, -- 0x66, 0x14, 0x66, 0xd0, 0xdd, 0x8e, 0x54, 0x2f, 0xd3, 0x3c, 0xd9, 0x89, -- 0xa9, 0x83, 0x95, 0xe7, 0xb3, 0x43, 0xae, 0x56, 0x7d, 0x71, 0x2d, 0xbf, -- 0x45, 0x63, 0x17, 0xfb, 0xae, 0x7e, 0xd8, 0x1d, 0xfe, 0x01, 0xea, 0xe0, -- 0x4c, 0x1a, 0x0e, 0xef, 0xe6, 0xf6, 0x9d, 0xbd, 0x39, 0x58, 0xb3, 0x27, -- 0x41, 0xd6, 0x34, 0xd8, 0xa6, 0xd2, 0x0a, 0x12, 0xdc, 0xf1, 0x41, 0x4f, -- 0x7b, 0xe9, 0xd1, 0xad, 0x2b, 0x47, 0xa2, 0x28, 0x6f, 0x82, 0x16, 0x9e, -- 0xfa, 0x16, 0x16, 0xcc, 0xdf, 0xb5, 0x81, 0x23, 0xf3, 0x5b, 0xf3, 0x87, -- 0x2e, 0x40, 0xf6, 0x2a, 0x9b, 0x1b, 0x61, 0xc8, 0x73, 0xbe, 0x9d, 0x67, -- 0xce, 0xdb, 0x63, 0xf2, 0x51, 0x30, 0x14, 0xfe, 0xd8, 0xd2, 0x55, 0x11, -- 0x1c, 0xd7, 0x22, 0xbb, 0x27, 0xcf, 0xfd, 0x0d, 0xc1, 0xaa, 0x84, 0x8f, -- 0xc0, 0xd0, 0x15, 0x08, 0x6e, 0x24, 0x8e, 0x60, 0xc9, 0xe7, 0x4b, 0x60, -- 0x57, 0x12, 0x9b, 0x98, 0x32, 0x6e, 0xb3, 0x86, 0x50, 0x44, 0x0e, 0x5f, -- 0x4d, 0xbc, 0xf6, 0xfd, 0xe8, 0x4d, 0x74, 0x74, 0x7c, 0xe8, 0xb7, 0x4b, -- 0xc0, 0xc1, 0x70, 0x98, 0xbd, 0x90, 0x47, 0x07, 0x77, 0xee, 0xae, 0x8b, -- 0x61, 0x72, 0xca, 0xe5, 0xba, 0xe0, 0x7d, 0xaa, 0xfe, 0xcd, 0xb7, 0x26, -- 0x87, 0x05, 0xc6, 0x18, 0xba, 0x40, 0x61, 0x14, 0xcd, 0xe7, 0xb4, 0xbb, -- 0xf8, 0x84, 0x7f, 0x0d, 0x2a, 0x2d, 0x45, 0x53, 0x7e, 0xe1, 0x5f, 0xae, -- 0x68, 0x1e, 0xa4, 0xaa, 0xb5, 0x1f, 0x79, 0xaa, 0xb4, 0x45, 0x7a, 0x9c, -- 0x94, 0x7c, 0x37, 0xf6, 0xcc, 0x67, 0xba, 0x94, 0x72, 0x08, 0x13, 0x69, -- 0xe1, 0xd2, 0x9e, 0x69, 0xb0, 0xf1, 0xa0, 0x29, 0xb9, 0x14, 0xf6, 0x65, -- 0x9d, 0x10, 0x99, 0x4e, 0x27, 0x67, 0x94, 0x8e, 0x6f, 0xa8, 0xad, 0x39, -- 0x73, 0xdc, 0xa9, 0xd9, 0xcb, 0x7d, 0x96, 0x11, 0x73, 0x4c, 0x7e, 0x41, -- 0x71, 0xfa, 0xb2, 0x32, 0xae, 0xbb, 0xd7, 0x30, 0x2d, 0x3e, 0x15, 0x6a, -- 0x74, 0xa4, 0xe3, 0xee, 0xb1, 0xc6, 0xe8, 0xb8, 0x63, 0x9f, 0x9e, 0xc3, -- 0xbb, 0xcd, 0xa6, 0x21, 0xba, 0xe5, 0x43, 0xe9, 0xee, 0xe9, 0x33, 0xdf, -- 0xd4, 0x25, 0x50, 0xec, 0x8d, 0xbf, 0xef, 0x37, 0x78, 0x90, 0x83, 0x44, -- 0xcf, 0xdd, 0x93, 0xa2, 0x2c, 0x88, 0x85, 0xba, 0xe3, 0x58, 0x05, 0x7d, -- 0x08, 0x31, 0x5c, 0x14, 0x1c, 0x8b, 0x30, 0xbf, 0xf7, 0xc0, 0x1c, 0x43, -- 0x89, 0xee, 0x13, 0x1b, 0x84, 0x94, 0x07, 0x70, 0x90, 0x1d, 0xa2, 0x6d, -- 0xaa, 0x82, 0x3e, 0x4b, 0x3f, 0x46, 0x57, 0xfd, 0x6c, 0x39, 0x53, 0x3c, -- 0x82, 0xa0, 0xa7, 0xcf, 0x55, 0x9b, 0x95, 0x6a, 0xf3, 0x4e, 0xff, 0x0b, -- 0x99, 0x69, 0xe1, 0x5c, 0xba, 0x96, 0x24, 0x31, 0x97, 0x20, 0xe0, 0xca, -- 0x15, 0x43, 0x5a, 0x8b, 0x5d, 0x27, 0x7c, 0x21, 0xab, 0x98, 0x68, 0xe1, -- 0x86, 0x45, 0x80, 0x26, 0xc9, 0xeb, 0xad, 0x8f, 0xc9, 0x57, 0xe6, 0x2d, -- 0xec, 0x70, 0xc8, 0x94, 0xd9, 0x5f, 0x51, 0x83, 0x70, 0x28, 0x97, 0x8e, -- 0x00, 0x3a, 0xc9, 0x2c, 0x39, 0xc4, 0xc0, 0xb3, 0xbc, 0xa7, 0x2f, 0xd4, -- 0x54, 0xa1, 0xaa, 0xb0, 0x15, 0xc6, 0x6b, 0x5b, 0x9a, 0x9f, 0xed, 0x38, -- 0xbb, 0x0f, 0x67, 0xff, 0xaf, 0x57, 0xc2, 0x1d, 0x02, 0x0c, 0x00, 0x62, -- 0x70, 0xe7, 0xe7, 0xdf, 0x24, 0x6f, 0x5f, 0x3f, 0xe3, 0x44, 0xd4, 0xab, -- 0xac, 0xe4, 0x9a, 0x93, 0x5e, 0x17, 0x3b, 0xf9, 0x36, 0x68, 0x6c, 0xd7, -- 0xc7, 0x15, 0x98, 0xfe, 0xa4, 0x0c, 0x4d, 0x25, 0x6d, 0xda, 0x42, 0x06, -- 0xb4, 0xbb, 0x32, 0x17, 0x8a, 0x95, 0x63, 0x33, 0x9c, 0x47, 0xc8, 0x2e, -- 0xed, 0x3c, 0x86, 0x26, 0x13, 0x7b, 0xf6, 0xc4, 0x33, 0xb1, 0xf2, 0x7e, -- 0xc1, 0xb8, 0xe8, 0xf3, 0x2b, 0x16, 0xa8, 0x3b, 0x4e, 0xd4, 0x33, 0x61, -- 0x9c, 0x07, 0x72, 0xee, 0x59, 0x98, 0x8d, 0x5f, 0x4b, 0x2b, 0x0b, 0x48, -- 0x09, 0xde, 0x7b, 0x16, 0xaa, 0x93, 0x24, 0x90, 0xe3, 0x5e, 0xa4, 0xf5, -- 0x43, 0xc5, 0x55, 0x96, 0x54, 0x82, 0x67, 0x9f, 0xbb, 0x67, 0x97, 0x80, -- 0x51, 0x0e, 0x0a, 0x47, 0xac, 0x78, 0x43, 0x85, 0x60, 0x11, 0x0d, 0xbc, -- 0x78, 0x26, 0x72, 0x4f, 0xb0, 0xf6, 0xc1, 0x2b, 0x2f, 0x9a, 0xda, 0x32, -- 0x2a, 0xae, 0xf9, 0xfa, 0xc5, 0x3c, 0xa9, 0x7c, 0x71, 0x1d, 0x1e, 0xce, -- 0xe7, 0x72, 0x53, 0x9f, 0xb6, 0x21, 0x1d, 0x8c, 0x07, 0x36, 0x1c, 0xaf, -- 0x76, 0xd4, 0x85, 0xf4, 0x0f, 0xf6, 0x13, 0x7b, 0x25, 0xaa, 0x23, 0xcd, -- 0xb4, 0x1e, 0x74, 0xb2, 0xa3, 0x67, 0x86, 0xa6, 0x5c, 0x5c, 0xcd, 0xf3, -- 0xbf, 0x67, 0x41, 0x0e, 0xb3, 0x15, 0xfd, 0x08, 0x1e, 0xdf, 0x55, 0x86, -- 0x71, 0x9b, 0x4e, 0x73, 0x65, 0x8a, 0x6c, 0x47, 0xf7, 0x0f, 0x3c, 0x51, -- 0xaa, 0xfd, 0x98, 0xf3, 0x11, 0x95, 0x18, 0x54, 0x2e, 0xff, 0xc4, 0x1e, -- 0x9c, 0xac, 0x01, 0x11, 0xf2, 0xfc, 0xa9, 0xca, 0x5e, 0x26, 0x1f, 0xf3, -- 0xbd, 0xc4, 0x0b, 0x31, 0x65, 0x07, 0x77, 0xc4, 0xa6, 0x9f, 0xeb, 0xd5, -- 0xa7, 0x5b, 0xa9, 0xe1, 0x4f, 0xa9, 0x71, 0x68, 0xf6, 0x0a, 0x94, 0xd9, -- 0x5d, 0x3e, 0xd7, 0xcc, 0xa2, 0xe8, 0xf5, 0xe7, 0x2b, 0x4c, 0x50, 0x95, -- 0xdc, 0x9b, 0x87, 0xa0, 0xa5, 0xe0, 0xf9, 0xcf, 0xfc, 0x49, 0x08, 0xc1, -- 0xf1, 0x9d, 0x2b, 0x15, 0x51, 0x71, 0x56, 0x6f, 0xc1, 0xce, 0x12, 0xab, -- 0x2e, 0x0b, 0x83, 0xf7, 0xec, 0x48, 0xe3, 0xbb, 0x74, 0xdd, 0x4f, 0x0b, -- 0xe6, 0xa6, 0x41, 0x7f, 0x42, 0x52, 0x6f, 0x50, 0x41, 0xcf, 0x2b, 0x08, -- 0xf3, 0x46, 0xad, 0x2b, 0xff, 0xf4, 0x0b, 0xa5, 0x0d, 0xbb, 0x2f, 0x4d, -- 0x4c, 0x5d, 0xf9, 0xc6, 0x67, 0xdb, 0xa1, 0xd0, 0x3a, 0x61, 0x4b, 0xbd, -- 0x80, 0x33, 0xae, 0x7c, 0x41, 0x28, 0xe3, 0x88, 0xae, 0x91, 0x2b, 0x22, -- 0x6a, 0x3c, 0xe3, 0x41, 0x49, 0xfd, 0x63, 0xbb, 0x0d, 0xa6, 0x7b, 0x11, -- 0x8a, 0x50, 0xc9, 0xd1, 0xeb, 0xe0, 0xc1, 0x27, 0x7e, 0x82, 0xe9, 0x94, -- 0xa5, 0x81, 0x7b, 0xb1, 0x44, 0x54, 0x5a, 0x6e, 0x2c, 0x78, 0xf4, 0xa9, -- 0x26, 0x88, 0x48, 0x4e, 0x16, 0x96, 0x3f, 0x7a, 0x46, 0xc8, 0xe1, 0x00, -- 0xf9, 0x5c, 0x35, 0xb0, 0x0c, 0xe6, 0xe6, 0x2d, 0x68, 0xef, 0xfd, 0x67, -- 0xcf, 0x1f, 0x78, 0x56, 0x2f, 0xcd, 0xca, 0x5d, 0xf5, 0xc1, 0x7b, 0x9f, -- 0xc5, 0xc7, 0xdc, 0xd4, 0x02, 0x43, 0x5c, 0xa1, 0xa3, 0xc6, 0x27, 0x2d, -- 0xd9, 0x60, 0xa8, 0xbe, 0x7f, 0x33, 0xd3, 0x4f, 0xc9, 0x79, 0x6d, 0xd5, -- 0xbf, 0x85, 0xe3, 0xfd, 0x3c, 0x80, 0x75, 0x52, 0xa3, 0x8f, 0x2b, 0x7a, -- 0x1b, 0x16, 0xc2, 0xf3, 0xb1, 0xda, 0x58, 0x9d, 0xa0, 0x05, 0xd9, 0x73, -- 0x92, 0x23, 0x96, 0x73, 0xcf, 0x39, 0x44, 0x19, 0x54, 0xc0, 0x4b, 0x87, -- 0x52, 0x2f, 0xa3, 0xfb, 0x86, 0x36, 0x15, 0xd4, 0x11, 0x18, 0xcf, 0xb6, -- 0x5b, 0xc7, 0xa0, 0xba, 0x5e, 0x8a, 0xea, 0xed, 0x66, 0xe4, 0x61, 0x96, -- 0x82, 0xd7, 0x76, 0x3d, 0xf7, 0xc2, 0xd8, 0x20, 0x35, 0x1e, 0xd0, 0x68, -- 0x45, 0x37, 0x4f, 0x40, 0x86, 0xe6, 0xf8, 0x40, 0x91, 0x6d, 0x0f, 0xd3, -- 0xba, 0x91, 0xae, 0x80, 0x14, 0x50, 0x14, 0x94, 0xa0, 0x1b, 0x15, 0x6d, -- 0x38, 0xd4, 0x9c, 0x76, 0xe9, 0x3a, 0x1b, 0xdf, 0xd8, 0x91, 0xd9, 0x48, -- 0x5b, 0xd8, 0x29, 0xc1, 0x5b, 0x4f, 0xdd, 0xd2, 0x42, 0xad, 0x39, 0x3b, -- 0x6c, 0x6b, 0x02, 0xfe, 0x51, 0xa1, 0x9a, 0xb3, 0x8b, 0xf3, 0xd3, 0x3d, -- 0x1e, 0xb3, 0xb8, 0x60, 0xe8, 0x40, 0x1c, 0x9c, 0x67, 0x7f, 0xd3, 0x0c, -- 0xda, 0xca, 0x3f, 0xfd, 0x7c, 0xc5, 0xd3, 0xe7, 0x1a, 0x22, 0x75, 0x34, -- 0x61, 0xf6, 0x4b, 0xfb, 0x10, 0xbe, 0xf4, 0x99, 0x22, 0x11, 0x98, 0x69, -- 0x57, 0x2c, 0x47, 0x3c, 0x32, 0x97, 0xac, 0xe2, 0x1f, 0xfe, 0xdc, 0xeb, -- 0x35, 0xd7, 0xcb, 0xf9, 0x8d, 0x93, 0x17, 0x35, 0xe0, 0xcc, 0x36, 0xd8, -- 0xbf, 0xf0, 0xc2, 0x8e, 0x46, 0x80, 0x86, 0xe5, 0xdc, 0xdf, 0x7d, 0xb5, -- 0x54, 0x58, 0x34, 0xa8, 0xf8, 0x8e, 0x88, 0xbf, 0x2e, 0x83, 0x35, 0xf8, -- 0xe1, 0x07, 0x61, 0xd1, 0x2e, 0x2a, 0x49, 0x3d, 0x03, 0xae, 0xda, 0x2b, -- 0xf1, 0x33, 0xb9, 0xd5, 0xf9, 0x74, 0xc0, 0x9c, 0x5e, 0x66, 0x28, 0x14, -- 0xa0, 0x18, 0xc1, 0xa0, 0xcb, 0xae, 0x6c, 0x3b, 0x0e, 0xbe, 0x95, 0xaa, -- 0xf4, 0x99, 0x02, 0xa7, 0xcf, 0x39, 0x62, 0x53, 0x6d, 0x4d, 0xb4, 0x61, -- 0xfb, 0xef, 0x2f, 0xbe, 0x39, 0x39, 0x3b, 0x4f, 0xb6, 0x18, 0xb8, 0xf0, -- 0xe2, 0xec, 0xe8, 0xab, 0xf7, 0xa4, 0xbe, 0x3b, 0xaf, 0xca, 0xeb, 0x94, -- 0x14, 0xfb, 0x69, 0x72, 0x5e, 0x67, 0x73, 0xda, 0x86, 0x2b, 0xab, 0x28, -- 0x88, 0xd8, 0x1b, 0xbe, 0xea, 0x8a, 0xb2, 0xef, 0x8a, 0x46, 0xdf, 0x5d, -- 0x17, 0xba, 0x96, 0xc8, 0x98, 0x41, 0xbc, 0x3d, 0xa7, 0x31, 0x14, 0x5e, -- 0x35, 0xcd, 0x9b, 0x60, 0x94, 0x89, 0x39, 0x47, 0x93, 0x8b, 0x6f, 0xf6, -- 0xdf, 0x7d, 0x7b, 0x6e, 0xc8, 0xed, 0xdf, 0x7f, 0xff, 0x7d, 0xe8, 0xb4, -- 0xdf, 0xdb, 0xda, 0x82, 0x74, 0x78, 0x9d, 0x7e, 0xfc, 0x38, 0xac, 0xb2, -- 0xb5, 0xb5, 0x37, 0xde, 0xd5, 0xe6, 0xeb, 0x41, 0x56, 0x4b, 0x12, 0x0c, -- 0xe8, 0xeb, 0xad, 0xc5, 0x72, 0xc4, 0xf5, 0x27, 0xb7, 0x96, 0x75, 0x3e, -- 0xa5, 0xfb, 0x24, 0xab, 0xf0, 0xf6, 0xd6, 0xda, 0xda, 0xf9, 0xe1, 0x61, -- 0xb2, 0x7f, 0x7c, 0x7e, 0x12, 0xbc, 0xbb, 0xb1, 0xc3, 0x81, 0x27, 0x57, -- 0x59, 0xbd, 0xc1, 0x18, 0xa0, 0xc7, 0xfb, 0x17, 0xac, 0xb2, 0x7e, 0x77, -- 0x78, 0x76, 0x7e, 0x74, 0xf2, 0x8e, 0x77, 0x87, 0xe3, 0x03, 0xd3, 0xe9, -- 0x1d, 0x87, 0x87, 0x5e, 0xe6, 0x00, 0x64, 0xb9, 0xb3, 0xe2, 0x8e, 0x8c, -- 0x2c, 0x4d, 0x92, 0x9d, 0x08, 0xe1, 0x12, 0x05, 0x61, 0x55, 0xe5, 0x25, -- 0x0a, 0xb6, 0x66, 0xbd, 0x51, 0x79, 0x1a, 0xaf, 0x80, 0x33, 0x5b, 0x49, -- 0x3d, 0x93, 0x6c, 0x24, 0x71, 0xc7, 0x7d, 0x81, 0x31, 0x40, 0xde, 0x47, -- 0x10, 0xa6, 0xd8, 0x39, 0xf1, 0xf3, 0xa3, 0xb7, 0xa7, 0xa4, 0xc0, 0xbd, -- 0x3f, 0xdf, 0xff, 0xfa, 0x90, 0x1f, 0xfd, 0x3a, 0xab, 0xfd, 0x7e, 0x48, -- 0x11, 0x4a, 0xee, 0xe4, 0x5d, 0x56, 0x57, 0xe3, 0x74, 0xc1, 0xf9, 0xda, -- 0xd4, 0xcd, 0x40, 0xae, 0x91, 0xa0, 0x6d, 0x11, 0xe5, 0x7d, 0xa5, 0xce, -- 0xb9, 0x3e, 0x8f, 0x32, 0x9a, 0x61, 0xbb, 0x67, 0x87, 0xfb, 0xaf, 0xdf, -- 0x1e, 0x5a, 0xe4, 0xba, 0x94, 0x31, 0xa0, 0x46, 0xaf, 0x0b, 0x2e, 0x9c, -- 0xee, 0x4c, 0xd9, 0x7c, 0xb5, 0xf3, 0xe2, 0xd3, 0x37, 0x5c, 0xc7, 0xb2, -- 0xbb, 0x3b, 0xbf, 0x51, 0x78, 0x76, 0x78, 0x99, 0x6f, 0x49, 0xeb, 0xd6, -- 0x5f, 0xea, 0x96, 0xc4, 0xf0, 0xaa, 0x55, 0xda, 0x15, 0x93, 0x04, 0x6c, -- 0x19, 0x9f, 0x6f, 0x6f, 0x6f, 0x3f, 0x30, 0x0f, 0xa8, 0x03, 0x7a, 0x69, -- 0xd2, 0x54, 0xf6, 0xf8, 0xf1, 0x2d, 0xdf, 0xbe, 0x1f, 0xf1, 0x54, 0xf3, -- 0xe2, 0xb9, 0xdc, 0xd4, 0x5c, 0x00, 0x58, 0xf3, 0x3a, 0xeb, 0x1e, 0xf2, -- 0xb8, 0x28, 0xdc, 0x0e, 0x34, 0x16, 0x67, 0xc2, 0x10, 0xe3, 0x79, 0x1d, -- 0x04, 0xf2, 0xda, 0xc0, 0x49, 0x7d, 0x41, 0x98, 0x5a, 0x79, 0xdf, 0x6e, -- 0x92, 0xbf, 0xa1, 0x36, 0xf9, 0x9f, 0x61, 0x51, 0x5e, 0x6d, 0xcd, 0xf6, -- 0x20, 0x91, 0xd0, 0x43, 0x6f, 0x32, 0x94, 0x9f, 0xbf, 0x2b, 0x5c, 0xb4, -- 0x76, 0xc5, 0x0b, 0xcb, 0x89, 0x25, 0x9f, 0x30, 0xae, 0x5f, 0xb1, 0x0a, -- 0x12, 0xd0, 0x74, 0x69, 0x33, 0xb7, 0x7a, 0x73, 0x1d, 0x9d, 0x54, 0xbc, -- 0x61, 0x6c, 0x30, 0x1c, 0x12, 0x03, 0xa1, 0x5e, 0x38, 0xe8, 0x0c, 0x24, -- 0x42, 0xbf, 0x96, 0x44, 0x32, 0x5c, 0x50, 0x84, 0xdf, 0xd2, 0xe2, 0x87, -- 0x02, 0x20, 0xc8, 0x0e, 0xd8, 0x05, 0x27, 0x34, 0x96, 0x08, 0x44, 0x44, -- 0x0f, 0x9c, 0x28, 0xa9, 0x78, 0xe4, 0x2e, 0x84, 0x87, 0x1b, 0x6e, 0xf7, -- 0x39, 0x18, 0x80, 0x7e, 0x2a, 0x47, 0x2d, 0x9f, 0xd0, 0x79, 0x30, 0x29, -- 0x59, 0xfd, 0xb9, 0xde, 0xb2, 0x01, 0xed, 0x9c, 0xd3, 0x28, 0xa2, 0xbe, -- 0x96, 0xbe, 0x7c, 0x63, 0x25, 0xdd, 0x55, 0xd7, 0x74, 0x7e, 0x87, 0x9a, -- 0xbb, 0x89, 0xbe, 0x68, 0x4f, 0xb6, 0x90, 0x64, 0xf5, 0xc9, 0x3d, 0x1d, -- 0x9c, 0xea, 0x6f, 0x1c, 0x10, 0x93, 0xdf, 0xf2, 0x12, 0xdc, 0x64, 0x98, -- 0x7d, 0xa8, 0x19, 0x3c, 0x30, 0x98, 0x3d, 0x5a, 0x05, 0x7e, 0xe3, 0x7f, -- 0x6f, 0x0d, 0xab, 0xea, 0x7a, 0x2b, 0x9f, 0x7c, 0x98, 0x54, 0x29, 0xc7, -- 0x34, 0x2d, 0x47, 0xd1, 0xc7, 0x43, 0xfa, 0x30, 0xf9, 0xb9, 0xc1, 0xf5, -- 0xab, 0x71, 0xf7, 0x4c, 0xfe, 0xf7, 0x16, 0x47, 0xa7, 0xa2, 0x6c, 0x53, -- 0xb0, 0x70, 0x1d, 0xbc, 0x83, 0x66, 0x25, 0x81, 0xd0, 0x74, 0x18, 0xbb, -- 0x29, 0x63, 0x70, 0x95, 0xf4, 0x94, 0xdc, 0x7e, 0xda, 0xdd, 0xde, 0xde, -- 0xd9, 0xdb, 0xf9, 0xfc, 0xc5, 0xf6, 0xde, 0xce, 0xce, 0xce, 0xee, 0xde, -- 0xce, 0xde, 0xde, 0xee, 0xf6, 0x2f, 0x5b, 0xbd, 0xb5, 0xb5, 0xd7, 0x27, -- 0xdf, 0xbf, 0x3b, 0x3e, 0xd9, 0x7f, 0x9d, 0x5c, 0x9c, 0x24, 0xfb, 0x30, -- 0x3b, 0x75, 0x9c, 0x73, 0x44, 0x5f, 0xd6, 0x52, 0x27, 0xa7, 0x61, 0xa2, -- 0x36, 0x1b, 0x89, 0x8b, 0xbc, 0xc1, 0xca, 0xb4, 0xc7, 0x51, 0x40, 0xad, -- 0xe0, 0x96, 0x86, 0xd7, 0xf5, 0xec, 0x71, 0x8e, 0xf6, 0x29, 0x3d, 0xf7, -- 0xc5, 0x13, 0xec, 0x35, 0x47, 0x0c, 0xc7, 0x28, 0x57, 0xf3, 0x55, 0xd4, -- 0x9f, 0xa2, 0x5e, 0x54, 0x97, 0x5d, 0xb1, 0x21, 0x71, 0x43, 0xbe, 0xe2, -- 0xb6, 0x14, 0x73, 0xaf, 0x62, 0xe0, 0x0f, 0x14, 0x57, 0x56, 0x37, 0x3d, -- 0xee, 0x78, 0x96, 0x89, 0x36, 0xa3, 0x09, 0x9e, 0xac, 0x9c, 0x12, 0xdd, -- 0x45, 0xd9, 0x47, 0xcc, 0xba, 0xc9, 0x3b, 0x24, 0xfe, 0xd6, 0xcf, 0x0e, -- 0x88, 0xf2, 0xa6, 0x0b, 0xe7, 0xa5, 0x0d, 0x19, 0x01, 0x46, 0x1d, 0xdd, -- 0x71, 0x3f, 0xc6, 0x52, 0x7c, 0x17, 0xfc, 0x4d, 0x78, 0x0f, 0x6d, 0x39, -- 0xf3, 0xa2, 0x0c, 0xe0, 0xfd, 0xf9, 0xd1, 0xbb, 0xaf, 0xe1, 0x40, 0xfc, -- 0xfe, 0xe4, 0xec, 0xf5, 0x39, 0x35, 0xcb, 0x17, 0xf4, 0x1a, 0x2c, 0x4c, -- 0x7c, 0x92, 0x75, 0x54, 0x72, 0x2e, 0xb8, 0xeb, 0x3f, 0x43, 0x61, 0x9b, -- 0xf4, 0x5d, 0xfa, 0x3b, 0x86, 0x19, 0xc8, 0xdb, 0x9c, 0xd6, 0xde, 0xcd, -- 0xf5, 0x40, 0x08, 0xf2, 0xfa, 0x97, 0xb3, 0x94, 0x0b, 0x9f, 0x64, 0x43, -- 0x89, 0x05, 0x46, 0xa4, 0xd7, 0x16, 0xe7, 0x57, 0x6c, 0xb1, 0xdc, 0xbf, -- 0x55, 0x17, 0xe0, 0x1f, 0x68, 0xa5, 0x28, 0xc3, 0x62, 0x64, 0x81, 0x75, -- 0x80, 0x0e, 0xde, 0xe5, 0x34, 0xbd, 0x42, 0x87, 0xf1, 0x99, 0x0c, 0x3a, -- 0xd3, 0xee, 0x3f, 0xb5, 0x4b, 0x66, 0x7b, 0x68, 0xef, 0x08, 0x04, 0x00, -- 0xa8, 0x2b, 0xe4, 0xea, 0xab, 0xe3, 0x43, 0xa4, 0x26, 0x76, 0x13, 0x23, -- 0xa2, 0x84, 0x6b, 0xb8, 0xb6, 0x0b, 0xdb, 0xa0, 0xae, 0xa6, 0x40, 0x84, -- 0x90, 0x0a, 0x30, 0x08, 0xa0, 0x46, 0x44, 0x37, 0xe2, 0x96, 0x02, 0x1b, -- 0x44, 0xe5, 0xa3, 0xe2, 0x7c, 0xf9, 0x12, 0x59, 0x72, 0x1e, 0x0c, 0x60, -- 0x72, 0x2a, 0x0b, 0xb7, 0x52, 0x31, 0xae, 0xc7, 0x75, 0x85, 0x38, 0x5e, -- 0xa2, 0x67, 0xb0, 0x17, 0xbe, 0x10, 0x82, 0x87, 0x0b, 0xaf, 0x6a, 0x1a, -- 0x4a, 0x4a, 0x57, 0x8a, 0x16, 0x69, 0x57, 0x14, 0x64, 0x92, 0xe6, 0x25, -- 0x5d, 0xb5, 0x67, 0x51, 0x17, 0xd2, 0x0a, 0xb5, 0x0d, 0x2c, 0x69, 0x97, -- 0xd3, 0xcf, 0xcc, 0x57, 0x40, 0x7a, 0xd6, 0xd4, 0xa3, 0xed, 0xf9, 0xbc, -- 0xb7, 0x9c, 0x31, 0x8f, 0x26, 0x21, 0x94, 0x18, 0xa8, 0x50, 0x8e, 0xe6, -- 0x56, 0x06, 0xd5, 0x13, 0x1b, 0xcb, 0x16, 0x56, 0x7b, 0x8f, 0x58, 0x6d, -- 0x33, 0x9b, 0x7a, 0x0d, 0x09, 0x55, 0x2e, 0xdc, 0x3a, 0x58, 0x1e, 0x89, -- 0xe9, 0xf2, 0xaf, 0xf2, 0x5e, 0xe4, 0x75, 0x95, 0x4d, 0x2f, 0x15, 0xff, -- 0xa4, 0x86, 0x5d, 0x90, 0xa7, 0x92, 0x36, 0x8a, 0x36, 0x59, 0x1e, 0xd5, -- 0x72, 0xee, 0x50, 0x19, 0x8a, 0xa0, 0xba, 0x9a, 0x03, 0x54, 0x69, 0x32, -- 0x0a, 0x71, 0xbc, 0x0d, 0xad, 0x0c, 0xd5, 0x5a, 0xe2, 0x4a, 0xd1, 0xb4, -- 0xa6, 0xe0, 0xaa, 0x73, 0xa0, 0x44, 0x02, 0xa8, 0x23, 0x78, 0x70, 0x39, -- 0xa2, 0xd5, 0x76, 0xcf, 0xf1, 0xda, 0x21, 0xf6, 0x8c, 0x9b, 0x3b, 0x08, -- 0xcb, 0xd0, 0x4b, 0xe8, 0xe5, 0x32, 0x42, 0x79, 0xc9, 0x15, 0x2b, 0x87, -- 0x0e, 0x1a, 0x32, 0xb6, 0x96, 0x95, 0x5b, 0x51, 0x94, 0xac, 0x92, 0x3b, -- 0x6e, 0x0d, 0x41, 0x89, 0xf1, 0x31, 0x54, 0x8e, 0xb4, 0xfa, 0x1c, 0x3e, -- 0x7e, 0x04, 0xe3, 0x21, 0x99, 0x1e, 0x30, 0xbd, 0x97, 0x53, 0x92, 0xcf, -- 0x1f, 0x3e, 0x8c, 0x3a, 0x88, 0x4f, 0xea, 0x18, 0x73, 0x55, 0x6c, 0x0c, -- 0x58, 0xbb, 0x7d, 0x50, 0x98, 0x38, 0xd8, 0x91, 0xc5, 0xd0, 0x91, 0xa3, -- 0xd2, 0x08, 0x61, 0xc5, 0x41, 0x90, 0x5c, 0xb7, 0xbd, 0xe4, 0xab, 0xb4, -- 0xca, 0xc7, 0xfd, 0xe4, 0x75, 0x7e, 0x05, 0xa4, 0x06, 0x97, 0x49, 0xe0, -- 0xf2, 0x2f, 0x86, 0xc9, 0xf7, 0x56, 0xdc, 0x90, 0x2e, 0x62, 0xa0, 0x9e, -- 0xc0, 0x32, 0xdb, 0xf0, 0xe8, 0xd3, 0x32, 0xa8, 0x55, 0x3d, 0x04, 0x26, -- 0x41, 0xdb, 0xbe, 0xfc, 0x07, 0x36, 0x33, 0xad, 0x6e, 0x9a, 0x55, 0xc5, -- 0x1c, 0x56, 0xb3, 0xc8, 0x45, 0x58, 0xdf, 0xb9, 0x16, 0x13, 0x55, 0x9a, -- 0xc3, 0xdf, 0x8e, 0xca, 0x55, 0x48, 0x11, 0x5b, 0x58, 0xa5, 0x51, 0x62, -- 0xe6, 0xcb, 0xc7, 0x6d, 0x64, 0xc7, 0x75, 0x0d, 0x89, 0xff, 0xb4, 0x4e, -- 0xbc, 0x22, 0xca, 0x4f, 0x4e, 0x2e, 0x0e, 0xff, 0x90, 0xec, 0xb7, 0x5d, -- 0x99, 0xcc, 0xa8, 0x1b, 0x00, 0x29, 0x7d, 0x4f, 0x57, 0x18, 0xbb, 0x04, -- 0x86, 0x49, 0x15, 0x9c, 0xd4, 0x25, 0x56, 0x84, 0x1b, 0xdf, 0x4f, 0xaa, -- 0x42, 0xe3, 0x5c, 0xeb, 0x7b, 0x03, 0x02, 0xe7, 0xd7, 0x60, 0xe0, 0x05, -- 0x98, 0x8c, 0xf0, 0x10, 0xc9, 0xbc, 0xcb, 0x53, 0x89, 0x33, 0x66, 0x18, -- 0x24, 0xda, 0x8b, 0xb9, 0x1c, 0x45, 0x84, 0xc4, 0x4a, 0xe4, 0x96, 0x00, -- 0x0d, 0xe5, 0x35, 0x24, 0x67, 0x38, 0xeb, 0xb5, 0xa0, 0xd7, 0xf7, 0xbe, -- 0xa9, 0x34, 0x44, 0xa4, 0xfa, 0xc0, 0x27, 0xec, 0x83, 0xf1, 0x59, 0xbd, -- 0x11, 0x64, 0x2c, 0x5a, 0xd3, 0xbb, 0x49, 0xa9, 0x76, 0xda, 0x84, 0xb9, -- 0x9f, 0x5a, 0x50, 0x18, 0xf6, 0x62, 0x0c, 0xbc, 0x97, 0xe9, 0xbd, 0xf8, -- 0x30, 0x71, 0xc5, 0xd8, 0xa1, 0x0e, 0xf9, 0x34, 0x10, 0x9c, 0x80, 0x1b, -- 0x83, 0x12, 0xab, 0x5a, 0x6f, 0x46, 0x42, 0x70, 0xa9, 0xd5, 0x66, 0xe0, -- 0x34, 0x52, 0x29, 0xb0, 0xaa, 0xa8, 0x55, 0x08, 0xb8, 0xb4, 0x30, 0x70, -- 0xbb, 0xb2, 0x72, 0x9a, 0x56, 0x6f, 0xb1, 0x55, 0x0b, 0x71, 0x8d, 0x2f, -- 0x20, 0x67, 0xbd, 0x42, 0x19, 0x5b, 0x57, 0xc9, 0x25, 0x88, 0x18, 0x7c, -- 0xe3, 0xa0, 0xb3, 0xb4, 0x59, 0x2e, 0x2f, 0x37, 0xce, 0x82, 0x7c, 0x89, -- 0x39, 0x91, 0xac, 0xbf, 0x08, 0x84, 0x7e, 0x8a, 0x4a, 0x4b, 0xd9, 0xe6, -- 0x02, 0xab, 0x24, 0xc5, 0xa8, 0x46, 0x99, 0x20, 0xc4, 0x73, 0x11, 0x11, -- 0xec, 0x22, 0x50, 0x07, 0xf9, 0xe0, 0x09, 0x65, 0xce, 0x40, 0xdc, 0x6b, -- 0x9e, 0xba, 0x99, 0x5b, 0xaf, 0x9a, 0x27, 0x27, 0x3a, 0x32, 0xb9, 0x99, -- 0xf5, 0x52, 0x24, 0x09, 0x96, 0xa6, 0xe7, 0x5a, 0xd6, 0x08, 0xb6, 0x00, -- 0x1d, 0x35, 0xef, 0x0e, 0x04, 0xbd, 0xb9, 0x13, 0x3b, 0x6c, 0xd3, 0x1b, -- 0xf8, 0x60, 0xcc, 0x4a, 0x26, 0xc9, 0xec, 0x5e, 0x13, 0x05, 0xf4, 0xaa, -- 0xe4, 0x5c, 0x76, 0x28, 0x99, 0x9f, 0x7f, 0x1e, 0x89, 0x46, 0x1f, 0xdd, -- 0xd3, 0x7b, 0xf4, 0x75, 0xa0, 0xcc, 0x4e, 0xd9, 0xed, 0xcf, 0xca, 0x23, -- 0xc4, 0x32, 0xa7, 0xd1, 0x76, 0xe8, 0x0a, 0x01, 0xdc, 0x91, 0xf4, 0xe8, -- 0xac, 0xe4, 0x11, 0x95, 0xf5, 0x7d, 0x36, 0xc3, 0x9a, 0x68, 0x4b, 0x5a, -- 0xed, 0xb0, 0x92, 0xf0, 0x91, 0x15, 0xea, 0x83, 0x71, 0xc7, 0xf6, 0x68, -- 0x03, 0x21, 0x92, 0x04, 0xd9, 0x21, 0xcb, 0x9d, 0x2c, 0x13, 0x9f, 0x17, -- 0xda, 0x30, 0x2f, 0xb2, 0x0e, 0xc6, 0x51, 0x47, 0xbb, 0xa6, 0xa6, 0x55, -- 0xf1, 0x73, 0xb7, 0xfa, 0xe0, 0xfd, 0xea, 0xe1, 0xbc, 0xff, 0x2d, 0xc3, -- 0xd9, 0x4f, 0x1e, 0x0c, 0x98, 0xd7, 0xa2, 0x8c, 0xcc, 0xe8, 0x2b, 0x4b, -- 0x15, 0x2a, 0x40, 0xd5, 0xa6, 0x7b, 0xca, 0x1a, 0x8d, 0xd9, 0xd5, 0x35, -- 0x6a, 0xd6, 0x67, 0x8a, 0xf5, 0xcc, 0x79, 0x21, 0x4f, 0x43, 0xc6, 0xe7, -- 0xf6, 0xfb, 0x36, 0x94, 0x4f, 0x1d, 0xae, 0xc1, 0xfc, 0x59, 0x46, 0x4c, -- 0x2b, 0xd8, 0x5d, 0x93, 0x50, 0x76, 0x86, 0xdb, 0x21, 0xae, 0x8b, 0x4b, -- 0x4d, 0x29, 0x01, 0x1d, 0x59, 0x03, 0x42, 0xc7, 0x97, 0xb7, 0xe5, 0x99, -- 0x00, 0x3a, 0xa0, 0xf5, 0x9a, 0x7e, 0xb6, 0x23, 0x70, 0xba, 0x74, 0x92, -- 0xb4, 0xc6, 0x08, 0x23, 0x85, 0x64, 0xb3, 0x05, 0x42, 0xf8, 0x8d, 0x03, -- 0x86, 0x77, 0x3f, 0xce, 0xd1, 0x53, 0x7f, 0xa4, 0x9e, 0xb9, 0xed, 0xd6, -- 0x31, 0x4a, 0x84, 0x37, 0x1e, 0xb0, 0x20, 0x6b, 0xc8, 0x62, 0x59, 0x26, -- 0x2d, 0xd5, 0x2b, 0x53, 0x8d, 0x0e, 0x9a, 0x09, 0x81, 0x4c, 0xcf, 0xb8, -- 0x63, 0x93, 0xcb, 0x65, 0x09, 0xc6, 0xab, 0xe0, 0x69, 0x8a, 0xba, 0xc1, -- 0xad, 0x72, 0xb4, 0x64, 0x07, 0xa7, 0x41, 0x42, 0x2c, 0x1d, 0x97, 0x25, -- 0xca, 0x31, 0xab, 0xb1, 0x13, 0x08, 0x01, 0x5a, 0x26, 0xcb, 0x7b, 0x42, -- 0x9c, 0x09, 0x8d, 0xda, 0x9d, 0xe6, 0x34, 0xa0, 0x75, 0xc0, 0x4f, 0xf0, -- 0xd2, 0x73, 0xba, 0x80, 0xf2, 0x42, 0x23, 0x61, 0x87, 0xa4, 0xdc, 0xac, -- 0xd0, 0x1b, 0x57, 0xdd, 0x69, 0x33, 0x5d, 0xb9, 0x06, 0xfa, 0xc9, 0xe0, -- 0x7f, 0xea, 0xca, 0xb0, 0xb4, 0xca, 0x91, 0x3c, 0x80, 0xda, 0x5f, 0x04, -- 0x48, 0x84, 0x9a, 0x70, 0x05, 0x86, 0xcf, 0x97, 0xba, 0xcd, 0xc3, 0xe5, -- 0x47, 0x5a, 0xc6, 0x06, 0xf8, 0xdf, 0x9b, 0x10, 0x73, 0xf2, 0x8d, 0xaf, -- 0xae, 0xdb, 0x37, 0x56, 0x21, 0xcd, 0xad, 0x39, 0xec, 0x7e, 0x89, 0xdc, -- 0x8a, 0x06, 0xec, 0x2e, 0xb2, 0xaf, 0xb8, 0xba, 0xd9, 0x41, 0x91, 0x86, -- 0xcb, 0xea, 0xab, 0x23, 0xe9, 0x48, 0x85, 0xf8, 0x8d, 0x4f, 0xf4, 0x24, -- 0x69, 0x70, 0x40, 0x2f, 0x0c, 0xde, 0xab, 0xc9, 0xe1, 0x4b, 0xe9, 0x61, -- 0x08, 0x2b, 0xaa, 0xf4, 0x70, 0x8a, 0xaa, 0xad, 0xf6, 0xc0, 0x9e, 0xbe, -- 0xc4, 0x99, 0x86, 0x3d, 0x35, 0x38, 0x34, 0x57, 0x45, 0x9e, 0xb7, 0x4c, -- 0x44, 0xae, 0x06, 0x8a, 0x29, 0x0c, 0xc4, 0xbc, 0xce, 0x87, 0x4c, 0x7e, -- 0x95, 0x77, 0x55, 0x97, 0xba, 0xe7, 0x26, 0x86, 0x12, 0x03, 0xad, 0xa6, -- 0x86, 0xdd, 0x9d, 0x2d, 0x19, 0xcc, 0x96, 0x34, 0x20, 0xe2, 0x9c, 0x92, -- 0xa4, 0x77, 0xc9, 0x1b, 0xd0, 0x4a, 0x78, 0x73, 0x71, 0xc4, 0x36, 0x87, -- 0x52, 0xcc, 0x34, 0x0e, 0x14, 0xbe, 0x0e, 0xbe, 0x9a, 0xe8, 0xae, 0x95, -- 0x2a, 0x2a, 0x85, 0xee, 0xcf, 0x9a, 0xdf, 0xa0, 0xbe, 0x93, 0xf4, 0x88, -- 0x94, 0x06, 0xb7, 0x41, 0x28, 0x01, 0xe7, 0xe5, 0x01, 0x16, 0x90, 0x2b, -- 0x3f, 0xba, 0x8c, 0x26, 0x3e, 0xe8, 0xe2, 0xed, 0x24, 0x8a, 0x3e, 0xdb, -- 0x7f, 0xf7, 0xf5, 0x21, 0x24, 0x01, 0x07, 0x18, 0x97, 0x33, 0xb5, 0x4f, -- 0x96, 0x63, 0x28, 0x0d, 0xb4, 0x62, 0x88, 0x44, 0x02, 0x84, 0xaa, 0xf0, -- 0xf3, 0x1c, 0x90, 0x3e, 0x42, 0xbc, 0xd8, 0x6e, 0x8d, 0x2f, 0x5a, 0x4b, -- 0xcc, 0x40, 0x06, 0x09, 0x82, 0xf5, 0x27, 0x2b, 0x21, 0x5c, 0x2d, 0x47, -- 0x8b, 0x54, 0x91, 0x38, 0xd2, 0x10, 0xaa, 0x41, 0xcd, 0x0e, 0xc3, 0xe6, -- 0x59, 0x5c, 0xb3, 0x64, 0x03, 0xa7, 0xe2, 0x96, 0x50, 0x71, 0x87, 0xa1, -- 0xcd, 0x47, 0xf0, 0x09, 0x76, 0xb6, 0xb7, 0x7d, 0x8d, 0x0c, 0x0f, 0x39, -- 0x11, 0x71, 0xcb, 0x32, 0xd9, 0x1e, 0xbc, 0x78, 0xb1, 0x8a, 0x11, 0xba, -- 0x46, 0x81, 0xfb, 0xf0, 0xec, 0x93, 0xdb, 0x1c, 0xf0, 0xa3, 0xab, 0xda, -- 0xec, 0x50, 0x64, 0x50, 0x04, 0x57, 0x63, 0xbb, 0x2a, 0x27, 0xb5, 0xa8, -- 0xc1, 0x43, 0x6c, 0xef, 0xf0, 0x85, 0xcc, 0x9d, 0x36, 0xc3, 0x4b, 0xb9, -- 0xe6, 0x31, 0x6e, 0x01, 0x3b, 0x60, 0xb6, 0x91, 0x05, 0x87, 0x77, 0xe5, -- 0xce, 0xa3, 0xf6, 0x49, 0x0b, 0x13, 0xe8, 0xb3, 0x2b, 0x96, 0xe8, 0x32, -- 0x9e, 0x8d, 0x89, 0x04, 0xef, 0x4f, 0xd9, 0x1c, 0x76, 0xf4, 0xee, 0x6b, -- 0xb1, 0x0e, 0x90, 0xaa, 0x0b, 0xd3, 0xe8, 0x56, 0x4b, 0xf1, 0x7d, 0x2f, -- 0xc5, 0x2e, 0x38, 0xb8, 0x0f, 0xae, 0x74, 0xa9, 0x57, 0x99, 0xcf, 0x85, -- 0x15, 0xf8, 0xdd, 0x5f, 0x61, 0x9a, 0xbb, 0x48, 0x06, 0x81, 0x70, 0xa2, -- 0x95, 0x2e, 0x58, 0x32, 0x99, 0xdd, 0x9b, 0x42, 0xa4, 0x3d, 0xa0, 0x75, -- 0x33, 0xb4, 0xbb, 0x66, 0xc5, 0x04, 0x26, 0x5a, 0x2c, 0x28, 0x28, 0x92, -- 0x4d, 0x3a, 0xba, 0x94, 0x6e, 0x70, 0xbe, 0x5b, 0x92, 0xc8, 0xa7, 0x0d, -- 0xa5, 0x61, 0xf9, 0x6b, 0xd6, 0x46, 0x63, 0xc9, 0xaa, 0x6f, 0xa6, 0x90, -- 0xb6, 0x55, 0x4e, 0xea, 0x29, 0x87, 0x5c, 0x9d, 0x77, 0x1b, 0x85, 0x14, -- 0x8b, 0xe2, 0xbf, 0x3e, 0xce, 0x07, 0x46, 0xc8, 0x07, 0x95, 0x6f, 0xaa, -- 0xf9, 0xc4, 0xab, 0xfe, 0x3a, 0xe2, 0x4e, 0xbb, 0xf6, 0x85, 0xbc, 0x2f, -- 0x5d, 0xa7, 0xdd, 0xdd, 0xc9, 0xfb, 0xb6, 0x34, 0x1d, 0x07, 0x80, 0x45, -- 0x5a, 0xad, 0x85, 0xe2, 0x12, 0x01, 0x4d, 0x97, 0x61, 0x29, 0x1c, 0x9c, -- 0x23, 0x6f, 0x8a, 0x25, 0x6b, 0x89, 0x66, 0x1b, 0xa3, 0x50, 0x0a, 0xd3, -- 0x10, 0x90, 0xb3, 0x71, 0x79, 0xdd, 0x20, 0x4c, 0xef, 0x52, 0xa1, 0x66, -- 0x51, 0xfb, 0xf7, 0xc8, 0x61, 0xf9, 0x78, 0xc0, 0xde, 0x72, 0x39, 0x57, -- 0xde, 0xc7, 0xfa, 0x16, 0x0d, 0x3e, 0xad, 0xae, 0x51, 0x7a, 0xd6, 0x59, -- 0x66, 0x62, 0xf1, 0x0a, 0xdd, 0x2b, 0xfa, 0x2c, 0xc9, 0x53, 0x22, 0x4c, -- 0x41, 0xb8, 0x6e, 0x2c, 0x45, 0x73, 0x05, 0x02, 0x43, 0xc6, 0xa7, 0x9e, -- 0x02, 0x91, 0xa9, 0x3b, 0x5c, 0x37, 0x38, 0x08, 0x01, 0x73, 0xe9, 0x24, -- 0xbf, 0xa6, 0x21, 0x28, 0x94, 0xcf, 0x61, 0x77, 0x81, 0xb6, 0x04, 0x58, -- 0xa5, 0xd6, 0x12, 0x42, 0x89, 0x06, 0xa6, 0xa5, 0xa0, 0x2c, 0x19, 0xcb, -- 0x55, 0x69, 0x00, 0xd6, 0x2f, 0x5f, 0x6a, 0x65, 0x2a, 0x91, 0xfa, 0x7c, -- 0xdf, 0x8b, 0x4a, 0x0a, 0x6f, 0xa2, 0xe4, 0x17, 0xa1, 0x4f, 0xcc, 0x50, -- 0x06, 0x28, 0xe9, 0xe0, 0x35, 0xe2, 0x7e, 0xcf, 0x2f, 0x58, 0xbb, 0xc7, -- 0x75, 0x64, 0x3a, 0xe2, 0x77, 0x87, 0x67, 0x5f, 0x9d, 0x9c, 0x1f, 0x12, -- 0xb7, 0x78, 0x7d, 0xf8, 0xd5, 0x7b, 0xe6, 0x24, 0xbc, 0x63, 0x62, 0x1d, -- 0x05, 0x28, 0xa9, 0xe4, 0xea, 0x02, 0x6a, 0x89, 0x03, 0x9a, 0x40, 0x3a, -- 0x22, 0x9b, 0xf4, 0x8d, 0x32, 0x4c, 0xec, 0x12, 0x6c, 0xcf, 0x69, 0x26, -- 0xe6, 0xb4, 0x1c, 0x61, 0xda, 0x1e, 0x7f, 0x98, 0xa3, 0xa1, 0xe6, 0x0c, -- 0x9a, 0x5e, 0x1b, 0xfc, 0x8d, 0x15, 0xc0, 0xab, 0xf6, 0x3c, 0xbe, 0xe4, -- 0xad, 0x18, 0x4f, 0xf5, 0x40, 0xf8, 0x42, 0xd5, 0x56, 0x92, 0x5a, 0xaf, -- 0x26, 0xc8, 0xb6, 0x0a, 0x15, 0x38, 0x2d, 0xe4, 0x26, 0x63, 0xb0, 0x1d, -- 0x9c, 0x6b, 0xdc, 0xad, 0x79, 0x8d, 0x6b, 0x55, 0x84, 0x7c, 0x2d, 0x0f, -- 0x5d, 0x09, 0xc1, 0x11, 0xcb, 0x91, 0xc4, 0xdc, 0xa9, 0xb2, 0x68, 0x70, -- 0xa4, 0x2a, 0x13, 0x8c, 0x2a, 0xb9, 0x49, 0xd5, 0xe5, 0x28, 0xa1, 0x90, -- 0x5a, 0xcc, 0x61, 0x43, 0x15, 0xd3, 0x3b, 0xcc, 0x53, 0x8b, 0x0b, 0x4a, -- 0x11, 0x65, 0x2b, 0x31, 0x86, 0x95, 0x0f, 0x82, 0x16, 0x94, 0x74, 0x6e, -- 0x57, 0xb3, 0x83, 0x0b, 0x99, 0x29, 0xdb, 0x1e, 0xe4, 0x72, 0x36, 0x34, -- 0x58, 0xc0, 0x92, 0x05, 0xf8, 0x41, 0xec, 0xea, 0x77, 0x42, 0x83, 0x9c, -- 0x27, 0x8e, 0xb8, 0x0e, 0xd4, 0xba, 0xd5, 0x65, 0x97, 0x4d, 0xc2, 0x54, -- 0x1f, 0x88, 0xcf, 0xb7, 0x10, 0x86, 0xa7, 0x81, 0x4a, 0xbc, 0xa5, 0xb0, -- 0x5a, 0x0b, 0xf1, 0xc5, 0x67, 0x50, 0x5a, 0x97, 0x8a, 0xcb, 0xf5, 0xc7, -- 0x3a, 0xb4, 0xed, 0xaf, 0xad, 0xad, 0xbd, 0x3e, 0xbc, 0xd8, 0x3f, 0x3a, -- 0x3e, 0x7c, 0x9d, 0x1c, 0xbd, 0x7b, 0x73, 0x72, 0xf6, 0x76, 0xff, 0x42, -- 0x1d, 0xde, 0xaf, 0x9d, 0x71, 0xcc, 0x65, 0xdd, 0x3a, 0xdb, 0xa3, 0x37, -- 0x9c, 0x81, 0x84, 0x69, 0x17, 0xaf, 0x14, 0xf4, 0x5b, 0x96, 0x21, 0x6b, -- 0xac, 0xc1, 0x5a, 0xa2, 0x8e, 0x72, 0x8f, 0xe7, 0xc3, 0x77, 0xf5, 0x96, -- 0x73, 0x6f, 0x0e, 0x6d, 0x39, 0xcd, 0xb4, 0x85, 0x0a, 0x70, 0x0f, 0x36, -- 0xe5, 0xca, 0xde, 0xcb, 0x3d, 0x85, 0x02, 0xc6, 0x48, 0x90, 0x06, 0x4d, -- 0x0e, 0x8e, 0xb6, 0x9a, 0x70, 0xa7, 0x30, 0x7e, 0x18, 0xbc, 0x53, 0x0a, -- 0xc0, 0x88, 0x10, 0x96, 0x80, 0x28, 0x90, 0x4d, 0x7d, 0x61, 0x9b, 0x2e, -- 0xe1, 0xde, 0x00, 0x7b, 0x24, 0xbc, 0x02, 0x9f, 0x84, 0xfb, 0xcb, 0x19, -- 0xef, 0x6b, 0x5c, 0x80, 0xa0, 0x56, 0x28, 0x19, 0xc6, 0x6e, 0xac, 0xb8, -- 0xda, 0xba, 0x9d, 0x75, 0xa0, 0x49, 0x3a, 0x26, 0x6a, 0x0e, 0x24, 0x2d, -- 0x58, 0x16, 0x36, 0xb5, 0xe1, 0x5c, 0xa2, 0x24, 0xc5, 0x0c, 0x8e, 0xb4, -- 0x90, 0x1d, 0xaf, 0x05, 0x83, 0x45, 0xf3, 0xbf, 0x73, 0x43, 0x73, 0x73, -- 0x01, 0x76, 0x5e, 0x0b, 0xcf, 0xb7, 0x5c, 0x75, 0x71, 0x3d, 0x6d, 0xfe, -- 0xdc, 0x1a, 0xaa, 0xc5, 0xe0, 0x35, 0x3d, 0x34, 0x59, 0xce, 0x16, 0x5a, -- 0x0b, 0xd5, 0xa4, 0x5c, 0xd8, 0xd7, 0x6c, 0x0b, 0x45, 0x90, 0x82, 0x40, -- 0x00, 0x63, 0xcc, 0x1b, 0x5d, 0x03, 0x99, 0x07, 0xe8, 0xbb, 0x36, 0x6f, -- 0x55, 0x0d, 0x08, 0x50, 0x73, 0x30, 0xb9, 0x62, 0xe8, 0x79, 0x1b, 0x4d, -- 0xcc, 0xec, 0xd3, 0xc9, 0xb9, 0x7b, 0x16, 0x2b, 0x19, 0xbc, 0x90, 0xfa, -- 0x18, 0x10, 0xac, 0xff, 0x86, 0x15, 0x6b, 0x60, 0x92, 0xd5, 0x06, 0x55, -- 0x4d, 0x8a, 0xfd, 0x63, 0x8d, 0x49, 0x85, 0x2f, 0x36, 0xa3, 0x26, 0x42, -- 0x4e, 0x6f, 0x5d, 0x7b, 0x04, 0xcf, 0xf6, 0x08, 0x94, 0x8b, 0x13, 0x3f, -- 0xb9, 0xb7, 0x02, 0xb4, 0x8c, 0x39, 0x2f, 0x10, 0x7d, 0x6b, 0x92, 0xfc, -- 0x61, 0x9c, 0x12, 0x3e, 0x1b, 0x23, 0xdf, 0x25, 0x0a, 0xaf, 0x16, 0x37, -- 0xac, 0x5f, 0x23, 0xf9, 0x4d, 0x8b, 0x50, 0x1b, 0xc4, 0x35, 0xa2, 0x7b, -- 0xb4, 0xde, 0x09, 0x98, 0xde, 0x7c, 0xcd, 0x2a, 0x93, 0xd9, 0x4b, 0x16, -- 0xe2, 0x05, 0xee, 0x2f, 0xd8, 0xdb, 0x60, 0xf2, 0xac, 0xe8, 0x66, 0x69, -- 0x05, 0x25, 0x07, 0xb9, 0x0a, 0x72, 0x67, 0x38, 0xd3, 0xa8, 0x47, 0x97, -- 0xc7, 0xe5, 0x13, 0x60, 0x61, 0x08, 0x66, 0x61, 0xca, 0x70, 0x03, 0xae, -- 0xc0, 0x2e, 0xe2, 0x92, 0x5d, 0x2b, 0xb8, 0xeb, 0x58, 0x89, 0x2d, 0xa7, -- 0x08, 0x2e, 0xd5, 0x68, 0xbb, 0xd3, 0xa2, 0x92, 0xf3, 0x06, 0xa9, 0xbb, -- 0xe7, 0xcb, 0x80, 0xf7, 0x16, 0xd7, 0xd4, 0x47, 0x2f, 0xb9, 0x62, 0xbd, -- 0x65, 0x44, 0x43, 0x8f, 0x18, 0xe8, 0x44, 0x1e, 0x7f, 0x75, 0x96, 0x5e, -- 0xa6, 0xd9, 0xf4, 0x4f, 0xbb, 0xdb, 0xe7, 0xe9, 0xd5, 0x72, 0x9a, 0xfe, -- 0x0b, 0x5e, 0x7c, 0xf5, 0xe4, 0xc9, 0xee, 0xf6, 0x67, 0x9f, 0x6f, 0xf7, -- 0x5a, 0x8e, 0xeb, 0x20, 0xe6, 0x05, 0x41, 0x0c, 0x7c, 0x93, 0x81, 0xef, -- 0xa2, 0x9f, 0xe1, 0xf8, 0x2a, 0x87, 0xa2, 0xc5, 0xc2, 0x8b, 0xae, 0x41, -- 0x2a, 0x1a, 0x1e, 0xd8, 0xa4, 0xc2, 0xa8, 0xd1, 0x8d, 0x4b, 0x74, 0xfd, -- 0xc7, 0x9d, 0x3d, 0x61, 0x65, 0x00, 0xa8, 0xc5, 0x3d, 0xc1, 0x6b, 0xf1, -- 0x32, 0x9f, 0xd3, 0x0d, 0xf4, 0x45, 0x52, 0xa7, 0x57, 0x8e, 0x56, 0x35, -- 0xdf, 0x58, 0xa2, 0xcc, 0x9d, 0x0b, 0xee, 0x92, 0x89, 0x3c, 0x9f, 0x4b, -- 0x61, 0x08, 0x2e, 0x7b, 0x00, 0xc1, 0x67, 0x91, 0x95, 0x9c, 0xae, 0x5f, -- 0x5c, 0x95, 0xe9, 0xcc, 0x62, 0xf9, 0xf9, 0x7d, 0x0e, 0x0c, 0x1a, 0x2e, -- 0xa6, 0x88, 0x33, 0xb7, 0xe8, 0x1e, 0x91, 0x42, 0x85, 0xe0, 0xa6, 0x8b, -- 0xca, 0xc3, 0x8a, 0xc9, 0x75, 0x13, 0x16, 0x54, 0xa0, 0xc5, 0x82, 0x9d, -- 0xa3, 0x87, 0x59, 0xf5, 0x1d, 0x3e, 0xd1, 0x60, 0x62, 0x33, 0x1d, 0xe2, -- 0x77, 0xe4, 0xc7, 0xa7, 0x02, 0x20, 0xd7, 0x5b, 0x48, 0xe6, 0xa9, 0xab, -- 0xf6, 0x2e, 0x06, 0xb1, 0xbc, 0x31, 0xaf, 0xd4, 0xc7, 0xb4, 0x25, 0x2f, -- 0xcd, 0x72, 0xb3, 0xf3, 0xc5, 0x2b, 0x10, 0xc4, 0xce, 0x17, 0xff, 0xe2, -- 0x3e, 0xdb, 0xd5, 0xcf, 0x76, 0xbf, 0xf8, 0x97, 0xe1, 0x10, 0xe3, 0x63, -- 0x0a, 0x59, 0xb7, 0xaf, 0xd7, 0x15, 0x8f, 0x22, 0xd5, 0x23, 0x2c, 0x7f, -- 0x39, 0xe0, 0x55, 0xd9, 0xeb, 0x9e, 0xf5, 0x1c, 0xae, 0x72, 0x5f, 0x9d, -- 0x7e, 0x8e, 0x6f, 0xe5, 0x56, 0x24, 0x09, 0x80, 0xba, 0x55, 0xd7, 0xa2, -- 0x3b, 0xdf, 0x04, 0xda, 0xd1, 0xf0, 0x36, 0xbc, 0xfc, 0xaf, 0x4c, 0xa9, -- 0xff, 0xba, 0x96, 0xa8, 0x6f, 0x8e, 0xb7, 0xe3, 0x1e, 0x4e, 0x08, 0x23, -- 0x5b, 0x7a, 0x34, 0xb5, 0x02, 0x0e, 0xdc, 0x32, 0x47, 0xc7, 0xf3, 0x1d, -- 0x18, 0x54, 0x3c, 0xff, 0xb3, 0xc2, 0xf9, 0xb9, 0xb4, 0x02, 0x7b, 0x46, -- 0x32, 0x09, 0x48, 0xc6, 0x40, 0xdd, 0x01, 0xa9, 0x26, 0xf0, 0xc3, 0x0f, -- 0x2a, 0x50, 0xd1, 0x2f, 0x3a, 0xf2, 0x6b, 0xe2, 0x45, 0x13, 0x62, 0x6f, -- 0x33, 0x54, 0x5b, 0xd6, 0x22, 0xf5, 0x7a, 0xe5, 0x5f, 0xea, 0x4c, 0xa5, -- 0x11, 0xda, 0xda, 0xfd, 0xf3, 0x83, 0xa3, 0x23, 0x44, 0xf2, 0x61, 0x51, -- 0x0f, 0x85, 0x8d, 0x81, 0x36, 0x37, 0x10, 0x85, 0xe0, 0x03, 0xbf, 0x42, -- 0xd2, 0xe7, 0xbd, 0xc3, 0xb6, 0x83, 0xfa, 0xa9, 0x31, 0x53, 0x8a, 0x75, -- 0x2b, 0x41, 0xb3, 0x22, 0xe5, 0xbc, 0xea, 0xc9, 0x83, 0x57, 0x79, 0x4f, -- 0x7d, 0x4b, 0xf2, 0x49, 0xcf, 0xc3, 0x8b, 0xc8, 0x7e, 0x60, 0xd3, 0x5e, -- 0x89, 0xe8, 0x94, 0xff, 0x3d, 0x7b, 0xb5, 0xb3, 0xdd, 0xfd, 0x04, 0xca, -- 0x2a, 0x30, 0x94, 0xf1, 0x2b, 0xef, 0x9b, 0x7b, 0xe8, 0xf9, 0x7c, 0x22, -- 0x4f, 0x5f, 0xe7, 0x93, 0x09, 0xdd, 0x09, 0xb7, 0xe9, 0x74, 0x49, 0xb4, -- 0x30, 0xe2, 0x1b, 0x96, 0xff, 0x7f, 0xc5, 0x38, 0xe0, 0x45, 0xd2, 0x67, -- 0xab, 0xe5, 0x68, 0x96, 0x37, 0x06, 0xbc, 0xc5, 0x13, 0xfc, 0x82, 0x27, -- 0xfc, 0x7d, 0xe6, 0xa8, 0x23, 0x63, 0xd1, 0x4e, 0x64, 0xbf, 0xf5, 0xcb, -- 0xa2, 0x18, 0xa5, 0xe5, 0xba, 0xba, 0x58, 0x6c, 0x9c, 0xeb, 0x3b, 0xbb, -- 0x4f, 0x9e, 0x3e, 0x5b, 0x1f, 0xaa, 0x9c, 0x06, 0x16, 0x51, 0x87, 0x29, -- 0xfc, 0xd2, 0x84, 0x4b, 0x39, 0x9f, 0x79, 0x38, 0xf9, 0x2e, 0x3f, 0x27, -- 0x73, 0x31, 0xee, 0xee, 0x95, 0xf4, 0xf6, 0x2f, 0xdc, 0xcf, 0x2b, 0x74, -- 0xf1, 0x2f, 0xf9, 0xe4, 0x95, 0x9b, 0xe1, 0xbf, 0xf0, 0x5c, 0x5e, 0xe9, -- 0x24, 0x68, 0x5f, 0x2d, 0x47, 0xab, 0x0a, 0x2b, 0x3d, 0x3c, 0xb6, 0xb9, -- 0xb6, 0x89, 0x6b, 0x98, 0x34, 0x9c, 0xec, 0x83, 0x89, 0x78, 0x24, 0x20, -- 0xad, 0xfa, 0x1c, 0xa5, 0xad, 0x8f, 0x03, 0x6a, 0x65, 0xc0, 0xad, 0x0c, -- 0x3c, 0xc3, 0x06, 0x02, 0xf5, 0x80, 0x37, 0xa2, 0xaf, 0x89, 0x6a, 0x53, -- 0x58, 0x3e, 0x54, 0x14, 0x28, 0x0a, 0xb8, 0xb0, 0x0f, 0xbe, 0x3e, 0x5a, -- 0xd7, 0xd8, 0x10, 0x51, 0xdd, 0xfa, 0x5d, 0x36, 0x63, 0x17, 0xc5, 0x35, -- 0x4e, 0x17, 0x7c, 0xfa, 0xd7, 0x12, 0x2d, 0x4c, 0x96, 0x72, 0xa8, 0x03, -- 0xf7, 0x2b, 0x39, 0xa5, 0xd4, 0x99, 0xde, 0x3a, 0x53, 0xb6, 0x42, 0x97, -- 0x02, 0x8e, 0x1d, 0x34, 0x03, 0xb4, 0x58, 0x89, 0x79, 0x80, 0x1f, 0x66, -- 0xe1, 0x12, 0xd2, 0x06, 0x6f, 0x9c, 0x23, 0xd2, 0x25, 0x40, 0xe9, 0xa3, -- 0xf4, 0x95, 0xf0, 0x13, 0x63, 0x11, 0x3d, 0x87, 0xd9, 0x26, 0x94, 0x10, -- 0x72, 0x0f, 0xb8, 0x51, 0x47, 0x99, 0xa6, 0xb1, 0x89, 0x29, 0x43, 0x04, -- 0x43, 0xe6, 0x9f, 0x2f, 0xbf, 0x34, 0x84, 0xd9, 0x2f, 0x12, 0x14, 0x17, -- 0x94, 0xb7, 0xd4, 0x17, 0xa8, 0x46, 0x21, 0xb1, 0xa3, 0xe2, 0x25, 0x55, -- 0x0f, 0x9c, 0x5b, 0x2a, 0x08, 0x18, 0x51, 0xc1, 0x40, 0x61, 0xc0, 0x31, -- 0xd1, 0xd1, 0xbd, 0x1a, 0x00, 0xb8, 0x85, 0xf5, 0xbf, 0xe0, 0x10, 0xbc, -- 0xe4, 0x6d, 0xc0, 0xd7, 0x5f, 0xac, 0xaf, 0xb9, 0x2a, 0xef, 0x4e, 0x72, -- 0x6f, 0x39, 0x75, 0x85, 0x40, 0xc3, 0xf9, 0x90, 0x40, 0x6d, 0x70, 0xaa, -- 0x22, 0x8d, 0x31, 0x84, 0x01, 0x2a, 0xf0, 0x92, 0x34, 0x35, 0x9d, 0x28, -- 0x0e, 0xa1, 0x33, 0x1a, 0x4b, 0xe3, 0x19, 0x47, 0x7f, 0xb3, 0xf4, 0xb8, -- 0xce, 0x01, 0x81, 0x78, 0x6f, 0xdd, 0xa1, 0xb3, 0xc2, 0x8e, 0x09, 0x86, -- 0x57, 0x66, 0x86, 0xd1, 0xb7, 0xa6, 0x60, 0xca, 0x5e, 0x9a, 0x0f, 0x27, -- 0x56, 0x05, 0xc2, 0x83, 0x4f, 0x03, 0x13, 0xb4, 0x8f, 0xe8, 0x88, 0xbc, -- 0xe1, 0x1c, 0x4b, 0xed, 0xf4, 0x15, 0x2f, 0xf7, 0xce, 0xf0, 0x2a, 0xbf, -- 0x94, 0xc5, 0x20, 0x16, 0x79, 0x95, 0x6d, 0xd1, 0x9f, 0x7d, 0xfa, 0x7c, -- 0x97, 0xa5, 0x32, 0xfe, 0xe5, 0x09, 0x42, 0x86, 0xc2, 0xbb, 0x3f, 0x38, -- 0x1b, 0xee, 0x5c, 0xf0, 0x2f, 0xb9, 0xbb, 0xf3, 0xd5, 0xd3, 0xa2, 0xa3, -- 0x04, 0x99, 0x47, 0x15, 0x95, 0xfa, 0x81, 0x17, 0x85, 0x15, 0x2d, 0x56, -- 0x49, 0x97, 0x1c, 0xf5, 0xef, 0x82, 0x6e, 0x35, 0xa6, 0x41, 0x05, 0x75, -- 0x96, 0xbb, 0x73, 0x35, 0x99, 0x70, 0x96, 0x04, 0x6e, 0xd6, 0xec, 0x6e, -- 0xb3, 0x1f, 0x06, 0x33, 0x12, 0x7b, 0xbf, 0xe5, 0xbc, 0x63, 0x06, 0x33, -- 0xf0, 0xe5, 0x62, 0xb8, 0x7b, 0x94, 0x80, 0x5f, 0x4b, 0xc2, 0x44, 0x4c, -- 0x6c, 0x73, 0xde, 0xde, 0xc1, 0xa0, 0x1e, 0xa3, 0x49, 0x9b, 0xec, 0xd5, -- 0xda, 0xe4, 0x6e, 0xb2, 0x69, 0x05, 0x5d, 0x5d, 0xa1, 0xec, 0xac, 0x57, -- 0x03, 0xf2, 0x45, 0x47, 0xeb, 0xe1, 0xd9, 0x2f, 0xc6, 0x75, 0x46, 0xba, -- 0x2e, 0xe3, 0x0e, 0xcd, 0x84, 0xcf, 0x1d, 0xce, 0xa4, 0x30, 0x1d, 0x48, -- 0x78, 0x3a, 0x90, 0xdb, 0x53, 0x45, 0xa2, 0xc1, 0x9b, 0x61, 0x72, 0x8c, -- 0xa0, 0xdc, 0x2a, 0x15, 0xfc, 0x0a, 0xbb, 0x61, 0x8d, 0x1a, 0x88, 0x74, -- 0x44, 0x06, 0x5f, 0x93, 0xc4, 0x00, 0x06, 0x0d, 0x30, 0x92, 0xca, 0x0d, -- 0xa2, 0x59, 0x88, 0x4b, 0xe4, 0x0b, 0x95, 0x47, 0xfa, 0xb0, 0x4f, 0xbb, -- 0xe7, 0x60, 0x87, 0x17, 0x5b, 0x1c, 0xd2, 0x63, 0x1c, 0xc1, 0x06, 0x8d, -- 0x48, 0x5c, 0x91, 0x0a, 0xa0, 0x01, 0x5b, 0x77, 0x87, 0x40, 0xa2, 0xfe, -- 0x32, 0x31, 0xba, 0x70, 0xee, 0x3a, 0xc3, 0x68, 0xc0, 0x4f, 0x4b, 0xad, -- 0x81, 0xca, 0x80, 0xe8, 0x4b, 0x64, 0xd4, 0x83, 0xde, 0x38, 0xcd, 0x9c, -- 0x72, 0xad, 0xe5, 0xb6, 0x5c, 0x44, 0x2f, 0x6c, 0x31, 0x22, 0x6e, 0x78, -- 0x17, 0x1a, 0x0f, 0x92, 0xc7, 0x95, 0xde, 0xd2, 0x2f, 0x2c, 0x9c, 0x8d, -- 0x4a, 0xda, 0xf5, 0xac, 0x94, 0xab, 0x01, 0xbd, 0x0a, 0xae, 0x87, 0x55, -- 0x80, 0x79, 0x7b, 0x9c, 0x18, 0x0e, 0xc8, 0xa5, 0x17, 0x15, 0x2d, 0x78, -- 0x10, 0x53, 0x54, 0xcb, 0x88, 0xc8, 0x43, 0xfa, 0x94, 0xdc, 0x72, 0xb2, -- 0xb6, 0x9c, 0x4b, 0x9c, 0xf0, 0xe2, 0x34, 0x8e, 0x6c, 0xf0, 0x84, 0xbc, -- 0xca, 0x74, 0x44, 0x64, 0xb2, 0xce, 0x4b, 0xb0, 0xde, 0x4f, 0xd6, 0x79, -- 0xa8, 0xfc, 0xc5, 0x3a, 0xd6, 0x13, 0x1f, 0x07, 0xcb, 0xb7, 0x3e, 0xec, -- 0x38, 0x85, 0xfc, 0xcc, 0xab, 0x2f, 0x1b, 0xab, 0x84, 0xcf, 0xad, 0xa9, -- 0x57, 0x12, 0xc7, 0x1f, 0xc9, 0xdc, 0xf6, 0x6e, 0xd0, 0xfe, 0xab, 0x83, -- 0x82, 0x31, 0xdc, 0xa8, 0x99, 0x20, 0x12, 0x73, 0xec, 0x3e, 0xcb, 0x91, -- 0x52, 0x18, 0x35, 0xf4, 0xf8, 0x29, 0xbe, 0x30, 0x56, 0xe4, 0xa2, 0x14, -- 0x85, 0xbb, 0x09, 0x09, 0x18, 0xe7, 0xa5, 0xdd, 0xcc, 0x45, 0xef, 0xbb, -- 0x2b, 0x60, 0x65, 0x00, 0xcf, 0xd9, 0x19, 0x22, 0xc7, 0xcc, 0x57, 0xc8, -- 0x74, 0x0d, 0x38, 0xe5, 0xbd, 0x87, 0x05, 0xed, 0xb9, 0xc0, 0x51, 0x53, -- 0xe9, 0x6d, 0x95, 0xbb, 0x78, 0xd7, 0x22, 0x1f, 0x03, 0x24, 0xf8, 0xd5, -- 0x97, 0x93, 0xe2, 0x8a, 0x39, 0x57, 0x9f, 0x0e, 0x1a, 0xff, 0xdb, 0xe3, -- 0x87, 0x77, 0xb5, 0x53, 0x19, 0x30, 0xce, 0x8a, 0x48, 0xf1, 0xf6, 0xf7, -- 0x8a, 0x28, 0x4a, 0x6a, 0x78, 0x52, 0x8c, 0xb5, 0x6d, 0xd7, 0xb4, 0xec, -- 0x07, 0xb5, 0xef, 0xbe, 0x08, 0xfb, 0xb2, 0xc5, 0x49, 0xb5, 0x65, 0xc8, -- 0x46, 0xc4, 0x29, 0x6a, 0xb9, 0xca, 0xd1, 0x31, 0xab, 0x32, 0x30, 0x70, -- 0x71, 0x91, 0x4b, 0xb9, 0xb7, 0xa6, 0x9a, 0xf8, 0xb4, 0xfe, 0xe5, 0xba, -- 0x84, 0x61, 0xaf, 0xbf, 0x5c, 0x07, 0x07, 0x63, 0xbe, 0x64, 0x15, 0xa5, -- 0xf4, 0x72, 0x5a, 0x97, 0x5b, 0x71, 0x20, 0xb2, 0x83, 0x62, 0xa2, 0x35, -- 0x82, 0xe4, 0x98, 0x61, 0x98, 0x1a, 0x19, 0xc6, 0xf7, 0xc1, 0x4c, 0x80, -- 0x62, 0xd3, 0x18, 0x15, 0x03, 0x3c, 0x8e, 0x6a, 0x09, 0x5e, 0xd1, 0x4b, -- 0x17, 0x62, 0x19, 0xf0, 0x24, 0x2a, 0x8e, 0x29, 0x10, 0x33, 0xe7, 0x72, -- 0xbe, 0xe0, 0xec, 0xe1, 0x31, 0x20, 0xa9, 0xf5, 0x2c, 0x0d, 0x93, 0xf7, -- 0x73, 0x81, 0x31, 0xcf, 0x58, 0x59, 0xce, 0xcb, 0xf1, 0x72, 0xc6, 0xa6, -- 0x8a, 0x31, 0x1b, 0xc8, 0x2c, 0xfc, 0x88, 0x16, 0xaa, 0xe1, 0x32, 0x0f, -- 0x07, 0x2c, 0xc6, 0x11, 0x31, 0x62, 0x6b, 0xbf, 0x08, 0x0f, 0xe1, 0xa0, -- 0x28, 0x35, 0x52, 0x43, 0x2a, 0x70, 0xb8, 0x12, 0xca, 0x80, 0xd8, 0x5b, -- 0x77, 0xf8, 0xe6, 0xf0, 0xec, 0xec, 0xf0, 0x8c, 0xd7, 0x7b, 0x7f, 0xde, -- 0xa8, 0xb7, 0xee, 0xc0, 0x25, 0xbd, 0xfb, 0xcf, 0x22, 0x53, 0x63, 0x50, -- 0x70, 0x61, 0x85, 0xe9, 0x64, 0xc2, 0x28, 0xcc, 0xd0, 0x20, 0x04, 0x49, -- 0x45, 0x6a, 0xde, 0x86, 0xe6, 0x45, 0x44, 0x26, 0x3b, 0x53, 0x7e, 0x58, -- 0x03, 0x2d, 0x90, 0x2d, 0x7c, 0x0b, 0xa5, 0xd6, 0xf8, 0x5b, 0x5a, 0xd2, -- 0xf2, 0x75, 0xd6, 0x10, 0x53, 0x87, 0x1a, 0x4c, 0x9a, 0xa9, 0x83, 0x7b, -- 0xea, 0xec, 0x13, 0x98, 0xf2, 0x25, 0x9f, 0x51, 0xd6, 0x9d, 0xb0, 0x18, -- 0x55, 0xbd, 0x5c, 0xe4, 0x13, 0x67, 0xed, 0xa5, 0xcf, 0x49, 0xfc, 0x4b, -- 0xe4, 0x94, 0x57, 0x16, 0x7f, 0x02, 0x4f, 0xa3, 0x19, 0x23, 0x42, 0x6b, -- 0x5b, 0x0b, 0xe1, 0x34, 0x41, 0x42, 0x92, 0x04, 0x72, 0x59, 0xbd, 0x96, -- 0x66, 0xf6, 0xad, 0xd2, 0x7e, 0x06, 0x2b, 0x23, 0x73, 0x0b, 0x0b, 0x89, -- 0x09, 0x39, 0x03, 0xdb, 0xb2, 0x66, 0x3e, 0x24, 0x9b, 0xc3, 0xca, 0xf6, -- 0x04, 0x28, 0x02, 0x49, 0x77, 0xe5, 0x5e, 0xf2, 0x53, 0x95, 0x8f, 0x7f, -- 0xf1, 0x97, 0x07, 0x32, 0x2c, 0x9a, 0x15, 0x9a, 0xb0, 0x74, 0xba, 0x50, -- 0xaa, 0x0c, 0x4b, 0xb2, 0xeb, 0xfb, 0xf3, 0xc3, 0xb3, 0x64, 0xff, 0x6b, -- 0xc6, 0x49, 0xfd, 0x2f, 0x6e, 0x30, 0x3f, 0xa7, 0xb7, 0xc3, 0x9a, 0x86, -- 0x7a, 0x2a, 0xfa, 0x43, 0x66, 0xa6, 0x70, 0x41, 0x2e, 0x6a, 0xec, 0x6c, -- 0x6e, 0x55, 0x6c, 0xfd, 0x75, 0xdf, 0xdc, 0xc3, 0xb5, 0xe4, 0xd1, 0x5d, -- 0xfc, 0x94, 0x3d, 0xe4, 0x43, 0x16, 0xee, 0xa2, 0xe0, 0xc6, 0x88, 0x4b, -- 0xc2, 0xf6, 0x46, 0x47, 0x5f, 0x45, 0x6a, 0xa7, 0xec, 0xd2, 0x7e, 0xb2, -- 0xfe, 0xb6, 0xf8, 0x3b, 0x09, 0x03, 0xe9, 0xd6, 0x93, 0xe1, 0x76, 0xb2, -- 0xf1, 0x7d, 0x3e, 0x7f, 0xf1, 0xec, 0x2f, 0xc9, 0xd1, 0xe6, 0x7a, 0x23, -- 0xde, 0x5c, 0xaa, 0x9a, 0x8d, 0xd2, 0xf9, 0x8d, 0xdb, 0xb2, 0x13, 0x9c, -- 0x6c, 0x09, 0x74, 0xb3, 0x8a, 0x10, 0x52, 0x7c, 0x75, 0x65, 0x8b, 0x02, -- 0x05, 0x2e, 0xa1, 0xeb, 0xc9, 0x77, 0x0e, 0x14, 0x98, 0xb5, 0x7c, 0x7a, -- 0x6a, 0xc2, 0x4b, 0xf7, 0xe2, 0x59, 0xd4, 0xc4, 0x53, 0xd7, 0xc6, 0x7b, -- 0x69, 0xe3, 0x57, 0x36, 0xb1, 0x3b, 0xdc, 0xde, 0x4d, 0x36, 0x4e, 0xce, -- 0xb7, 0x76, 0x5d, 0x0b, 0x71, 0x13, 0xbb, 0x68, 0x82, 0x1f, 0x6a, 0xbe, -- 0xfc, 0x94, 0xfb, 0xff, 0x29, 0x9b, 0xff, 0x92, 0x6c, 0xfc, 0xb0, 0xb3, -- 0x43, 0x0d, 0xfc, 0x25, 0xd9, 0x3f, 0xfa, 0x21, 0x79, 0x3a, 0xa4, 0xc6, -- 0xde, 0xa5, 0xb7, 0xda, 0x9c, 0xc2, 0x7d, 0x9e, 0xa3, 0x11, 0xfa, 0x3e, -- 0x6a, 0xe3, 0x59, 0xab, 0x8d, 0x63, 0xd2, 0x0b, 0x3f, 0xd2, 0xb5, 0xb2, -- 0x3d, 0x7c, 0xb2, 0x9b, 0xe4, 0xcf, 0x3e, 0x7f, 0x6e, 0x0d, 0x69, 0x1b, -- 0xf8, 0xbe, 0x69, 0xad, 0x14, 0x40, 0x09, 0x12, 0x75, 0x0e, 0x3f, 0x12, -- 0x43, 0x03, 0x8b, 0x00, 0xf6, 0xff, 0x75, 0x5a, 0x5a, 0x45, 0x50, 0xc6, -- 0x83, 0xa7, 0x9d, 0x52, 0xa0, 0xdd, 0x0c, 0x66, 0x4b, 0xba, 0x38, 0xf7, -- 0xa2, 0xe1, 0xb0, 0x6e, 0x6a, 0x8f, 0xfe, 0x25, 0x79, 0x7b, 0x7e, 0x74, -- 0x48, 0x33, 0xda, 0xa6, 0xa1, 0xf9, 0x35, 0x94, 0x01, 0xe1, 0x2b, 0x2c, -- 0xee, 0x0b, 0xe0, 0x36, 0x6a, 0x1b, 0x61, 0xed, 0x4a, 0x10, 0x1d, 0x5d, -- 0xdc, 0x15, 0xfa, 0xe5, 0x30, 0x91, 0xc1, 0xfe, 0x15, 0xab, 0x10, 0x72, -- 0xd5, 0xa2, 0xeb, 0x6f, 0x8b, 0x39, 0x1d, 0x93, 0xb2, 0x28, 0x39, 0x9a, -- 0x69, 0xbd, 0x21, 0x2d, 0x7c, 0xfb, 0xfa, 0x50, 0x92, 0x8e, 0xdf, 0xa6, -- 0x73, 0xe2, 0x91, 0x8c, 0x1f, 0x54, 0xdd, 0xb0, 0x4f, 0x5e, 0xdc, 0x39, -- 0xf2, 0xfe, 0xf1, 0xfd, 0xfc, 0x23, 0xed, 0xe3, 0x67, 0xc3, 0x1d, 0xc6, -- 0x6e, 0x60, 0xad, 0xf7, 0xcd, 0x5b, 0xfa, 0x7b, 0xe7, 0xe9, 0x7a, 0xc2, -- 0x5f, 0x35, 0x35, 0x78, 0x3b, 0xaf, 0x6b, 0x07, 0x27, 0x27, 0xdf, 0x1e, -- 0x49, 0x50, 0xc6, 0x81, 0x9a, 0x55, 0x59, 0xb8, 0x72, 0x5a, 0xb1, 0x70, -- 0x57, 0xd2, 0xde, 0x7c, 0x7e, 0x0b, 0x9c, 0x71, 0x37, 0x59, 0xb6, 0xe0, -- 0x08, 0x81, 0xba, 0xc5, 0x11, 0x6a, 0xe5, 0xd1, 0x2e, 0xde, 0x88, 0xc5, -- 0x9f, 0x06, 0xf6, 0x51, 0xc5, 0x60, 0xb2, 0x66, 0xc2, 0x1d, 0xdd, 0x3b, -- 0x60, 0x83, 0xd4, 0xb9, 0xcc, 0x64, 0x88, 0x2e, 0xa0, 0xde, 0x4c, 0xd0, -- 0x52, 0x46, 0x81, 0x5e, 0x54, 0xdd, 0x77, 0xfd, 0x9c, 0xa4, 0x7b, 0x19, -- 0xf4, 0x9e, 0x5a, 0x6d, 0xd7, 0x03, 0xf4, 0x5d, 0x48, 0xb4, 0x0b, 0x2d, -- 0x33, 0x02, 0xd3, 0xf1, 0x3d, 0xc9, 0x12, 0x98, 0x93, 0xf2, 0xe6, 0x0a, -- 0xb6, 0x6c, 0x84, 0xcc, 0xbd, 0xdb, 0x7f, 0x7b, 0xf8, 0xea, 0xbb, 0xfd, -- 0xe3, 0xf7, 0x87, 0xf4, 0x4a, 0x0e, 0xa0, 0x6b, 0x17, 0x56, 0x87, 0x31, -- 0xce, 0x72, 0xd4, 0xcd, 0xac, 0x48, 0x3c, 0x58, 0x5f, 0x93, 0x48, 0xef, -- 0xa4, 0xc7, 0x6f, 0xed, 0xc8, 0x6b, 0x44, 0x17, 0xfc, 0xd7, 0xae, 0xfc, -- 0xb5, 0xfb, 0x97, 0xde, 0x66, 0x63, 0xd2, 0x91, 0x96, 0xcc, 0xf4, 0x72, -- 0x27, 0xb5, 0x66, 0x38, 0x64, 0x47, 0xd2, 0x0b, 0x64, 0x55, 0x7a, 0xe6, -- 0xa3, 0xb1, 0xbb, 0x8d, 0x9f, 0xdd, 0x18, 0xdd, 0x87, 0x3a, 0x78, 0x8f, -- 0x5f, 0x7a, 0x05, 0x01, 0xa3, 0x07, 0x28, 0xf0, 0xcc, 0x56, 0x4b, 0xda, -- 0xb0, 0x26, 0xb2, 0x8f, 0x0b, 0x8e, 0x52, 0xdc, 0xe8, 0xc9, 0x2f, 0xaf, -- 0x5e, 0xef, 0x5f, 0x1c, 0xf2, 0x0b, 0xd6, 0xbd, 0xe1, 0xc2, 0x5b, 0x12, -- 0x00, 0x8f, 0x67, 0xa3, 0x27, 0x1f, 0xbe, 0xe2, 0x09, 0xf5, 0x36, 0xc5, -- 0x97, 0x01, 0x47, 0x77, 0x6b, 0x5c, 0xc5, 0x5c, 0xe3, 0xa9, 0x83, 0x44, -- 0xde, 0xca, 0xa2, 0x48, 0x36, 0x7a, 0xf2, 0x5d, 0xcf, 0x59, 0x70, 0xb5, -- 0x36, 0xb5, 0xba, 0x2b, 0x27, 0x48, 0x11, 0x88, 0x92, 0x17, 0x25, 0x4c, -- 0xcc, 0xef, 0x8f, 0x3a, 0x2b, 0xc4, 0xe2, 0x14, 0xe0, 0x11, 0xbb, 0x8d, -- 0xd7, 0x4c, 0x61, 0xb6, 0x31, 0x15, 0xc5, 0xce, 0xee, 0x93, 0xbf, 0x60, -- 0x3d, 0x5f, 0xf5, 0xb6, 0xe8, 0x6e, 0xe8, 0xfd, 0x85, 0xbb, 0xce, 0xcd, -- 0xc6, 0x19, 0x04, 0x76, 0xb3, 0x3e, 0xa5, 0x14, 0x25, 0x21, 0x2c, 0xbc, -- 0xeb, 0x01, 0x00, 0x0a, 0x16, 0xf4, 0x4e, 0x12, 0x99, 0x0c, 0x2e, 0xc4, -- 0x1c, 0xfa, 0xd8, 0xaf, 0x51, 0x76, 0x95, 0xcf, 0xe7, 0xae, 0x3e, 0xa7, -- 0x74, 0x17, 0xde, 0x1f, 0x7d, 0x79, 0x57, 0xe6, 0xa8, 0x10, 0x2b, 0xdc, -- 0xe7, 0xec, 0xde, 0x72, 0x9d, 0xaa, 0xca, 0x54, 0x5c, 0xd9, 0xb3, 0x48, -- 0x32, 0x1e, 0xa9, 0x6d, 0xc7, 0x94, 0x11, 0xc8, 0x04, 0xc4, 0x5a, 0xee, -- 0x21, 0x28, 0x49, 0x04, 0x40, 0x10, 0xf8, 0x60, 0x77, 0x76, 0x3a, 0xe2, -- 0x3c, 0x5e, 0x97, 0xd8, 0x11, 0x68, 0xe5, 0x6e, 0xe9, 0xed, 0xf8, 0xe5, -- 0x01, 0x76, 0x0d, 0x5f, 0x94, 0xb2, 0x96, 0x95, 0xb3, 0x21, 0xc1, 0xdb, -- 0xa8, 0xcf, 0x36, 0xf7, 0xa9, 0x95, 0x32, 0x85, 0x69, 0x88, 0x4a, 0x2f, -- 0xfa, 0x31, 0xb1, 0x9a, 0x79, 0x56, 0x3e, 0x18, 0xf4, 0xd0, 0xe1, 0x8c, -- 0xc2, 0x14, 0x83, 0x34, 0x3c, 0x7e, 0x67, 0x38, 0x1c, 0xfa, 0x2a, 0xbf, -- 0xbc, 0x2d, 0xea, 0x83, 0x42, 0x79, 0x96, 0x00, 0x61, 0x13, 0x6b, 0xbc, -- 0x01, 0x61, 0x1e, 0x02, 0xf5, 0xa6, 0x06, 0xc3, 0xa8, 0x9d, 0xc0, 0x1d, -- 0x8d, 0xc0, 0xc6, 0xb1, 0xae, 0xdd, 0xae, 0x5b, 0x5a, 0xfb, 0x4d, 0xd7, -- 0x26, 0x3c, 0x30, 0x36, 0xb1, 0x3d, 0x6a, 0x71, 0x3f, 0xc7, 0xa7, 0x0a, -- 0xb7, 0x16, 0x4c, 0xc1, 0x1c, 0xd4, 0x0d, 0x3a, 0x91, 0xa4, 0x4e, 0x59, -- 0x34, 0x1d, 0x8a, 0x96, 0x79, 0x62, 0x26, 0x57, 0xdc, 0x21, 0xcf, 0x5c, -- 0x6a, 0x6c, 0x2c, 0x4a, 0xd6, 0xf4, 0x78, 0x8d, 0xed, 0x06, 0x59, 0x38, -- 0xb1, 0x59, 0xdb, 0x51, 0xb4, 0x55, 0xd6, 0x99, 0x21, 0xfb, 0x6b, 0x22, -- 0x9e, 0x02, 0x76, 0x54, 0xa9, 0x22, 0x31, 0x92, 0xd8, 0x56, 0xcc, 0xe0, -- 0xf6, 0xd2, 0xc9, 0x7b, 0x73, 0x15, 0x47, 0x80, 0x0d, 0x04, 0xf2, 0xc2, -- 0x72, 0xe5, 0x8c, 0x7b, 0x28, 0xec, 0xc1, 0x43, 0xfe, 0xf2, 0xb1, 0xb5, -- 0xe8, 0x9c, 0xe5, 0xad, 0xb5, 0xf1, 0xb7, 0x72, 0x93, 0x75, 0xd1, 0x8a, -- 0x8a, 0x75, 0x59, 0xc0, 0x05, 0x3c, 0xdf, 0x4b, 0xd2, 0x3b, 0xae, 0x36, -- 0x9d, 0x71, 0xcc, 0x24, 0x22, 0x1d, 0x60, 0x95, 0x39, 0x0e, 0xec, 0x8c, -- 0x6e, 0x86, 0x56, 0xd1, 0x3e, 0xf5, 0x25, 0xed, 0xad, 0x68, 0xad, 0x00, -- 0x8a, 0x9a, 0x41, 0x2f, 0x47, 0x75, 0x5d, 0x06, 0x80, 0x54, 0x49, 0xdd, -- 0xd4, 0x73, 0x1e, 0xf9, 0x26, 0x0a, 0x90, 0x8a, 0x38, 0x8f, 0x58, 0x41, -- 0xb6, 0x73, 0x48, 0x5c, 0x85, 0xad, 0x16, 0x2a, 0xa5, 0xbb, 0x4e, 0x9c, -- 0x7f, 0x5a, 0xcd, 0x4f, 0x1c, 0x72, 0x3b, 0x1f, 0xb8, 0xaa, 0xe1, 0x2e, -- 0x1e, 0xab, 0xcc, 0xaf, 0xae, 0xb4, 0xe6, 0x69, 0x7b, 0x6a, 0xdd, 0x44, -- 0x76, 0xcc, 0xab, 0xc2, 0x91, 0xc9, 0xf7, 0xab, 0x56, 0xf3, 0xc2, 0x6c, -- 0x3e, 0x66, 0x75, 0x69, 0x10, 0xb3, 0xf9, 0x24, 0x65, 0xdf, 0x00, 0xd4, -- 0x28, 0x49, 0xe0, 0x9c, 0x34, 0xd1, 0xf4, 0x21, 0x9f, 0x9c, 0xad, 0x01, -- 0x5a, 0x7e, 0xee, 0x73, 0xde, 0x6d, 0xd3, 0x81, 0x5f, 0xe6, 0x23, 0x50, -- 0x7c, 0x74, 0xe8, 0x9d, 0x0b, 0x7f, 0x92, 0xaa, 0x64, 0xa3, 0xd4, 0xab, -- 0x5c, 0x6b, 0x49, 0xc3, 0xda, 0xcb, 0x25, 0x27, 0x8e, 0xe6, 0xca, 0x87, -- 0x8a, 0xdb, 0xcc, 0x43, 0xe8, 0x79, 0x83, 0xa3, 0xc7, 0x21, 0xd5, 0xd3, -- 0xef, 0x98, 0x49, 0xcb, 0xc1, 0xeb, 0xf8, 0x15, 0x26, 0xd9, 0x5a, 0x95, -- 0x61, 0x12, 0x34, 0x29, 0xa6, 0x92, 0x22, 0x64, 0xf1, 0x32, 0x36, 0xf5, -- 0x5b, 0x5b, 0x8b, 0x9a, 0x56, 0x04, 0x10, 0x8c, 0x40, 0x35, 0x91, 0x92, -- 0x0c, 0x86, 0x25, 0xee, 0xe2, 0xe6, 0xbc, 0xff, 0xd7, 0x66, 0xd9, 0x73, -- 0x9b, 0xd4, 0x33, 0xd4, 0x76, 0x10, 0x01, 0x68, 0x80, 0x05, 0x3a, 0xe7, -- 0xc2, 0xdf, 0x9f, 0xa6, 0x1c, 0xc4, 0x52, 0x48, 0x74, 0x00, 0xb6, 0x0c, -- 0x44, 0x0d, 0x63, 0x5a, 0x8b, 0xa7, 0x46, 0xc7, 0xcf, 0x45, 0x6b, 0x08, -- 0xad, 0xb1, 0x90, 0x82, 0x66, 0x88, 0x4a, 0x10, 0x61, 0x3d, 0x0e, 0xcb, -- 0xd6, 0xae, 0x4e, 0x0f, 0x1f, 0x35, 0xce, 0xe8, 0x63, 0x47, 0xf6, 0xf4, -- 0xec, 0xe4, 0xeb, 0xb3, 0xc3, 0xf3, 0xf3, 0xe4, 0xed, 0xe1, 0x85, 0xa8, -- 0xfd, 0x17, 0x12, 0x19, 0x77, 0xc5, 0x9a, 0x7b, 0x02, 0xb7, 0x83, 0xc1, -- 0xdd, 0x58, 0xf4, 0x89, 0xd9, 0x14, 0x90, 0x92, 0x54, 0xb0, 0x4b, 0x0d, -- 0xa2, 0x1c, 0xf4, 0xf9, 0xa9, 0x06, 0xd4, 0x5d, 0xc3, 0xf0, 0x8f, 0xf0, -- 0x26, 0xf8, 0x26, 0x9d, 0x1d, 0xdd, 0x5b, 0x54, 0x21, 0x23, 0x4b, 0xc0, -- 0xd3, 0xb5, 0x71, 0x2e, 0x6f, 0x4d, 0xe7, 0xdb, 0x9b, 0xfe, 0xc5, 0xf4, -- 0xfe, 0x94, 0x5c, 0x14, 0x35, 0x17, 0x24, 0xe6, 0x5f, 0xcf, 0x8c, 0x3e, -- 0xfe, 0x94, 0xfc, 0x40, 0x6d, 0x4e, 0x68, 0xd5, 0xd9, 0x98, 0x4c, 0x17, -- 0xee, 0x39, 0x8a, 0x2e, 0xfa, 0x0a, 0x2c, 0xa8, 0x94, 0x18, 0xd6, 0x9a, -- 0x5e, 0x96, 0xe5, 0xb0, 0xbb, 0x80, 0x49, 0xa3, 0x02, 0x89, 0x20, 0x0b, -- 0x6a, 0x78, 0x9d, 0xeb, 0x59, 0xab, 0xa9, 0x26, 0xc9, 0x71, 0x76, 0x59, -- 0x43, 0x20, 0xe1, 0xee, 0xa8, 0xb9, 0x6d, 0x86, 0xca, 0xdd, 0xe1, 0x0a, -- 0x51, 0xf4, 0xeb, 0x93, 0xcf, 0x9f, 0x6f, 0x7f, 0x2e, 0xbf, 0xda, 0xcf, -- 0x17, 0x4f, 0xb7, 0x15, 0x72, 0x9a, 0xfe, 0x7a, 0xba, 0xf7, 0x74, 0x67, -- 0x8f, 0x91, 0xf0, 0xb6, 0xf7, 0xb6, 0xe9, 0xff, 0x9f, 0xea, 0x27, 0x0c, -- 0xf7, 0xf7, 0x62, 0xf7, 0xf3, 0xcf, 0x10, 0x18, 0xc3, 0xf4, 0x31, 0xa5, -- 0x4e, 0x06, 0x75, 0x31, 0x00, 0x20, 0x0f, 0x84, 0xa0, 0x3f, 0x35, 0x8d, -- 0x92, 0xec, 0x69, 0x1f, 0xb3, 0x5f, 0xf5, 0x4a, 0xd4, 0x9b, 0x69, 0xc6, -- 0x1c, 0x40, 0x0d, 0xac, 0x82, 0x32, 0x62, 0x01, 0xdc, 0x92, 0x64, 0xac, -- 0xd3, 0xd0, 0xb7, 0x6b, 0xfc, 0x0d, 0x84, 0xab, 0xc6, 0x3b, 0x12, 0x07, -- 0x1e, 0x80, 0x69, 0xfd, 0xda, 0xae, 0x2d, 0xed, 0x79, 0x0d, 0x10, 0x59, -- 0xba, 0x55, 0xfa, 0xde, 0xd8, 0x0a, 0xd2, 0xba, 0xa7, 0x58, 0x22, 0x9c, -- 0x49, 0xca, 0xc0, 0xa5, 0x44, 0x13, 0xff, 0xda, 0xfe, 0xc4, 0x88, 0xc5, -- 0x6f, 0x29, 0x35, 0x24, 0x71, 0x6f, 0x2e, 0x55, 0xa0, 0xa3, 0xaf, 0x06, -- 0xf1, 0xac, 0xf9, 0xed, 0xf7, 0x2b, 0xc5, 0x5c, 0x4d, 0x1f, 0x72, 0x29, -- 0x56, 0x52, 0xdf, 0xb3, 0x63, 0xca, 0x51, 0x73, 0x4a, 0x46, 0xbf, 0xa2, -- 0x39, 0x3f, 0x23, 0x50, 0xb0, 0xdb, 0xb9, 0x41, 0xb0, 0x39, 0xb9, 0xc4, -- 0xb8, 0xd9, 0x6a, 0x38, 0x08, 0x46, 0xbb, 0xf1, 0xe4, 0x55, 0x47, 0xb2, -- 0x03, 0x79, 0x43, 0xc5, 0x4f, 0x97, 0xb6, 0xa6, 0xa5, 0xc5, 0xdd, 0xf3, -- 0x46, 0xd9, 0x51, 0x57, 0x4c, 0x8d, 0x41, 0x7f, 0xda, 0x07, 0xce, 0x93, -- 0x3b, 0x74, 0x0f, 0x4e, 0xcd, 0x87, 0xbe, 0xbb, 0xfa, 0xa6, 0x1b, 0x2e, -- 0x94, 0xbc, 0xeb, 0x48, 0xfa, 0xe7, 0x10, 0x5d, 0xee, 0x9a, 0x0b, 0x2f, -- 0x22, 0xd4, 0xb6, 0xd5, 0x1a, 0x02, 0x8c, 0xeb, 0xc8, 0x40, 0xe8, 0x9b, -- 0xc6, 0xc2, 0x06, 0x7f, 0x74, 0x11, 0x5c, 0xb8, 0xd7, 0xb4, 0x00, 0x62, -- 0x2a, 0x94, 0x3f, 0x0d, 0x33, 0x5c, 0x1d, 0xb7, 0x1b, 0xa5, 0x65, 0x03, -- 0x72, 0x7c, 0x4d, 0xcb, 0xba, 0xcf, 0x18, 0xcd, 0x2b, 0xa8, 0x62, 0xff, -- 0x87, 0xb5, 0xb5, 0xf3, 0xd3, 0xc3, 0xc3, 0xd7, 0xc9, 0xf1, 0xd1, 0xdb, -- 0xa3, 0x8b, 0x40, 0x20, 0x77, 0x17, 0x89, 0x19, 0x5d, 0xad, 0x3c, 0x4f, -- 0x6b, 0x39, 0x3c, 0xc0, 0xad, 0xf4, 0x67, 0x57, 0xf9, 0x2c, 0xd3, 0x24, -- 0x87, 0x69, 0xfb, 0x3d, 0xa8, 0xde, 0x80, 0xd1, 0x19, 0x26, 0x5f, 0x05, -- 0x31, 0x92, 0x49, 0x45, 0xc2, 0xcd, 0xd8, 0x55, 0x7d, 0x1d, 0xfc, 0xa8, -- 0x21, 0x1b, 0x4d, 0xc9, 0x49, 0x71, 0x3a, 0x5d, 0xc6, 0x8d, 0x86, 0xb9, -- 0xb6, 0x46, 0xc5, 0x6b, 0x9b, 0x49, 0xe4, 0x73, 0x60, 0xa1, 0x43, 0x04, -- 0xdf, 0x5d, 0x86, 0xdc, 0xfc, 0x59, 0x2e, 0xa9, 0x90, 0x61, 0x78, 0xb1, -- 0x2b, 0x84, 0x79, 0x51, 0x08, 0x1f, 0x0f, 0x7b, 0x0c, 0x2b, 0x1c, 0x5b, -- 0x6c, 0xad, 0xf5, 0x15, 0x96, 0xce, 0x7d, 0xb2, 0xed, 0xb2, 0x09, 0x16, -- 0xe0, 0x39, 0x2a, 0xea, 0x73, 0x67, 0x3b, 0x09, 0xc9, 0x23, 0x4b, 0x96, -- 0xea, 0xcb, 0xe5, 0x3c, 0xba, 0xee, 0x7e, 0x94, 0x77, 0x69, 0xfe, 0xcf, -- 0xb7, 0x71, 0xbd, 0x5d, 0xa6, 0xe5, 0x80, 0x24, 0xaf, 0xfb, 0x81, 0x59, -- 0x57, 0x85, 0x22, 0x34, 0xf4, 0x58, 0x4c, 0x3f, 0x99, 0xaf, 0xb9, 0xd9, -- 0x92, 0x16, 0x7d, 0x4a, 0x48, 0x01, 0x17, 0xe5, 0x54, 0x0f, 0x00, 0x4f, -- 0x9d, 0x13, 0x71, 0xcd, 0xd8, 0xe9, 0x65, 0x1d, 0x8f, 0xe1, 0x6a, 0xbb, -- 0xe8, 0x79, 0x14, 0x27, 0x08, 0x80, 0xad, 0x72, 0xab, 0x39, 0x4f, 0x53, -- 0xe7, 0x12, 0x8b, 0xd6, 0xb3, 0x64, 0xe7, 0x73, 0x9e, 0xc7, 0xa7, 0xcd, -- 0xe7, 0x4d, 0x51, 0x8e, 0x5d, 0xca, 0x2f, 0xd4, 0x85, 0x20, 0xff, 0x53, -- 0xb2, 0x16, 0x50, 0xd8, 0x46, 0x56, 0xd7, 0xe2, 0x63, 0x11, 0xbf, 0xc7, -- 0xfa, 0x89, 0xba, 0xd6, 0x61, 0x99, 0x82, 0xaf, 0x5b, 0x24, 0x24, 0xbe, -- 0x6b, 0x74, 0x5d, 0xd8, 0xd6, 0x2a, 0xf1, 0x7b, 0xeb, 0xa5, 0xcb, 0x0f, -- 0x95, 0x65, 0x60, 0xeb, 0x08, 0xd1, 0xda, 0x5d, 0x3e, 0x81, 0x54, 0xed, -- 0xd1, 0xbc, 0x68, 0xbf, 0x84, 0xf8, 0x24, 0x6c, 0x1a, 0xee, 0x4b, 0xf8, -- 0x3d, 0xdd, 0xc8, 0x54, 0x80, 0xe1, 0x65, 0x2d, 0x60, 0x5c, 0xd8, 0x80, -- 0xfc, 0xc0, 0xe9, 0xc7, 0xde, 0x45, 0xc0, 0xaa, 0x14, 0xb3, 0xe6, 0x9e, -- 0xef, 0x85, 0x43, 0xf9, 0xeb, 0x7a, 0x6a, 0x76, 0x85, 0xb7, 0x8e, 0xb0, -- 0x9b, 0x73, 0x66, 0x5c, 0x91, 0x60, 0xda, 0x3b, 0xdb, 0x24, 0xbf, 0x4e, -- 0x8b, 0x76, 0x85, 0xee, 0x58, 0x29, 0xc5, 0xb4, 0x06, 0x58, 0x9d, 0x9d, -- 0xed, 0x6f, 0x57, 0xaf, 0x3a, 0x90, 0xca, 0x1f, 0x7c, 0x79, 0xf7, 0xe9, -- 0x03, 0x9b, 0x76, 0x52, 0x42, 0x2f, 0xcf, 0x2c, 0x1c, 0x12, 0x82, 0xa0, -- 0x77, 0xc2, 0x44, 0xdb, 0x46, 0x84, 0x9f, 0x5d, 0xa5, 0x3c, 0xfc, 0x87, -- 0x46, 0x6f, 0x29, 0x1b, 0xad, 0xa1, 0xbc, 0xd5, 0x00, 0x6d, 0xf9, 0xb2, -- 0x62, 0x0b, 0xd9, 0x02, 0x60, 0x68, 0x5e, 0x8d, 0x75, 0xd9, 0xde, 0x02, -- 0x37, 0x11, 0xbc, 0x2d, 0x9c, 0xb3, 0xdf, 0x64, 0x12, 0x46, 0x3d, 0x65, -- 0x76, 0xb5, 0x14, 0x3c, 0x87, 0x42, 0xd4, 0x7e, 0x86, 0xfe, 0xd5, 0xf3, -- 0x4a, 0xbc, 0x99, 0x23, 0x89, 0x84, 0x9e, 0xc0, 0x78, 0xc7, 0xa9, 0x89, -- 0xac, 0x22, 0x72, 0xb4, 0x2f, 0x06, 0xb6, 0xcf, 0x8e, 0xd9, 0x21, 0x06, -- 0x6e, 0xb0, 0x96, 0xb4, 0xab, 0xf7, 0x0a, 0xb6, 0xdd, 0x10, 0x89, 0xb8, -- 0x42, 0x28, 0x8e, 0xd9, 0x73, 0xd6, 0x17, 0x3b, 0xc6, 0x6a, 0xf1, 0x10, -- 0xa0, 0x81, 0xbe, 0x52, 0x2d, 0x5a, 0x72, 0x5d, 0x31, 0xc7, 0xaf, 0x0c, -- 0x63, 0x50, 0xf0, 0xc8, 0xd9, 0xee, 0x7f, 0x70, 0xf2, 0xee, 0xcd, 0xd1, -- 0xd7, 0x0e, 0x78, 0x47, 0x98, 0xb8, 0x55, 0x15, 0x45, 0x9b, 0x62, 0x49, -- 0x0e, 0x9d, 0xde, 0x5a, 0xb5, 0x4e, 0x03, 0x71, 0x89, 0x3d, 0x7d, 0x08, -- 0x3f, 0x00, 0x03, 0x99, 0x3f, 0x61, 0x5b, 0xb9, 0x00, 0x59, 0x54, 0x9b, -- 0xde, 0xf2, 0xd0, 0x02, 0x06, 0x93, 0x84, 0x8d, 0xb4, 0xac, 0x97, 0x0b, -- 0x17, 0x4f, 0x18, 0x54, 0xbd, 0x53, 0xa4, 0x62, 0xcb, 0x14, 0x5f, 0x2e, -- 0x84, 0x35, 0x69, 0xbe, 0x67, 0xc3, 0xb0, 0x2b, 0x77, 0x00, 0x5b, 0x16, -- 0x14, 0xf9, 0x43, 0x2f, 0x80, 0x28, 0x44, 0x67, 0xca, 0xf8, 0x86, 0x61, -- 0xe8, 0xbc, 0xb9, 0x72, 0x26, 0xa8, 0x1c, 0x18, 0xd6, 0x5d, 0x9e, 0x89, -- 0x66, 0xc6, 0xf3, 0x46, 0xb9, 0x5c, 0x17, 0x97, 0xe3, 0x02, 0x81, 0xbd, -- 0xab, 0xa8, 0x72, 0xf5, 0x7f, 0x5d, 0xa8, 0x92, 0x65, 0x99, 0xa6, 0xf0, -- 0x5a, 0xc2, 0xed, 0x89, 0x4f, 0x5e, 0xb1, 0x87, 0x66, 0x8f, 0xf1, 0xba, -- 0x67, 0x02, 0xdf, 0x15, 0x66, 0x87, 0x2a, 0x97, 0xf4, 0xb8, 0xda, 0x47, -- 0x97, 0x41, 0xc2, 0x99, 0x84, 0x0c, 0x1a, 0xd1, 0x89, 0xb9, 0x98, 0x6d, -- 0x2d, 0xeb, 0x7f, 0x5c, 0x1f, 0x54, 0xf7, 0xb3, 0x51, 0x31, 0xb5, 0x1c, -- 0x0c, 0x87, 0xef, 0x60, 0x0f, 0x85, 0x55, 0xa8, 0x12, 0x71, 0xda, 0xd6, -- 0x81, 0x85, 0xd2, 0x87, 0x4d, 0xf9, 0xf1, 0x4b, 0x25, 0x17, 0x78, 0x8a, -- 0x6c, 0x16, 0x0e, 0x6c, 0x24, 0x9b, 0x8f, 0xa7, 0x85, 0x52, 0x35, 0xe7, -- 0x7f, 0x63, 0xa5, 0x9a, 0x53, 0x67, 0xe7, 0x5f, 0xb1, 0x64, 0x63, 0x07, -- 0xaa, 0x34, 0x90, 0xb8, 0xc3, 0xc6, 0xe1, 0xef, 0x6d, 0x82, 0xfc, 0xb6, -- 0x7c, 0xa1, 0x01, 0xfa, 0x86, 0xd2, 0x42, 0x0d, 0x49, 0x59, 0x07, 0x1a, -- 0xea, 0xcf, 0x62, 0x5b, 0x14, 0x17, 0xe0, 0x8f, 0xd6, 0xb9, 0x3d, 0xda, -- 0x5a, 0x7a, 0xa2, 0xa7, 0xb4, 0xbc, 0x52, 0x4c, 0x34, 0x75, 0xaa, 0x41, -- 0x49, 0x74, 0xc5, 0x36, 0x9c, 0x8d, 0x92, 0x85, 0x12, 0x17, 0x40, 0x03, -- 0xf1, 0x69, 0x29, 0x29, 0x7f, 0x9a, 0x10, 0x25, 0xd6, 0x49, 0x47, 0x88, -- 0x01, 0xc7, 0xf9, 0xa3, 0x0b, 0x4b, 0x49, 0xfd, 0x5d, 0x66, 0x35, 0x00, -- 0xbc, 0xa9, 0x56, 0x2f, 0xb3, 0xe0, 0x35, 0xb6, 0xe7, 0x41, 0x13, 0xce, -- 0xd4, 0x86, 0x22, 0x5d, 0x41, 0x96, 0x60, 0x38, 0x40, 0xe4, 0x01, 0x65, -- 0x95, 0x6f, 0x42, 0xbe, 0x7f, 0xa5, 0xc5, 0x7f, 0xe8, 0x3c, 0x2b, 0x7e, -- 0x89, 0x82, 0xb5, 0x7d, 0xbe, 0xad, 0x96, 0xb8, 0x5a, 0x23, 0x57, 0xab, -- 0x64, 0xff, 0xec, 0x90, 0x24, 0xdb, 0xab, 0x39, 0x20, 0x24, 0xe6, 0xb5, -- 0xe5, 0xbc, 0x65, 0x73, 0xad, 0x36, 0x34, 0xb7, 0xf3, 0xc1, 0x1d, 0xde, -- 0x05, 0x6f, 0x32, 0x31, 0x69, 0x8c, 0x80, 0xa4, 0x57, 0x7b, 0x92, 0x1b, -- 0x1b, 0xf2, 0x2a, 0xb8, 0x0e, 0xa3, 0x18, 0x08, 0x49, 0xb1, 0xb7, 0x84, -- 0xba, 0x2a, 0x0c, 0x75, 0xf5, 0x34, 0x62, 0xeb, 0x21, 0xdc, 0xaa, 0xad, -- 0x35, 0x4e, 0xb5, 0xcf, 0x4a, 0xf8, 0x9b, 0xa1, 0x20, 0x6a, 0x5f, 0x0d, -- 0x0f, 0xa8, 0x27, 0xa7, 0x7e, 0xb7, 0xf5, 0xe8, 0x6f, 0xb8, 0x67, 0x58, -- 0x16, 0x69, 0xcb, 0x05, 0x99, 0x0b, 0xb6, 0x17, 0x43, 0xf6, 0x24, 0x10, -- 0x7e, 0x25, 0x43, 0x0f, 0xc5, 0xbf, 0x61, 0xa3, 0x66, 0xe1, 0x27, 0xad, -- 0x34, 0x1b, 0x4a, 0xd5, 0x81, 0x89, 0x9e, 0x55, 0xa6, 0x0a, 0x8e, 0x1c, -- 0x1e, 0x31, 0xe6, 0x8f, 0x14, 0xff, 0x6d, 0xf0, 0xa7, 0x4e, 0x33, 0xef, -- 0x1f, 0xdd, 0x6c, 0xfd, 0x18, 0xdc, 0x97, 0xfc, 0xd1, 0x2b, 0x87, 0x8b, -- 0x86, 0x22, 0xe6, 0xdc, 0x11, 0x58, 0x2a, 0xdc, 0xa7, 0xfc, 0x0b, 0x3e, -- 0x46, 0x00, 0x9c, 0x61, 0x4b, 0x36, 0x60, 0x8c, 0xb4, 0xbe, 0x48, 0x38, -- 0x10, 0xf1, 0xf1, 0x81, 0x43, 0x8f, 0x42, 0xd1, 0x78, 0xf0, 0xed, 0x96, -- 0x15, 0x0c, 0x65, 0x53, 0x0e, 0xe7, 0xf7, 0xda, 0x81, 0xaf, 0xb2, 0x46, -- 0x85, 0x51, 0x97, 0x34, 0xd4, 0x1b, 0xf4, 0x68, 0x2d, 0xd6, 0xa7, 0x53, -- 0xcf, 0xf0, 0xed, 0x31, 0xde, 0x55, 0xe4, 0xd7, 0x79, 0x81, 0x49, 0x79, -- 0x17, 0x97, 0x2e, 0xb8, 0x6f, 0x64, 0x3b, 0x70, 0xed, 0x27, 0x4e, 0x06, -- 0x72, 0x30, 0x54, 0xc8, 0x18, 0x41, 0xbc, 0xc0, 0x6d, 0x5e, 0x99, 0x1f, -- 0x92, 0x68, 0x7b, 0x2c, 0xe1, 0x11, 0xb5, 0xe0, 0x05, 0x64, 0xf5, 0x38, -- 0x58, 0xca, 0x6c, 0x7c, 0x5d, 0x48, 0x78, 0x2d, 0x2d, 0x5a, 0x90, 0x88, -- 0xd9, 0x4b, 0xfe, 0x43, 0x69, 0xe0, 0x5b, 0x9f, 0xbf, 0xc7, 0x84, 0x30, -- 0x14, 0xd4, 0xbf, 0xa1, 0x27, 0x88, 0xc3, 0x1f, 0x2e, 0xce, 0xf6, 0x93, -- 0x6f, 0x0e, 0xf7, 0x5f, 0x1f, 0x9e, 0x9d, 0xb7, 0x2e, 0x7d, 0x8d, 0x04, -- 0x11, 0x09, 0x8d, 0xed, 0xc1, 0x10, 0x8d, 0x0d, 0x17, 0x40, 0x43, 0xf8, -- 0x8d, 0xeb, 0x11, 0xf1, 0xf0, 0x41, 0xa2, 0xf3, 0xc1, 0x0a, 0x91, 0x38, -- 0x0e, 0x00, 0x11, 0x5b, 0x81, 0xd9, 0xb8, 0x36, 0xc6, 0xc4, 0xa1, 0x38, -- 0x9e, 0xc1, 0xac, 0xe7, 0x61, 0xf2, 0x8c, 0x47, 0x96, 0xf3, 0x97, 0xc9, -- 0xa4, 0xb0, 0xbc, 0xc0, 0xe6, 0xce, 0x7d, 0xe3, 0xd3, 0xb1, 0x03, 0xb6, -- 0xa5, 0x97, 0x8c, 0x1a, 0x10, 0x7b, 0x3f, 0x0c, 0xa8, 0xdf, 0x01, 0x2d, -- 0xfe, 0x80, 0x11, 0x01, 0xef, 0xb3, 0xaa, 0xd7, 0xb2, 0x06, 0x36, 0xbb, -- 0x5f, 0x93, 0x7a, 0x37, 0xd1, 0x49, 0xfa, 0xa6, 0xb3, 0x25, 0x3e, 0x5d, -- 0x5c, 0x12, 0x37, 0xd2, 0x20, 0x70, 0xa9, 0x06, 0x42, 0xb2, 0x9e, 0xa0, -- 0x28, 0xd3, 0x45, 0x63, 0x95, 0xbc, 0x9a, 0xa9, 0xa1, 0x61, 0x18, 0x88, -- 0x4e, 0x01, 0xb2, 0x0e, 0x9d, 0x3d, 0xb9, 0xd4, 0x61, 0x17, 0x31, 0xb0, -- 0x5a, 0x1a, 0x96, 0x3e, 0x14, 0xde, 0x0f, 0xf0, 0x85, 0x68, 0x38, 0x7e, -- 0xd5, 0x70, 0x95, 0xaa, 0x5d, 0x54, 0x81, 0x8e, 0xb5, 0x39, 0x1e, 0x83, -- 0xa3, 0x79, 0x8b, 0xe2, 0xe7, 0x2e, 0xad, 0x06, 0x83, 0xbe, 0x2b, 0x01, -- 0x61, 0xac, 0xd4, 0xc3, 0xd4, 0x29, 0xc5, 0x1c, 0xa5, 0xa2, 0x9b, 0x30, -- 0xb6, 0x20, 0x2d, 0x28, 0x24, 0x66, 0x14, 0x8c, 0x42, 0x20, 0xb9, 0x7b, -- 0x2e, 0x4b, 0xbe, 0x29, 0x2a, 0xdc, 0x05, 0xf1, 0xe3, 0x7c, 0xc9, 0x77, -- 0x2d, 0x3f, 0xde, 0x50, 0x57, 0x97, 0x83, 0xe4, 0x04, 0x82, 0x2d, 0xd8, -- 0xd7, 0xe9, 0xfe, 0xc5, 0x37, 0x70, 0xb4, 0x82, 0x84, 0x5f, 0x03, 0xd0, -- 0xc4, 0xdc, 0x6b, 0x71, 0x76, 0x96, 0x53, 0xe0, 0x44, 0xfe, 0x35, 0x18, -- 0x41, 0x93, 0x27, 0xe1, 0xc8, 0xcb, 0x25, 0x26, 0x69, 0x2a, 0x05, 0x34, -- 0xc1, 0xa3, 0x1b, 0x45, 0xcc, 0x10, 0x05, 0xef, 0x52, 0xef, 0x5c, 0xe8, -- 0xe5, 0xba, 0xe4, 0xa9, 0xaf, 0xcb, 0x9c, 0x40, 0xf4, 0x2c, 0xcc, 0xb1, -- 0xc6, 0x13, 0xe2, 0xbc, 0xe2, 0x0b, 0x4e, 0x44, 0x16, 0x5f, 0xd4, 0xa4, -- 0xe8, 0x46, 0xe9, 0x0b, 0x8e, 0xf4, 0x97, 0xb3, 0xfb, 0x61, 0x8c, 0x8f, -- 0x93, 0x7c, 0xb5, 0xac, 0x9b, 0x6c, 0xa5, 0x85, 0x36, 0xeb, 0x24, 0xcb, -- 0xb2, 0x28, 0xea, 0x60, 0x0c, 0x90, 0x7e, 0xd2, 0x5a, 0x4f, 0xb4, 0xc0, -- 0x31, 0xca, 0x58, 0xb8, 0xa9, 0xb9, 0xca, 0xdd, 0xa1, 0x60, 0x98, 0x8e, -- 0xaa, 0x62, 0xba, 0xac, 0x83, 0x40, 0xec, 0x5f, 0x37, 0xe6, 0x60, 0xd0, -- 0x1b, 0x47, 0x43, 0x83, 0xa6, 0xe4, 0xfa, 0xc7, 0x24, 0x84, 0x93, 0xa6, -- 0x4f, 0xe2, 0x25, 0xfc, 0x8e, 0x65, 0x31, 0x6f, 0x56, 0xda, 0x42, 0xcc, -- 0xf7, 0xe6, 0xda, 0xda, 0xb9, 0x6d, 0x36, 0x83, 0x83, 0xc6, 0x9b, 0xfe, -- 0x3d, 0xa4, 0x49, 0x1e, 0x83, 0xf8, 0x0d, 0xc6, 0xf4, 0x8b, 0x41, 0xb3, -- 0x65, 0xb2, 0xa7, 0x60, 0xe1, 0xb2, 0xc7, 0x79, 0xd5, 0x9c, 0x14, 0xbe, -- 0x72, 0x9e, 0x0b, 0x4b, 0x35, 0xbb, 0x28, 0x0c, 0xf5, 0x5c, 0x3d, 0x77, -- 0x9e, 0x20, 0x1a, 0xc9, 0xea, 0x9d, 0x78, 0xbe, 0x7c, 0x09, 0x58, 0x59, -- 0x56, 0x17, 0x99, 0xcb, 0x83, 0xdc, 0xfa, 0xdf, 0x5b, 0x49, 0x3f, 0xd1, -- 0x8a, 0xd9, 0x1d, 0x18, 0x44, 0xff, 0x17, 0x62, 0xb0, 0x14, 0x4c, 0x95, -- 0xdb, 0x6c, 0x21, 0x90, 0x0e, 0x49, 0x85, 0xba, 0x2e, 0xc7, 0x9e, 0xfa, -- 0x49, 0x3a, 0xc8, 0xee, 0x58, 0x7f, 0x31, 0x1d, 0x41, 0xd1, 0x3c, 0xa4, -- 0x32, 0xaa, 0xc3, 0x47, 0x02, 0x1a, 0xc6, 0xa5, 0xb3, 0xea, 0x71, 0x91, -- 0x42, 0xa9, 0xd8, 0x27, 0x62, 0x3d, 0x0a, 0xd6, 0x98, 0x07, 0x55, 0x12, -- 0xde, 0x9d, 0xde, 0x5e, 0x25, 0x55, 0x21, 0xff, 0x5a, 0xfe, 0x91, 0xc6, -- 0x78, 0x29, 0xf9, 0x07, 0x85, 0xd0, 0x82, 0x0a, 0xa2, 0x16, 0x7c, 0x2a, -- 0x81, 0x75, 0xe6, 0x99, 0xb4, 0x41, 0x9a, 0x14, 0xc0, 0x8e, 0x4b, 0x80, -- 0x30, 0x2a, 0x30, 0x08, 0x07, 0x95, 0x31, 0x56, 0xac, 0xe4, 0x6f, 0x73, -- 0x89, 0x3b, 0xd3, 0x64, 0xec, 0x4a, 0xb5, 0x8c, 0x8e, 0xb5, 0xb0, 0xe0, -- 0xb0, 0x0c, 0x5f, 0xef, 0x7e, 0xe4, 0xc8, 0xc3, 0x49, 0x77, 0x97, 0x32, -- 0x8c, 0x99, 0x17, 0x09, 0x6c, 0x4a, 0x5a, 0x24, 0x53, 0xe2, 0x38, 0xc2, -- 0xd8, 0x14, 0x1f, 0xbc, 0x79, 0xc5, 0x09, 0x1f, 0x6a, 0x92, 0x52, 0xa8, -- 0x11, 0xd8, 0xbf, 0xae, 0x73, 0x0d, 0x31, 0x95, 0x55, 0x6f, 0x96, 0x20, -- 0x84, 0x85, 0x8f, 0xa3, 0x0b, 0xbc, 0x83, 0xd5, 0xc5, 0x40, 0x0c, 0xe3, -- 0x03, 0x33, 0x74, 0x18, 0xa0, 0x7a, 0x89, 0x1c, 0x85, 0xe9, 0xe5, 0x12, -- 0x90, 0xe1, 0xc2, 0x9e, 0x3f, 0xb1, 0xf7, 0xb0, 0x4b, 0x8e, 0x67, 0x9d, -- 0x27, 0x92, 0x4b, 0xa2, 0x48, 0x6e, 0x7c, 0xa1, 0xec, 0xee, 0x40, 0x31, -- 0x95, 0xf0, 0x0d, 0xa0, 0x6a, 0x5a, 0x0b, 0x06, 0x67, 0xd6, 0x5e, 0xfc, -- 0xcd, 0xbe, 0xae, 0x92, 0x4b, 0xbe, 0x57, 0x6f, 0xb3, 0xc8, 0x85, 0x81, -- 0xdf, 0xa9, 0x51, 0x6a, 0x4b, 0x12, 0xba, 0xab, 0xba, 0x5c, 0x8e, 0x1b, -- 0x08, 0x7a, 0xa0, 0x88, 0x86, 0x97, 0xde, 0xad, 0x71, 0x11, 0xea, 0xf6, -- 0x47, 0xa7, 0xaa, 0xde, 0x8b, 0xf6, 0xc1, 0x23, 0xdb, 0x48, 0x1b, 0xf9, -- 0x2e, 0xae, 0x0a, 0x63, 0xd8, 0xef, 0xa6, 0xa3, 0xb2, 0xc1, 0xa9, 0x4b, -- 0xae, 0x6f, 0xd5, 0xd2, 0xe6, 0x44, 0x85, 0xe0, 0xee, 0x55, 0x41, 0x0c, -- 0x82, 0x47, 0x99, 0x28, 0x24, 0x22, 0xc4, 0x1a, 0x36, 0x59, 0xae, 0x39, -- 0xd8, 0x42, 0x1a, 0xd2, 0x40, 0xa3, 0x56, 0xc5, 0x11, 0xbc, 0x45, 0x0b, -- 0x69, 0xb5, 0x54, 0x5c, 0x11, 0xa1, 0xca, 0x43, 0x1f, 0xb6, 0x42, 0x56, -- 0x81, 0xa0, 0xe4, 0xe4, 0x43, 0xc5, 0x72, 0xd3, 0xf5, 0x1b, 0xba, 0xda, -- 0xf6, 0xda, 0x43, 0x5b, 0x9c, 0x88, 0xef, 0xc6, 0x53, 0x41, 0x2a, 0x89, -- 0xe8, 0xe8, 0xb5, 0xd9, 0x54, 0xc1, 0x72, 0xb0, 0x36, 0xac, 0xd9, 0xd8, -- 0x26, 0xd1, 0xba, 0x5a, 0x17, 0x34, 0x04, 0x9e, 0xf1, 0xfa, 0x34, 0xdb, -- 0x5e, 0x0f, 0xaa, 0x20, 0x6d, 0x48, 0xfc, 0x7f, 0x01, 0xed, 0xc7, 0x61, -- 0x09, 0x8a, 0xf5, 0x82, 0xe3, 0xdc, 0x36, 0x3b, 0x86, 0x42, 0x4d, 0xfc, -- 0xda, 0xc1, 0xec, 0xbc, 0xd8, 0x1d, 0xee, 0x3c, 0xff, 0x7c, 0xb8, 0x3d, -- 0xdc, 0xd9, 0x66, 0xfe, 0xc2, 0x43, 0x09, 0x06, 0x27, 0xeb, 0xd2, 0xd1, -- 0x55, 0xe3, 0xbd, 0xb8, 0xcf, 0x77, 0x87, 0x17, 0xdf, 0x9f, 0x9c, 0x7d, -- 0x9b, 0x1c, 0xbd, 0xbb, 0x38, 0x3c, 0x7b, 0xb3, 0x7f, 0xf0, 0xa9, 0xf0, -- 0xe8, 0xa1, 0xd9, 0x3a, 0x28, 0x04, 0x9c, 0xf9, 0x85, 0x89, 0x6d, 0x83, -- 0x7e, 0xcd, 0xb2, 0xfa, 0x7a, 0x7b, 0x6f, 0xe7, 0x41, 0x00, 0xe5, 0x0e, -- 0xf3, 0xa0, 0x7f, 0xdf, 0x26, 0xb5, 0xc3, 0x93, 0x5a, 0xdd, 0x8a, 0x43, -- 0x4e, 0x3c, 0x97, 0x30, 0x2b, 0x17, 0xa2, 0x0b, 0x36, 0x8f, 0x3a, 0x33, -- 0xf9, 0xa8, 0x4c, 0xcd, 0x30, 0x35, 0x12, 0x14, 0x57, 0xc9, 0xb4, 0x55, -- 0x0c, 0x18, 0x0d, 0x47, 0x57, 0x9e, 0xbb, 0x26, 0x45, 0x77, 0x6b, 0x35, -- 0xa7, 0x08, 0x28, 0xeb, 0x04, 0x22, 0x9e, 0x71, 0x65, 0x4d, 0x63, 0x63, -- 0x6a, 0xd1, 0x3a, 0x90, 0x82, 0x07, 0x38, 0x71, 0x29, 0x23, 0x0e, 0x90, -- 0x00, 0x51, 0x10, 0x26, 0xa7, 0x63, 0xac, 0xcd, 0xba, 0xc9, 0x61, 0x24, -- 0x6d, 0x0b, 0x11, 0xb5, 0xb2, 0x10, 0x67, 0x4c, 0xac, 0x61, 0x1a, 0x3d, -- 0xd0, 0x81, 0xe0, 0x34, 0x04, 0xa3, 0x91, 0xae, 0x20, 0x50, 0x19, 0x34, -- 0x77, 0x13, 0xcf, 0x57, 0xee, 0x28, 0xa4, 0x51, 0x88, 0xfc, 0x67, 0x35, -- 0x04, 0xb8, 0xf5, 0xaa, 0x81, 0x21, 0x98, 0x48, 0xed, 0x9f, 0xf0, 0x75, -- 0x11, 0xb5, 0x11, 0xa8, 0x39, 0x29, 0xd3, 0x3b, 0x14, 0xb0, 0xc8, 0x3d, -- 0x22, 0xe8, 0x5a, 0xd2, 0x28, 0x60, 0xc4, 0x82, 0x93, 0x5f, 0xf3, 0xe4, -- 0xf4, 0xf0, 0xed, 0xc0, 0xca, 0xae, 0xd2, 0xef, 0x62, 0x8c, 0x32, 0xf8, -- 0x47, 0x49, 0xf3, 0x59, 0x64, 0x73, 0x0b, 0xab, 0x01, 0x4f, 0xd4, 0x38, -- 0xa0, 0x70, 0x02, 0x7c, 0x68, 0x1c, 0x40, 0xa4, 0x46, 0x8f, 0x5a, 0xf8, -- 0xa5, 0x43, 0x30, 0x6d, 0xa0, 0x66, 0xf2, 0x7e, 0x6a, 0xec, 0x72, 0xb2, -- 0xe1, 0xe2, 0x75, 0xb9, 0x3f, 0x04, 0xa5, 0x22, 0x66, 0xc0, 0x85, 0x09, -- 0x14, 0x96, 0x84, 0x7d, 0xfa, 0xed, 0xc1, 0xf9, 0x1f, 0x77, 0x76, 0x75, -- 0x38, 0x9b, 0x43, 0x8f, 0xaf, 0x1b, 0xe5, 0xe7, 0x83, 0x5d, 0x87, 0x63, -- 0xb4, 0x6c, 0x6b, 0x1c, 0x70, 0x6c, 0xc6, 0x86, 0xcb, 0x11, 0xda, 0x6c, -- 0x24, 0x09, 0xad, 0x49, 0xf5, 0x6f, 0x13, 0x31, 0x5d, 0x69, 0x54, 0x76, -- 0x89, 0xa0, 0x80, 0x8e, 0x96, 0xb0, 0xa9, 0x5d, 0xd4, 0x5f, 0x3a, 0xb7, -- 0x8f, 0xa4, 0x65, 0x6d, 0x0d, 0xe9, 0xe4, 0x3e, 0xb2, 0xa5, 0xbd, 0xe7, -- 0xbc, 0xde, 0xfe, 0x5b, 0x86, 0x71, 0xd5, 0x9b, 0xdd, 0xf0, 0x7a, 0x7c, -- 0x37, 0x38, 0x00, 0x1a, 0xc8, 0x3e, 0xb1, 0x22, 0x59, 0x73, 0x5f, 0x74, -- 0x82, 0x9f, 0x3e, 0xa1, 0x8d, 0xa2, 0x93, 0x25, 0x10, 0x0e, 0xcc, 0x14, -- 0x8a, 0x29, 0xab, 0x2e, 0xee, 0x91, 0xd7, 0x25, 0x57, 0xf7, 0x58, 0x48, -- 0x48, 0xe9, 0xbb, 0x61, 0xf2, 0x4d, 0x36, 0xe7, 0x1c, 0x7a, 0x0e, 0xbe, -- 0xb3, 0x34, 0x2c, 0x84, 0x08, 0x72, 0x95, 0x3e, 0x54, 0x2d, 0x3b, 0xce, -- 0x52, 0x85, 0xcc, 0x24, 0x5e, 0x57, 0x89, 0x86, 0x6b, 0x15, 0x7b, 0x52, -- 0x0e, 0xd4, 0x53, 0x7c, 0x4f, 0x87, 0x7b, 0xc1, 0x0f, 0x48, 0x03, 0x1b, -- 0x4d, 0xdc, 0x4b, 0x00, 0xe8, 0xa3, 0x39, 0x3d, 0xe6, 0xf0, 0x35, 0xa9, -- 0x55, 0xf9, 0x1a, 0xe0, 0xcf, 0x6c, 0x2d, 0x14, 0x8d, 0xcb, 0x33, 0x95, -- 0x49, 0x79, 0xcd, 0xa6, 0x8f, 0x8a, 0xae, 0x9b, 0x74, 0x3e, 0xbe, 0x1f, -- 0x4e, 0x48, 0x96, 0x65, 0xe3, 0xd9, 0x70, 0x79, 0xb3, 0x15, 0x1c, 0x53, -- 0x66, 0xf9, 0xd7, 0x02, 0x17, 0xd0, 0x34, 0x7c, 0x5b, 0x39, 0xd8, 0x18, -- 0xd9, 0x2b, 0x6d, 0x9c, 0x09, 0x26, 0x09, 0x4b, 0xfc, 0x97, 0xe3, 0xb9, -- 0x12, 0x03, 0xeb, 0x30, 0x71, 0xb8, 0xc3, 0xdc, 0xc2, 0x70, 0x91, 0xcd, -- 0xf6, 0x5c, 0x62, 0xb2, 0xf1, 0x07, 0xad, 0x61, 0xe0, 0x14, 0x8b, 0xc0, -- 0x48, 0x3b, 0xcf, 0xae, 0xa6, 0x2a, 0x50, 0x84, 0xaa, 0x8b, 0xc7, 0x91, -- 0x8e, 0xb3, 0x41, 0x44, 0xe1, 0xd1, 0x7a, 0x32, 0x90, 0xd8, 0x89, 0x0e, -- 0x6b, 0x8d, 0xae, 0x95, 0x87, 0x51, 0x92, 0xdd, 0x37, 0xa2, 0x20, 0x22, -- 0x80, 0x40, 0x46, 0xe9, 0x6d, 0x31, 0xf1, 0x58, 0x50, 0x92, 0xba, 0x9f, -- 0x18, 0xa7, 0x15, 0x14, 0x02, 0xd0, 0x71, 0x0d, 0x90, 0x86, 0xf3, 0xd3, -- 0xaa, 0xae, 0xca, 0x59, 0xa1, 0xaf, 0x6f, 0x9f, 0xb0, 0xc5, 0xfb, 0xe2, -- 0xf8, 0xdc, 0xbc, 0x22, 0xf3, 0xec, 0x2e, 0x20, 0x2d, 0x01, 0xca, 0x57, -- 0xfa, 0x63, 0x03, 0x90, 0x20, 0x1e, 0x03, 0xf8, 0x00, 0x23, 0x11, 0xae, -- 0xe0, 0xdd, 0x64, 0x3e, 0x0f, 0xc2, 0x16, 0x41, 0x23, 0x8a, 0x79, 0x28, -- 0x56, 0x1c, 0x4a, 0x84, 0x21, 0x07, 0xfa, 0xc2, 0xd0, 0x7a, 0x24, 0x2c, -- 0x3d, 0xe9, 0x27, 0x83, 0x5d, 0x40, 0xe9, 0xec, 0x34, 0x17, 0x31, 0xad, -- 0x05, 0xc5, 0x8f, 0xdb, 0xa0, 0x96, 0xac, 0x15, 0x65, 0x07, 0x1b, 0x4a, -- 0xd2, 0xb7, 0xf4, 0x3e, 0xff, 0xb3, 0xab, 0x13, 0xba, 0xdd, 0x41, 0xf0, -- 0xb6, 0xc0, 0x4a, 0x4e, 0xef, 0x63, 0x91, 0x61, 0xf7, 0xc1, 0x5d, 0x45, -- 0x9a, 0xc4, 0x5d, 0xee, 0xf0, 0x9d, 0x05, 0xe2, 0x1f, 0xa6, 0x50, 0x45, -- 0xec, 0xb4, 0x01, 0xd0, 0x12, 0xaa, 0x91, 0x7b, 0x9e, 0xdc, 0xee, 0x9a, -- 0xaf, 0x99, 0xbf, 0xb1, 0x75, 0x13, 0x63, 0xbd, 0x67, 0x22, 0x51, 0x06, -- 0x23, 0x07, 0xbc, 0x05, 0x54, 0xcb, 0x09, 0x50, 0x44, 0xb3, 0xc4, 0x45, -- 0x1a, 0x5c, 0xa6, 0x98, 0xab, 0x59, 0x41, 0xb2, 0xdf, 0xd3, 0xb9, 0x6c, -- 0x06, 0xc9, 0xc1, 0x3e, 0xcc, 0x09, 0x41, 0xe0, 0x41, 0x70, 0xe4, 0xd1, -- 0xdc, 0xe5, 0x4c, 0xa8, 0x29, 0x1f, 0x08, 0x7a, 0xd8, 0xfe, 0xeb, 0x5c, -- 0x0c, 0x13, 0x08, 0x3b, 0xc5, 0x75, 0x4e, 0x27, 0x7f, 0x3d, 0xa1, 0xc3, -- 0xb4, 0x64, 0x8e, 0x5f, 0xbb, 0x4a, 0x55, 0xe7, 0x82, 0xbc, 0xb9, 0x1e, -- 0xb2, 0xb9, 0xc1, 0x17, 0x3c, 0x95, 0x6a, 0xdd, 0xcf, 0x5d, 0x81, 0xc7, -- 0x9b, 0x13, 0x51, 0x3f, 0x87, 0xd5, 0x66, 0x3a, 0x2d, 0xad, 0x04, 0xf5, -- 0xfa, 0xe1, 0x47, 0x96, 0x71, 0xd6, 0xb5, 0x27, 0xf9, 0x5a, 0xd2, 0xfb, -- 0xb1, 0x46, 0xa7, 0x47, 0xef, 0xa4, 0xa8, 0xb2, 0x3b, 0x0b, 0x19, 0x23, -- 0x23, 0xae, 0x49, 0x3d, 0x70, 0x8c, 0x27, 0x55, 0x08, 0x89, 0x44, 0x0c, -- 0x47, 0x4c, 0x33, 0x4c, 0xe3, 0xb9, 0xf6, 0x75, 0xb6, 0x94, 0xde, 0xd7, -- 0xf9, 0x9e, 0xab, 0xaa, 0xe9, 0x7a, 0xab, 0x50, 0xa8, 0xdb, 0x93, 0xd6, -- 0x85, 0xe2, 0x2c, 0x52, 0xe3, 0x49, 0x58, 0x66, 0x5d, 0x5b, 0x69, 0xf0, -- 0xb9, 0x7e, 0x2b, 0xe9, 0x31, 0x34, 0x85, 0xff, 0x31, 0x19, 0x6e, 0x51, -- 0x87, 0xd5, 0x96, 0xbd, 0xb8, 0xb8, 0x19, 0x57, 0x74, 0xc3, 0x71, 0x86, -- 0xef, 0x4f, 0x0e, 0x1d, 0x9e, 0x47, 0x3c, 0xf9, 0x25, 0x19, 0x8c, 0xa7, -- 0x98, 0x5f, 0x82, 0x92, 0xc4, 0x3f, 0xd1, 0xce, 0xf3, 0x13, 0xbf, 0xb8, -- 0x3d, 0x7c, 0x93, 0xf3, 0x79, 0xfb, 0xd8, 0xb7, 0xa9, 0x9f, 0x88, 0xc2, -- 0x20, 0xf0, 0xb3, 0xc9, 0xfe, 0xe4, 0x96, 0xf3, 0xef, 0x26, 0xfa, 0x27, -- 0xcf, 0xe7, 0x70, 0x8e, 0x62, 0x8e, 0x98, 0x69, 0x3a, 0x92, 0xfa, 0xcd, -- 0xdf, 0xe5, 0xa4, 0x74, 0x1c, 0xb4, 0xe4, 0x0b, 0x4e, 0x05, 0xe4, 0x01, -- 0xe2, 0xad, 0xe0, 0x4b, 0xcb, 0xeb, 0xe8, 0x6b, 0xfa, 0x82, 0x8f, 0xfc, -- 0x63, 0xee, 0xcc, 0x5b, 0x37, 0x4c, 0xbe, 0x62, 0x1f, 0x67, 0x99, 0x05, -- 0xe0, 0xac, 0x7a, 0xf1, 0x49, 0xd1, 0x33, 0xde, 0x8c, 0x54, 0xa0, 0x28, -- 0x86, 0x6e, 0x26, 0x51, 0x3a, 0x8c, 0x9b, 0x93, 0xfb, 0xa6, 0x39, 0x39, -- 0x8c, 0xcb, 0xb2, 0xdb, 0x69, 0x2a, 0x96, 0x3a, 0x91, 0x44, 0x53, 0x09, -- 0x60, 0x23, 0x65, 0x84, 0x72, 0x61, 0x4e, 0x32, 0xcb, 0xf1, 0x2f, 0x42, -- 0x60, 0x15, 0xb3, 0x1c, 0xa3, 0x29, 0x93, 0x08, 0x1c, 0x49, 0xe0, 0x0e, -- 0xf7, 0xa3, 0x3e, 0xb8, 0x26, 0xd6, 0x9c, 0xb9, 0xa1, 0x9e, 0x8b, 0x49, -- 0xcf, 0x86, 0x78, 0xce, 0x77, 0x94, 0x6d, 0x82, 0xfb, 0xd2, 0x12, 0x25, -- 0x21, 0x85, 0x6e, 0x09, 0xef, 0x72, 0xb4, 0x2b, 0xab, 0xdb, 0x9c, 0x02, -- 0xe7, 0x37, 0x9e, 0xbf, 0x7f, 0xcb, 0x85, 0x38, 0x50, 0xe3, 0xf7, 0xe2, -- 0x6c, 0xff, 0xdd, 0xf9, 0x1b, 0x31, 0x8d, 0x5f, 0x14, 0x41, 0xe9, 0x60, -- 0xf5, 0x2b, 0x98, 0xff, 0xd8, 0x21, 0xc6, 0xdd, 0x49, 0x75, 0x08, 0x0b, -- 0xad, 0xd7, 0xba, 0xc2, 0xfd, 0x36, 0x0a, 0xbe, 0x14, 0x25, 0xe6, 0xd5, -- 0xe0, 0xa1, 0x6d, 0x9c, 0x6f, 0x3a, 0x41, 0xa8, 0x0a, 0x2b, 0x60, 0xf9, -- 0xda, 0xde, 0x06, 0xdc, 0xac, 0x0f, 0xf1, 0xb2, 0x1c, 0xd8, 0x60, 0xec, -- 0x53, 0xb9, 0x7b, 0x57, 0x62, 0x85, 0x1e, 0x90, 0xaa, 0x38, 0xd0, 0xba, -- 0x2a, 0x41, 0xbd, 0x2f, 0x67, 0x4e, 0x95, 0xbb, 0x57, 0x51, 0xfd, 0x5c, -- 0xe3, 0x61, 0x0a, 0xa8, 0x35, 0xbd, 0xf1, 0xaf, 0x3b, 0x9b, 0xdd, 0xcd, -- 0x5f, 0xfc, 0xda, 0xe6, 0xbb, 0xc7, 0x6e, 0xba, 0x99, 0xcf, 0x2e, 0xda, -- 0xf8, 0xd7, 0xdd, 0xcd, 0x07, 0x67, 0x14, 0x26, 0x48, 0xfa, 0x3e, 0xe9, -- 0x0d, 0x1e, 0x6c, 0xf2, 0xca, 0x2a, 0xc5, 0xab, 0xcc, 0xe4, 0x22, 0x74, -- 0x02, 0x38, 0xe0, 0x06, 0x76, 0x07, 0x47, 0x70, 0x3b, 0x49, 0xdd, 0x3b, -- 0xde, 0x34, 0xd1, 0xe4, 0xe8, 0x7f, 0x1d, 0x86, 0x28, 0x8f, 0xf3, 0xf5, -- 0x3a, 0xbc, 0xa2, 0x18, 0x28, 0xa0, 0x2a, 0x86, 0xe8, 0x7b, 0xf7, 0x81, -- 0xbe, 0xfd, 0xec, 0x02, 0xb3, 0x04, 0x7b, 0xb1, 0x39, 0x0c, 0xce, 0xc0, -- 0xaa, 0xb5, 0x9f, 0x35, 0x5f, 0x93, 0x7a, 0x75, 0x7f, 0x17, 0x47, 0x6f, -- 0x0f, 0x19, 0xd4, 0xfa, 0xf5, 0x11, 0xe3, 0xd0, 0x9d, 0x2b, 0x12, 0xa4, -- 0x59, 0x20, 0x1c, 0x60, 0x6e, 0x58, 0x1d, 0x45, 0xdc, 0xbb, 0x2e, 0xda, -- 0xcc, 0x71, 0x0e, 0xb7, 0x13, 0xdc, 0xb5, 0x86, 0x43, 0x57, 0x96, 0x74, -- 0x79, 0x74, 0x39, 0x78, 0x5b, 0x4c, 0xa0, 0x25, 0x0f, 0xce, 0x11, 0x2a, -- 0x48, 0x6f, 0xd1, 0x87, 0xef, 0xe7, 0xb3, 0xc6, 0xc7, 0xc3, 0x8e, 0xa4, -- 0xdd, 0xb5, 0x55, 0x25, 0x64, 0xfe, 0xbe, 0x35, 0x18, 0xa0, 0x22, 0xbc, -- 0x84, 0x75, 0xa9, 0x73, 0xa7, 0x01, 0xd5, 0x61, 0xac, 0x85, 0x16, 0x28, -- 0x9f, 0xde, 0x4b, 0x20, 0x42, 0xea, 0xc3, 0xc7, 0x7c, 0x22, 0xe7, 0x15, -- 0x27, 0x93, 0x79, 0x13, 0x9f, 0x18, 0xf1, 0xd6, 0x42, 0x6c, 0x51, 0x28, -- 0x52, 0xd9, 0x9d, 0x8f, 0x7f, 0xd2, 0x02, 0xb7, 0xc5, 0xe2, 0x1e, 0xb3, -- 0xbc, 0x6b, 0x84, 0x56, 0x74, 0xfa, 0x57, 0xff, 0x2e, 0xef, 0x34, 0x8a, -- 0x26, 0x29, 0x04, 0x74, 0x40, 0x81, 0xfa, 0x89, 0xd6, 0x18, 0x3a, 0x29, -- 0x83, 0xeb, 0x4a, 0x87, 0x6d, 0xb5, 0xc4, 0x02, 0xdc, 0xd1, 0x00, 0x26, -- 0xb5, 0x39, 0xce, 0x10, 0xa3, 0xb5, 0xe0, 0x2c, 0xd8, 0xd7, 0x85, 0x73, -- 0x8e, 0x11, 0xdb, 0x59, 0x34, 0x4b, 0xc8, 0x66, 0x89, 0xe5, 0x7b, 0x4b, -- 0x3a, 0xff, 0xfa, 0x60, 0x1d, 0x65, 0x13, 0xf2, 0x79, 0xc7, 0x64, 0x06, -- 0xbf, 0x7e, 0x36, 0x91, 0xeb, 0x35, 0xe9, 0x5d, 0x32, 0x26, 0x06, 0xfb, -- 0xb1, 0x7a, 0x32, 0x00, 0x81, 0x8c, 0x11, 0xe2, 0xa2, 0x0b, 0x82, 0xf9, -- 0x9a, 0x29, 0x92, 0xa2, 0x54, 0xbb, 0xc8, 0x58, 0x67, 0x24, 0x17, 0xab, -- 0x24, 0x33, 0xd2, 0xe5, 0x62, 0x82, 0xa0, 0x0c, 0x09, 0x47, 0xfd, 0x1f, -- 0x8c, 0x59, 0x5d, 0xde, 0x27, 0x3b, 0xbb, 0xfd, 0x64, 0x77, 0x7b, 0x67, -- 0xb7, 0x63, 0x0e, 0xbd, 0xff, 0xc1, 0x41, 0x51, 0xbb, 0xf8, 0xba, 0xf7, -- 0xa9, 0xb3, 0xf0, 0xa9, 0x0d, 0xb8, 0x49, 0x34, 0x09, 0x98, 0x98, 0x0f, -- 0xfb, 0x67, 0x81, 0x93, 0x8c, 0xba, 0xb2, 0x40, 0xb6, 0xc3, 0xb5, 0x25, -- 0x46, 0x42, 0x2b, 0x68, 0xe8, 0x0a, 0x5d, 0xf1, 0x13, 0x6b, 0x5a, 0xda, -- 0x13, 0x91, 0x2f, 0xce, 0x52, 0x9a, 0x96, 0xa8, 0xd6, 0xd8, 0xdc, 0xa3, -- 0xbc, 0xb6, 0x6d, 0xe1, 0xd0, 0x1a, 0xde, 0x1b, 0xa2, 0xf7, 0xd7, 0x47, -- 0x07, 0x17, 0x06, 0x7d, 0x78, 0xc9, 0xc2, 0x53, 0x79, 0xff, 0x69, 0xa5, -- 0xef, 0x1e, 0x7c, 0x66, 0xb2, 0x77, 0x9d, 0x91, 0x18, 0x3d, 0x1f, 0x2d, -- 0xaf, 0xf6, 0xfe, 0x9a, 0x96, 0x57, 0xc5, 0xfc, 0xb1, 0xe7, 0x27, 0xc8, -- 0x2d, 0xdb, 0x23, 0x0e, 0xb5, 0xf3, 0x62, 0xe7, 0x89, 0x24, 0x2e, 0xe4, -- 0x5c, 0x27, 0x13, 0x0c, 0x62, 0x7d, 0xb6, 0x2e, 0x58, 0x1b, 0xc8, 0x98, -- 0x70, 0x00, 0x1b, 0xf3, 0xc9, 0xba, 0x5c, 0xf7, 0x69, 0xf8, 0xec, 0x44, -- 0x9f, 0x95, 0x2c, 0xf4, 0xf5, 0x35, 0x29, 0x5d, 0xb2, 0xce, 0x19, 0x9b, -- 0xcb, 0xc5, 0x7a, 0x13, 0xc1, 0xfd, 0x91, 0xb9, 0x72, 0x17, 0xae, 0xd2, -- 0xdf, 0x81, 0xc3, 0xa5, 0x47, 0x32, 0x51, 0x99, 0xa5, 0x37, 0xbe, 0xd0, -- 0xac, 0x07, 0xe2, 0x30, 0x97, 0xc7, 0xd9, 0x9b, 0x03, 0x01, 0x33, 0xb5, -- 0xd4, 0x29, 0x2c, 0x75, 0xe2, 0x4c, 0x53, 0x9b, 0x3c, 0xca, 0x47, 0xfa, -- 0xe7, 0xdc, 0x86, 0xbd, 0xc9, 0xe8, 0x13, 0x1e, 0xa2, 0x73, 0x27, 0xb8, -- 0x71, 0xfb, 0xcd, 0x82, 0x38, 0xac, 0xa8, 0xa1, 0xbc, 0x87, 0x55, 0x95, -- 0xdd, 0x90, 0xb2, 0x9f, 0xe2, 0x71, 0xe0, 0xa1, 0x59, 0xad, 0x5e, 0xb3, -- 0xee, 0xd0, 0xb8, 0xb9, 0xa4, 0xe6, 0xeb, 0xfd, 0xd3, 0x40, 0xd1, 0x85, -- 0x22, 0xe9, 0x8d, 0x7a, 0xfc, 0x1c, 0x2b, 0x3a, 0x28, 0x5a, 0x2d, 0xb6, -- 0xbf, 0xfb, 0xbe, 0x57, 0x51, 0x6a, 0xf0, 0x49, 0x96, 0x8d, 0x10, 0x20, -- 0x5f, 0xe8, 0x7d, 0x02, 0xfb, 0x13, 0x8a, 0x0d, 0x4c, 0x27, 0x29, 0x1c, -- 0xa1, 0x7a, 0x0b, 0x41, 0xe6, 0x42, 0x5b, 0xb9, 0x46, 0x43, 0xd1, 0xde, -- 0x7c, 0x4c, 0x34, 0x89, 0x43, 0xb3, 0x55, 0xb4, 0x1c, 0x08, 0x1e, 0xe3, -- 0x04, 0xe5, 0x7b, 0x9b, 0x80, 0xf0, 0x67, 0x1a, 0x7c, 0x5a, 0xdd, 0x10, -- 0x2b, 0x15, 0x07, 0x3e, 0xf5, 0x9e, 0xab, 0x0b, 0x9c, 0x8d, 0x3e, 0xb9, -- 0x04, 0xd2, 0xb0, 0xf9, 0x09, 0x90, 0x48, 0x8d, 0x0d, 0x93, 0x2b, 0x88, -- 0x35, 0xce, 0x69, 0x95, 0x09, 0x80, 0x61, 0x72, 0x71, 0x57, 0x88, 0x8a, -- 0x51, 0x59, 0x78, 0xad, 0x84, 0xa2, 0x56, 0xcb, 0x5c, 0xa4, 0x48, 0xda, -- 0x3c, 0xf0, 0x83, 0xa0, 0x66, 0x67, 0xcf, 0x59, 0xbe, 0x5e, 0x3b, 0xbf, -- 0xe7, 0xf9, 0xeb, 0x6f, 0x13, 0x4e, 0xad, 0xe7, 0x3e, 0x0e, 0x18, 0x6e, -- 0x9f, 0x43, 0x18, 0x66, 0xd0, 0xfe, 0xbe, 0x5e, 0xf2, 0x79, 0x3f, 0xb8, -- 0x4e, 0x17, 0xac, 0x00, 0xed, 0x6c, 0xb3, 0xb9, 0xe4, 0x7b, 0x4b, 0xd2, -- 0xe3, 0x83, 0x6a, 0x25, 0xc1, 0xab, 0x5e, 0x60, 0x49, 0x99, 0x70, 0x45, -- 0x6f, 0xd6, 0x80, 0x9a, 0x46, 0x5a, 0xba, 0x3e, 0xab, 0x2d, 0x01, 0xd9, -- 0xaf, 0x88, 0x34, 0xca, 0x6a, 0x72, 0xb3, 0x35, 0xa6, 0x1f, 0x4f, 0xb6, -- 0xb7, 0x80, 0xa9, 0x59, 0xc3, 0xa6, 0xc9, 0x34, 0xb9, 0xbb, 0xfb, 0xec, -- 0x59, 0x3f, 0xe9, 0xb1, 0x95, 0xd1, 0x3a, 0xe0, 0x23, 0x41, 0x27, 0xab, -- 0xd7, 0x55, 0xbc, 0x74, 0xab, 0xbc, 0x1c, 0xf3, 0xff, 0xf8, 0x35, 0x2b, -- 0x41, 0x78, 0xa1, 0x59, 0x37, 0x58, 0x87, 0x79, 0x08, 0x93, 0x23, 0x64, -- 0xc5, 0xdf, 0x1d, 0x39, 0x3b, 0x12, 0x3b, 0x8d, 0x16, 0x59, 0xb1, 0x30, -- 0xef, 0xf0, 0x4c, 0xcb, 0x77, 0xa0, 0xfb, 0xc0, 0xa5, 0x06, 0x7f, 0xbe, -- 0x84, 0xc3, 0x29, 0x1e, 0x42, 0xb5, 0x1c, 0x0d, 0x34, 0x31, 0x58, 0xb4, -- 0xca, 0x9c, 0x4e, 0x2e, 0xfd, 0x39, 0x35, 0x73, 0x7d, 0xc4, 0x91, 0xbf, -- 0x4a, 0x7a, 0x4a, 0x5b, 0xfc, 0xcf, 0x10, 0xce, 0xdd, 0x6c, 0xcc, 0xd3, -- 0x28, 0x5e, 0xe9, 0x1f, 0xff, 0xf6, 0x6f, 0xd4, 0xec, 0xbf, 0x71, 0x2b, -- 0xaf, 0xfe, 0xb5, 0xaa, 0xaf, 0x83, 0x67, 0x7a, 0x4a, 0xf0, 0x47, 0xde, -- 0xb5, 0x8d, 0x70, 0x35, 0x20, 0xce, 0x22, 0x7f, 0xed, 0xed, 0xb1, 0x72, -- 0xe4, 0x7e, 0x30, 0xbf, 0x1c, 0x99, 0x85, 0x62, 0x24, 0x75, 0xd1, 0x22, -- 0x5f, 0xb1, 0xdb, 0x39, 0xe3, 0x8c, 0x74, 0xba, 0x48, 0x00, 0x28, 0xb8, -- 0x69, 0x22, 0xc6, 0xe1, 0xbb, 0xef, 0x8e, 0xce, 0x4e, 0xde, 0xbd, 0x3d, -- 0x7c, 0x77, 0x91, 0x7c, 0xb7, 0x7f, 0x76, 0xb4, 0xff, 0xd5, 0xb1, 0x26, -- 0xbe, 0xf3, 0x14, 0x38, 0xc8, 0x47, 0x64, 0xef, 0x16, 0x20, 0x6c, 0x90, -- 0x88, 0xd4, 0x59, 0xda, 0xa3, 0x55, 0x83, 0xf6, 0x83, 0x22, 0x8c, 0x43, -- 0x13, 0xf9, 0x80, 0x2a, 0x45, 0x7d, 0x16, 0x3e, 0x3f, 0x58, 0xc1, 0x22, -- 0x56, 0x9e, 0xee, 0x83, 0x54, 0x6a, 0x8e, 0x3f, 0x62, 0x2a, 0x35, 0xfe, -- 0xe4, 0x2b, 0xd7, 0xb9, 0xda, 0x17, 0x5f, 0x4b, 0x36, 0xbe, 0x15, 0x02, -- 0xb1, 0x57, 0x35, 0x33, 0x0c, 0x76, 0x37, 0x37, 0x86, 0xfd, 0xe3, 0x63, -- 0xdf, 0xd5, 0xc3, 0x35, 0x62, 0x14, 0x89, 0x49, 0x92, 0xb7, 0xd0, 0x28, -- 0x3b, 0x06, 0xaf, 0x0a, 0x0f, 0x97, 0x3e, 0xbf, 0x0f, 0x91, 0xd1, 0xb9, -- 0x33, 0xda, 0x8e, 0x0d, 0x81, 0xd0, 0x60, 0x2f, 0x31, 0x1d, 0xa0, 0xbc, -- 0xba, 0xe9, 0x27, 0xeb, 0xff, 0xba, 0x2e, 0x49, 0x75, 0x19, 0x70, 0x83, -- 0xa5, 0x02, 0xcd, 0xa6, 0x1f, 0xd4, 0xbb, 0x13, 0x3f, 0x26, 0x75, 0x7c, -- 0xba, 0x01, 0xb8, 0x17, 0xbd, 0xdb, 0xba, 0x32, 0x79, 0x06, 0xf1, 0xa2, -- 0xfe, 0x71, 0x2d, 0xd3, 0xe0, 0x90, 0x01, 0x94, 0x46, 0xd9, 0xb1, 0xd5, -- 0xf9, 0x2e, 0xb4, 0xb6, 0x74, 0x1c, 0xc0, 0x43, 0x63, 0xae, 0x73, 0x36, -- 0x75, 0xb8, 0xd2, 0x59, 0x66, 0x0d, 0xa4, 0xa5, 0x66, 0x9b, 0x9e, 0xba, -- 0x13, 0x97, 0x95, 0x72, 0x50, 0x50, 0xd5, 0xc7, 0x2d, 0xab, 0x44, 0x03, -- 0x1f, 0x23, 0xe7, 0x03, 0x94, 0xf9, 0x44, 0xe1, 0x06, 0x3b, 0xa9, 0x62, -- 0x08, 0xd7, 0xd4, 0xd9, 0x01, 0xd0, 0xd9, 0xe7, 0x5c, 0x42, 0xd0, 0x57, -- 0xba, 0x40, 0xec, 0x30, 0x71, 0x91, 0x92, 0x13, 0xf2, 0xe6, 0x2a, 0x84, -- 0x20, 0x1e, 0x17, 0x32, 0x7a, 0x7a, 0x55, 0x98, 0xfc, 0x9d, 0x3a, 0xa7, -- 0xb9, 0xab, 0x07, 0x16, 0xc8, 0xf4, 0x0e, 0x43, 0xcc, 0x99, 0x2c, 0xe1, -- 0x5e, 0x37, 0x07, 0x01, 0x87, 0x97, 0xf1, 0x96, 0x5b, 0xb9, 0xde, 0x2a, -- 0xc8, 0xd2, 0xf6, 0xd9, 0x0b, 0xcc, 0x4b, 0x24, 0x48, 0xdf, 0x40, 0xbd, -- 0x00, 0xa4, 0x66, 0x59, 0xdd, 0x08, 0x74, 0xc4, 0xb0, 0xf8, 0x41, 0x34, -- 0xa9, 0x31, 0xab, 0x68, 0xd2, 0x6c, 0xd7, 0x74, 0x7a, 0xa6, 0x9c, 0x40, -- 0x66, 0x9c, 0x28, 0x4d, 0x46, 0xf9, 0x95, 0xa0, 0x03, 0x70, 0x2a, 0x3a, -- 0x53, 0x09, 0xc0, 0xde, 0x48, 0xb1, 0xe7, 0xad, 0x02, 0x94, 0x1b, 0x64, -- 0xf7, 0xeb, 0x62, 0x1a, 0xe2, 0x8d, 0xd9, 0x4c, 0x2a, 0xad, 0x74, 0x66, -- 0xa6, 0x4f, 0xb8, 0x3e, 0x96, 0xbc, 0x8e, 0x16, 0x8d, 0xa6, 0x40, 0xe5, -- 0x1a, 0x9b, 0xc7, 0x36, 0x75, 0xa0, 0x26, 0xce, 0x91, 0x09, 0x64, 0x59, -- 0xd5, 0x58, 0x07, 0x8b, 0x5b, 0x66, 0x6e, 0x01, 0x3b, 0x1a, 0xd7, 0x2b, -- 0xdc, 0x70, 0x48, 0xe3, 0xdc, 0xca, 0x58, 0xb0, 0x5a, 0x99, 0xe8, 0xc5, -- 0xa3, 0xdc, 0x2c, 0xd7, 0xa3, 0x9b, 0xa5, 0x28, 0x5a, 0x44, 0x13, 0x3c, -- 0x68, 0x5a, 0xa9, 0x8d, 0x80, 0xf1, 0xcc, 0x89, 0x44, 0xe4, 0x31, 0x51, -- 0x20, 0xf5, 0xaf, 0x81, 0xab, 0x34, 0xa6, 0x7e, 0xe7, 0x4d, 0x1f, 0x77, -- 0x20, 0x52, 0x00, 0x53, 0xeb, 0x58, 0x4b, 0x22, 0xc2, 0x43, 0xcf, 0x75, -- 0x1b, 0x01, 0x0d, 0xd5, 0xb0, 0x3d, 0x26, 0x96, 0x6f, 0x33, 0x9d, 0x06, -- 0x50, 0xe3, 0x62, 0x8e, 0x48, 0x23, 0xd9, 0x83, 0x9d, 0x43, 0x92, 0x86, -- 0xaa, 0x91, 0x3f, 0x02, 0x4b, 0x1c, 0x4c, 0x44, 0x63, 0xca, 0x59, 0x3a, -- 0x6b, 0x99, 0x34, 0x03, 0x86, 0x66, 0xde, 0xf1, 0xf0, 0x62, 0xd2, 0x6a, -- 0x17, 0x79, 0x3a, 0x13, 0xd9, 0xd1, 0x53, 0xdf, 0xec, 0x5e, 0xa2, 0x0e, -- 0xd7, 0xd6, 0x0e, 0xde, 0x9f, 0x5f, 0x9c, 0xbc, 0x4d, 0x4e, 0xde, 0x5f, -- 0x9c, 0xbe, 0xbf, 0xd0, 0x9b, 0x6b, 0x24, 0x31, 0xdb, 0x12, 0xb9, 0x20, -- 0x42, 0x80, 0x6d, 0xe6, 0x4c, 0xfd, 0xfb, 0x08, 0x31, 0x29, 0x00, 0x30, -- 0x18, 0x60, 0x0b, 0xb9, 0x9c, 0x2c, 0xa0, 0x6e, 0x09, 0x72, 0x31, 0x96, -- 0xfc, 0x8e, 0x96, 0x1c, 0xf9, 0xb4, 0x30, 0xe4, 0x59, 0x8a, 0x17, 0xd4, -- 0x1e, 0x3b, 0x6b, 0xcd, 0x4a, 0x32, 0xad, 0x42, 0x98, 0x70, 0xce, 0x37, -- 0xb1, 0x9c, 0x7c, 0x1c, 0x95, 0xd9, 0x76, 0xbc, 0xe9, 0x27, 0x0c, 0xe9, -- 0x44, 0x30, 0xd3, 0xb8, 0x36, 0x03, 0xb4, 0x45, 0xd5, 0x22, 0xd4, 0xa8, -- 0x99, 0x58, 0x18, 0xe6, 0x37, 0xd6, 0x05, 0xcd, 0xf0, 0xda, 0x45, 0xc4, -- 0x73, 0x14, 0x11, 0x22, 0x01, 0x25, 0x80, 0x82, 0x43, 0xee, 0x44, 0x63, -- 0x20, 0x3d, 0x90, 0x5d, 0x16, 0xd1, 0x2d, 0x7b, 0x97, 0xac, 0x7f, 0x9f, -- 0x85, 0x0d, 0xfe, 0xe9, 0xdf, 0x39, 0x6d, 0xf3, 0x83, 0x7d, 0xf2, 0x9f, -- 0xd2, 0xe5, 0xcf, 0xf3, 0x75, 0x04, 0xd0, 0x35, 0x3d, 0xe5, 0xdf, 0x1e, -- 0x9e, 0x7d, 0x75, 0x78, 0x76, 0x72, 0x0e, 0x7e, 0x60, 0xe6, 0xae, 0x98, -- 0xd6, 0x6f, 0xb2, 0x72, 0x94, 0x95, 0x85, 0x56, 0xb9, 0xb2, 0xbf, 0x9e, -- 0x6d, 0x7d, 0x7d, 0x7e, 0xbe, 0x7f, 0x7a, 0xe4, 0xea, 0xc8, 0xb8, 0x04, -- 0x32, 0x51, 0x91, 0xe6, 0x92, 0xe2, 0xc8, 0xf3, 0xb7, 0x57, 0x88, 0x2e, -- 0xc6, 0x37, 0x12, 0x58, 0x1c, 0xf9, 0xa4, 0xcd, 0xae, 0xce, 0xce, 0x68, -- 0xcd, 0x2b, 0xe4, 0x86, 0x0d, 0x13, 0x2a, 0xc4, 0x9d, 0x17, 0x80, 0x78, -- 0xf6, 0x05, 0xf4, 0x5d, 0x04, 0xde, 0x4d, 0x39, 0x1a, 0x10, 0xb5, 0xdf, -- 0x58, 0x95, 0x61, 0xc9, 0x83, 0x20, 0x56, 0x29, 0x01, 0xd2, 0xde, 0xd6, -- 0x70, 0xc3, 0x05, 0xc7, 0xb7, 0x6e, 0xf8, 0x7c, 0x70, 0x8d, 0x93, 0xe9, -- 0x50, 0xb8, 0xbb, 0x1c, 0x28, 0x8b, 0x7a, 0x65, 0x16, 0xfb, 0x10, 0x4e, -- 0x05, 0xf5, 0xe6, 0x0a, 0x13, 0x8a, 0xbd, 0x8b, 0x3e, 0x79, 0xea, 0x00, -- 0xbb, 0xc2, 0x5a, 0xd4, 0x97, 0x24, 0x80, 0x2f, 0xee, 0x26, 0x7a, 0x89, -- 0x00, 0xaf, 0x7a, 0x2e, 0xee, 0x09, 0xe1, 0xe1, 0x6d, 0x07, 0x15, 0x17, -- 0x4f, 0x44, 0xc2, 0x86, 0x86, 0xa3, 0x27, 0xa3, 0x69, 0x3a, 0xbf, 0xc1, -- 0x6d, 0x86, 0xfb, 0x89, 0x55, 0x4e, 0x83, 0xa1, 0xe2, 0xa2, 0x96, 0xf0, -- 0x47, 0x2a, 0x32, 0x04, 0x84, 0xc0, 0x29, 0x33, 0xb7, 0x7b, 0xb1, 0xe5, -- 0x3b, 0xb4, 0xad, 0xc0, 0xf3, 0x86, 0xe3, 0xe4, 0x17, 0x81, 0x4d, 0x47, -- 0x87, 0xc7, 0x74, 0x31, 0xb9, 0x24, 0x13, 0xa8, 0xe8, 0xd9, 0x94, 0x4d, -- 0xc1, 0x16, 0x11, 0x24, 0x79, 0x95, 0x39, 0x18, 0x99, 0x70, 0x0f, 0x83, -- 0x52, 0x87, 0xff, 0x08, 0xe4, 0x82, 0xf4, 0xd1, 0xca, 0x15, 0x1c, 0x51, -- 0xce, 0x2d, 0x4c, 0x0c, 0x38, 0xa1, 0xbe, 0xfe, 0x48, 0x58, 0x9d, 0x46, -- 0xc3, 0xed, 0x0e, 0x7c, 0x3c, 0x90, 0x2b, 0xd7, 0x25, 0x83, 0xf0, 0x62, -- 0xa9, 0xf3, 0x30, 0x36, 0xb2, 0x5b, 0x56, 0x6e, 0x93, 0xbc, 0xde, 0x65, -- 0x04, 0x10, 0x78, 0xb3, 0x89, 0xfa, 0x3b, 0x1c, 0x32, 0x90, 0x85, 0x2c, -- 0x37, 0xc3, 0x84, 0x6d, 0xe0, 0x12, 0x0d, 0xc0, 0xc6, 0xdb, 0x69, 0x6d, -- 0x4e, 0x43, 0x84, 0xb8, 0xea, 0x0d, 0x5c, 0x4f, 0xc0, 0x72, 0xca, 0x06, -- 0x68, 0x6d, 0x18, 0x9d, 0x2b, 0xe0, 0x15, 0xb0, 0x0d, 0x4a, 0xbe, 0x06, -- 0xb4, 0x18, 0x27, 0xdf, 0x0e, 0xde, 0xf1, 0x75, 0x51, 0x0c, 0x46, 0x4b, -- 0xe8, 0x65, 0x41, 0x19, 0x2d, 0xc9, 0xe1, 0xe4, 0x7a, 0xf3, 0xc0, 0x55, -- 0xc3, 0xf7, 0xec, 0x8f, 0x42, 0x76, 0xbc, 0xb8, 0xa8, 0x90, 0x2e, 0xd9, -- 0xc4, 0xdc, 0x71, 0x48, 0x2b, 0x92, 0x83, 0x80, 0x58, 0x6c, 0x2b, 0xbc, -- 0x26, 0x23, 0xd4, 0x4d, 0x76, 0xd1, 0x82, 0x73, 0xad, 0xbd, 0x0a, 0xcf, -- 0x4a, 0x33, 0xe2, 0xba, 0x76, 0xd0, 0xf7, 0x17, 0x10, 0x13, 0x32, 0x05, -- 0x84, 0xb7, 0x50, 0x6a, 0x4b, 0xdc, 0xb8, 0xad, 0xb9, 0xf0, 0x93, 0x80, -- 0x44, 0xa4, 0x53, 0xa9, 0xd8, 0xb1, 0xf2, 0x2a, 0x91, 0xc3, 0x54, 0x5f, -- 0x5c, 0xfc, 0x78, 0x7a, 0xf8, 0xca, 0xde, 0x7c, 0x68, 0xcf, 0x04, 0x3b, -- 0x0d, 0x31, 0x33, 0x99, 0x62, 0x95, 0x06, 0x95, 0x9c, 0x89, 0xc8, 0x06, -- 0xb5, 0xf9, 0xf2, 0xa5, 0x9b, 0x41, 0xf2, 0xc3, 0xeb, 0xa3, 0xf3, 0xd3, -- 0xe3, 0x93, 0x83, 0x57, 0x2f, 0x7f, 0x30, 0x96, 0xfc, 0x05, 0xbb, 0x08, -- 0x44, 0x4e, 0x73, 0x9f, 0x79, 0x6c, 0x07, 0x7d, 0xef, 0xdd, 0xe1, 0xf7, -- 0x1f, 0x48, 0x3b, 0x78, 0xc5, 0x08, 0xef, 0xfd, 0xdb, 0x74, 0xaa, 0x2f, -- 0xb1, 0x8a, 0xd5, 0x21, 0xdb, 0x0d, 0x9b, 0x60, 0x7c, 0xed, 0x85, 0x75, -- 0xd5, 0x43, 0x7d, 0x9e, 0xc2, 0xbd, 0x85, 0xd1, 0x05, 0x85, 0xa2, 0xd2, -- 0x46, 0x5a, 0x6d, 0x47, 0x89, 0x5f, 0x7f, 0xfd, 0xaf, 0xd7, 0x12, 0x53, -- 0xc9, 0x21, 0x04, 0xa1, 0x67, 0x1e, 0x71, 0xab, 0xfa, 0x8d, 0x8f, 0xe7, -- 0x55, 0x24, 0xe5, 0x92, 0x03, 0x58, 0x1c, 0x14, 0xa5, 0xd6, 0x59, 0x86, -- 0xcf, 0x5b, 0xf1, 0x2a, 0x15, 0x84, 0x89, 0x43, 0x68, 0x2d, 0x9a, 0xde, -- 0xf8, 0x98, 0x8a, 0x30, 0x6e, 0x2c, 0xa9, 0x95, 0xb2, 0x45, 0x6d, 0x9e, -- 0xd3, 0xc3, 0xb3, 0xf3, 0xa3, 0xf3, 0x0b, 0x56, 0xa3, 0xb4, 0xae, 0xa2, -- 0xda, 0xa0, 0xad, 0xe8, 0x25, 0x30, 0x1b, 0x9a, 0xd0, 0xa3, 0x61, 0xdd, -- 0x90, 0xc6, 0x89, 0x76, 0x6c, 0xae, 0x99, 0xc4, 0xc9, 0x37, 0x80, 0x64, -- 0x86, 0xb2, 0x20, 0x2a, 0x00, 0xba, 0xe9, 0xa5, 0x1d, 0xe0, 0x42, 0x49, -- 0xa3, 0x55, 0x3e, 0x03, 0xa5, 0x6f, 0xb0, 0x3b, 0xd3, 0x7c, 0xe4, 0xad, -- 0xe6, 0x2d, 0x17, 0x32, 0x47, 0x27, 0x28, 0x58, 0x47, 0x78, 0x84, 0xcc, -- 0x1e, 0xee, 0x33, 0xa3, 0xb5, 0xd4, 0xae, 0x5e, 0x6b, 0x9a, 0xd5, 0x18, -- 0xe6, 0xaf, 0x3a, 0x45, 0x15, 0xca, 0x89, 0xc9, 0x69, 0xee, 0xd3, 0x20, -- 0x08, 0x55, 0xf1, 0x9f, 0x00, 0x5d, 0xab, 0x2c, 0x9b, 0x99, 0x72, 0x2e, -- 0x99, 0x68, 0x6c, 0x68, 0x21, 0xa9, 0x05, 0x99, 0xf5, 0x88, 0x13, 0xd2, -- 0x99, 0x45, 0x22, 0x88, 0x8a, 0x8e, 0x57, 0x9c, 0xc2, 0x06, 0x90, 0xad, -- 0x09, 0xcb, 0x5b, 0xb0, 0xc0, 0x85, 0x9d, 0xd9, 0x75, 0xca, 0x2b, 0x38, -- 0x5a, 0x86, 0x85, 0xda, 0xdc, 0xe8, 0xa5, 0x3e, 0x09, 0x16, 0x1e, 0x11, -- 0x92, 0x69, 0x09, 0x14, 0xcb, 0x5a, 0x41, 0xe3, 0x4d, 0xf1, 0xd1, 0x70, -- 0xc7, 0x61, 0x13, 0xcf, 0xc7, 0xe8, 0xd2, 0x8a, 0x89, 0x3e, 0xb4, 0xa2, -- 0x41, 0x65, 0x47, 0x26, 0xdf, 0x32, 0xb3, 0xb8, 0x25, 0x31, 0x33, 0x54, -- 0xec, 0x70, 0x98, 0x8f, 0xdd, 0x65, 0xcc, 0x49, 0x47, 0xec, 0x5f, 0x2c, -- 0x15, 0x2b, 0x89, 0xd8, 0x1f, 0x5b, 0x96, 0x51, 0x0e, 0x12, 0x75, 0x92, -- 0xd9, 0xeb, 0x66, 0x38, 0x7a, 0x3e, 0x8c, 0x5b, 0x96, 0x3b, 0x20, 0x2b, -- 0x31, 0xaf, 0xdf, 0x6b, 0x87, 0x2e, 0x41, 0xde, 0x36, 0xab, 0x2f, 0xf9, -- 0x56, 0x29, 0xd2, 0x7b, 0xcc, 0xae, 0x1b, 0xa4, 0x89, 0x56, 0x9a, 0x7c, -- 0xeb, 0xdc, 0xd3, 0x60, 0x78, 0x8d, 0x9a, 0xb8, 0x3c, 0xbb, 0x86, 0x6b, -- 0x90, 0xe4, 0xcb, 0x05, 0x8a, 0x29, 0x8d, 0x15, 0x4d, 0x1e, 0x41, 0xbb, -- 0xae, 0x41, 0xbb, 0x44, 0xfc, 0x62, 0xd1, 0xaa, 0xbe, 0x7d, 0x7f, 0x7c, -- 0x71, 0x74, 0x1a, 0xba, 0x1f, 0x93, 0xef, 0x8f, 0x2e, 0xbe, 0x21, 0xa9, -- 0xfd, 0xfc, 0xe8, 0xdd, 0xd7, 0xc7, 0xec, 0xe3, 0x79, 0xfb, 0x76, 0xff, -- 0x1d, 0xa3, 0x0b, 0xbc, 0x43, 0x64, 0xe3, 0x3e, 0x14, 0x07, 0x66, 0x47, -- 0xb4, 0xc4, 0x4c, 0x3b, 0x9c, 0x77, 0xde, 0x8f, 0x5d, 0x0d, 0xad, 0xe3, -- 0x27, 0x35, 0x8f, 0xe7, 0xcd, 0x45, 0xe2, 0x1d, 0x57, 0xcd, 0xe0, 0x9e, -- 0x0d, 0x3b, 0x38, 0xb6, 0xac, 0x6c, 0xf1, 0x42, 0xb7, 0x61, 0xe4, 0x91, -- 0xe3, 0x28, 0x12, 0x3a, 0xdc, 0xe8, 0x72, 0x77, 0x7b, 0xf7, 0x05, 0x76, -- 0xd4, 0x81, 0xd0, 0x42, 0x8f, 0x21, 0x99, 0x69, 0xae, 0x7a, 0x8d, 0xdc, -- 0x97, 0xcd, 0x9c, 0x03, 0xea, 0x11, 0x43, 0x42, 0x1c, 0x41, 0xe1, 0x2d, -- 0x82, 0xac, 0x71, 0xb2, 0xd2, 0x7c, 0x76, 0x1c, 0x5e, 0xa8, 0xcd, 0x32, -- 0xf4, 0x16, 0x1e, 0x78, 0x55, 0x64, 0xfe, 0xe4, 0x0e, 0x4e, 0xac, 0x19, -- 0x33, 0xff, 0x42, 0x0d, 0x93, 0xcb, 0x65, 0xc0, 0x7c, 0x6d, 0x40, 0x5b, -- 0xb2, 0xe9, 0x2a, 0x0e, 0xa9, 0xf9, 0x6c, 0x4f, 0xc4, 0x4a, 0x07, 0xb3, -- 0x6c, 0xc5, 0xf3, 0xa8, 0x39, 0x6b, 0x59, 0x43, 0x51, 0x10, 0x8f, 0xad, -- 0x69, 0x4d, 0x3a, 0x67, 0x70, 0x4b, 0x7b, 0xac, 0x91, 0x95, 0x2d, 0xf7, -- 0xdd, 0x89, 0x99, 0xf6, 0x2c, 0xad, 0x0d, 0xc9, 0xac, 0x0c, 0xbf, 0xe3, -- 0x3d, 0xa7, 0x28, 0xb2, 0x56, 0x14, 0xc3, 0xec, 0x63, 0xc6, 0x4e, 0x4e, -- 0xfe, 0xf5, 0xaf, 0x8b, 0xab, 0x30, 0xe3, 0x4d, 0xca, 0x3e, 0x2f, 0xba, -- 0x76, 0x56, 0x31, 0x9d, 0x45, 0x2c, 0xd2, 0x52, 0x73, 0x8d, 0x11, 0x68, -- 0xfd, 0xb8, 0x9d, 0x55, 0x1d, 0xea, 0xf7, 0xbb, 0xf1, 0xf7, 0xbb, 0x62, -- 0x76, 0x3c, 0x3a, 0xbd, 0x7d, 0xee, 0xb0, 0x50, 0x25, 0x8f, 0x3b, 0x14, -- 0xdf, 0x4c, 0x28, 0x60, 0x0a, 0xe3, 0x47, 0xe5, 0xce, 0x49, 0x85, 0x27, -- 0x8a, 0xed, 0x9f, 0x23, 0xc8, 0x96, 0x25, 0xf2, 0x53, 0xf1, 0x08, 0xcc, -- 0xc4, 0x12, 0xf6, 0x8b, 0x20, 0x3b, 0xf0, 0x29, 0xbe, 0xae, 0xa8, 0x41, -- 0xfa, 0xfe, 0xa9, 0x8b, 0xc5, 0xf7, 0x3c, 0x0d, 0xe5, 0xda, 0x34, 0x1b, -- 0x6a, 0x90, 0x2f, 0x6e, 0xad, 0x06, 0x2f, 0xfd, 0xfa, 0xdc, 0x95, 0xea, -- 0xa9, 0x1a, 0x3e, 0xaa, 0x06, 0xee, 0xb0, 0x31, 0x7f, 0x0c, 0x0e, 0x61, -- 0x91, 0xcc, 0x19, 0xbc, 0x92, 0xd1, 0x1a, 0x57, 0xd6, 0x0c, 0xc8, 0x0e, -- 0x8a, 0x88, 0xc2, 0xc0, 0x3c, 0x45, 0x66, 0x2c, 0xf8, 0x51, 0xc0, 0x5c, -- 0x42, 0xcc, 0x7f, 0xdd, 0xf5, 0x9f, 0x76, 0xb7, 0xb7, 0x77, 0xf6, 0x76, -- 0x3e, 0x7f, 0xb1, 0xbd, 0xb7, 0xb3, 0xb3, 0xb3, 0xbb, 0xb7, 0xb3, 0xb7, -- 0xb7, 0xbb, 0xfd, 0xcb, 0x16, 0xdb, 0x8f, 0x6e, 0xf3, 0xec, 0xce, 0x1c, -- 0x53, 0x92, 0x8b, 0x07, 0xb2, 0x96, 0x5a, 0xea, 0xaa, 0xc1, 0xab, 0x9e, -- 0x6b, 0x92, 0x8f, 0x43, 0x95, 0x90, 0x90, 0x79, 0x01, 0x93, 0x5b, 0xf8, -- 0x4c, 0x53, 0x9c, 0xc1, 0x00, 0xf0, 0x1a, 0xa3, 0xfa, 0xdb, 0x92, 0x67, -- 0x3a, 0x62, 0x71, 0x00, 0x32, 0x4d, 0xe5, 0xf2, 0xfa, 0xae, 0xa6, 0xc5, -- 0x68, 0x84, 0xcc, 0x05, 0x97, 0xda, 0x3a, 0x4c, 0x18, 0x55, 0xf5, 0x46, -- 0x48, 0x42, 0x3d, 0x07, 0x08, 0x2a, 0x94, 0x83, 0xee, 0x57, 0x47, 0x04, -- 0x2f, 0x0d, 0xa4, 0x1e, 0x17, 0x5c, 0x61, 0x60, 0xc2, 0x4c, 0x89, 0x16, -- 0xa9, 0x74, 0x29, 0x2f, 0xc9, 0x65, 0xf6, 0xf9, 0xf6, 0xde, 0x1e, 0x17, -- 0x01, 0xf9, 0xd3, 0x4e, 0x5f, 0xe3, 0x41, 0xc3, 0x20, 0xf7, 0xbe, 0xbb, -- 0x9e, 0xa4, 0x0d, 0x56, 0x3f, 0xc2, 0x79, 0xce, 0x97, 0xb3, 0xac, 0x54, -- 0x45, 0x04, 0x17, 0xa2, 0x80, 0xff, 0x30, 0x31, 0xda, 0x90, 0xdd, 0xb3, -- 0x28, 0x6c, 0x03, 0xbb, 0xbc, 0xa4, 0xa6, 0xf8, 0xdb, 0x53, 0xcf, 0x39, -- 0x8e, 0xca, 0x5c, 0xca, 0x87, 0xf2, 0xc3, 0x90, 0xc8, 0x81, 0x68, 0x52, -- 0xdc, 0x84, 0xc2, 0xaa, 0xe6, 0xe3, 0xfc, 0x14, 0x0c, 0x7e, 0xf7, 0xd9, -- 0xce, 0x2f, 0x12, 0x7e, 0xc8, 0x04, 0xee, 0x57, 0x41, 0x0b, 0xbd, 0x4d, -- 0xc2, 0x8c, 0x0b, 0x23, 0x8c, 0x8d, 0x6c, 0x78, 0x35, 0x34, 0x29, 0x41, -- 0xad, 0x87, 0xfd, 0x30, 0x08, 0x5c, 0x10, 0xc8, 0xa5, 0x2c, 0x30, 0xf4, -- 0x2e, 0x33, 0x10, 0x99, 0x81, 0x57, 0x8c, 0x93, 0x8d, 0x8a, 0x3d, 0x74, -- 0x63, 0x1c, 0x5e, 0xec, 0xd3, 0x65, 0xf0, 0x6d, 0xac, 0xb8, 0xbf, 0xcd, -- 0x48, 0xcb, 0xe6, 0xcd, 0xdb, 0x00, 0x7d, 0xdf, 0x3a, 0xdc, 0x5f, 0x5e, -- 0xbd, 0xa7, 0xc9, 0x06, 0xfb, 0x20, 0x9e, 0x7d, 0xfe, 0xec, 0xe9, 0xa6, -- 0x14, 0x59, 0x90, 0xd7, 0x32, 0xce, 0xf7, 0x80, 0x95, 0x51, 0xc1, 0x66, -- 0xd8, 0x3c, 0xec, 0x58, 0xcc, 0xfb, 0xb3, 0x23, 0x39, 0xa2, 0xd7, 0x82, -- 0x09, 0x20, 0x4a, 0x6c, 0x1b, 0x27, 0x0e, 0xf7, 0x67, 0x20, 0x34, 0xcc, -- 0x72, 0xc6, 0x30, 0x44, 0x2e, 0x35, 0x5f, 0x74, 0x2e, 0x97, 0x1f, 0x37, -- 0x26, 0x1d, 0xb8, 0x02, 0xa5, 0x07, 0xb5, 0xa2, 0x13, 0x06, 0x03, 0xd0, -- 0x43, 0xc6, 0x5c, 0x55, 0xba, 0x71, 0x1a, 0x15, 0xeb, 0x35, 0xc2, 0x5f, -- 0x84, 0x9b, 0xb7, 0x70, 0xb6, 0x37, 0xc5, 0x83, 0x0f, 0x21, 0x8f, 0xc9, -- 0x8a, 0x1e, 0xb4, 0x50, 0x50, 0x1e, 0x71, 0x23, 0xbb, 0xcc, 0x4b, 0x8f, -- 0x01, 0x46, 0x93, 0xc1, 0xb3, 0x28, 0x6b, 0x71, 0x4b, 0x28, 0xee, 0xe9, -- 0x1a, 0x96, 0xc2, 0xbc, 0x61, 0xc2, 0xd1, 0xdc, 0x78, 0xe4, 0xa8, 0x23, -- 0x84, 0x78, 0x46, 0xd7, 0x4b, 0x79, 0xaf, 0x12, 0x33, 0xc4, 0x7e, 0x57, -- 0x29, 0xad, 0xe5, 0xe0, 0x17, 0x14, 0x88, 0x30, 0x32, 0xde, 0x81, 0xa0, -- 0x98, 0x12, 0xdc, 0x18, 0x40, 0x83, 0x8d, 0x0f, 0x66, 0xf6, 0x55, 0x10, -- 0xff, 0x12, 0xa6, 0x8b, 0xd9, 0xef, 0xf6, 0x5c, 0x10, 0x1a, 0x99, 0xb6, -- 0x27, 0xb6, 0x62, 0x68, 0x82, 0x95, 0x89, 0x70, 0x28, 0xa7, 0xcd, 0x6c, -- 0x60, 0x24, 0x5b, 0x5b, 0x9b, 0x2b, 0x46, 0xa3, 0x5f, 0x77, 0xf5, 0x7e, -- 0x0a, 0x8c, 0x91, 0x20, 0x43, 0x93, 0xf6, 0xbc, 0xd9, 0x38, 0x2f, 0x6d, -- 0x5e, 0xf1, 0x4e, 0x4e, 0x34, 0xce, 0x55, 0xcc, 0xa2, 0xa6, 0x2e, 0xc9, -- 0xe0, 0x8d, 0x19, 0x35, 0x27, 0xa1, 0xa1, 0x35, 0x86, 0xf9, 0x24, 0x35, -- 0x9c, 0xc5, 0x5d, 0x39, 0x4c, 0xf6, 0x99, 0x1a, 0x1a, 0x1d, 0x07, 0x43, -- 0x36, 0xfb, 0xac, 0x21, 0x9a, 0x9b, 0x50, 0xea, 0xcc, 0x73, 0xfd, 0xe0, -- 0x4b, 0x13, 0xdb, 0x2c, 0xc5, 0xdf, 0x19, 0x6f, 0x47, 0x99, 0xc0, 0x99, -- 0x38, 0x4e, 0x18, 0x20, 0x15, 0xe7, 0xf3, 0x46, 0x09, 0x50, 0x6d, 0x04, -- 0x8e, 0x6b, 0x37, 0x09, 0x80, 0x20, 0x96, 0x06, 0xae, 0x1b, 0x96, 0x05, -- 0x04, 0xa2, 0x80, 0x06, 0xa9, 0x8b, 0xa0, 0xec, 0x88, 0x58, 0xbc, 0xa7, -- 0x23, 0x21, 0xaf, 0xc6, 0x7a, 0xf4, 0x85, 0xe2, 0x25, 0x28, 0x41, 0xe2, -- 0x67, 0xe9, 0x90, 0x30, 0xc3, 0xd8, 0x3f, 0x3a, 0xe6, 0x28, 0xb7, 0x63, -- 0x52, 0xd9, 0xce, 0x4d, 0xf4, 0x41, 0xd4, 0x27, 0xe2, 0xef, 0xe6, 0x39, -- 0x8b, 0xdf, 0x7d, 0x57, 0x4a, 0xc4, 0x92, 0x9f, 0xa0, 0x87, 0xb0, 0xb3, -- 0x4e, 0x54, 0x79, 0xc5, 0xfc, 0xa3, 0xdd, 0x22, 0xf9, 0xa7, 0x12, 0x23, -- 0x2c, 0xa0, 0x75, 0x19, 0x74, 0x1e, 0x8e, 0x51, 0xa8, 0xc8, 0xc2, 0xa8, -- 0x51, 0xc9, 0xa8, 0xcc, 0xa6, 0xd9, 0xad, 0x5a, 0x4b, 0x05, 0xa8, 0xf4, -- 0x6b, 0xf5, 0x49, 0x4a, 0x29, 0xd3, 0xda, 0xbb, 0x56, 0x1b, 0x6e, 0x4f, -- 0xee, 0x73, 0x4b, 0x30, 0x5e, 0x3c, 0x74, 0x07, 0x77, 0xef, 0xd1, 0xf5, -- 0xcd, 0x05, 0xcc, 0xef, 0x0d, 0x58, 0x67, 0xd5, 0x50, 0xd5, 0xf7, 0x95, -- 0xa2, 0x33, 0xb4, 0x63, 0xbf, 0xc5, 0xf6, 0x67, 0xc5, 0xf0, 0xc4, 0x98, -- 0xde, 0x37, 0xfc, 0x63, 0xf1, 0x00, 0xb0, 0x9a, 0xd3, 0x67, 0xc3, 0xab, -- 0x14, 0x5c, 0x27, 0x05, 0x8b, 0x2b, 0x5d, 0xf4, 0x25, 0x11, 0x14, 0xb4, -- 0x51, 0x4c, 0xe9, 0x4f, 0x84, 0x47, 0x49, 0xc0, 0x24, 0x3d, 0xcb, 0xf8, -- 0xad, 0x41, 0x84, 0x2a, 0xfd, 0x29, 0xc9, 0x0d, 0xfa, 0x17, 0x9a, 0x2a, -- 0x97, 0x80, 0x09, 0xee, 0xcb, 0xe5, 0xc6, 0x4e, 0xc4, 0x7a, 0x3c, 0x74, -- 0xa3, 0x57, 0x1f, 0xbe, 0x8c, 0xff, 0xb5, 0xb9, 0x98, 0x4d, 0xac, 0x28, -- 0x4a, 0x5b, 0x5d, 0xd9, 0x85, 0x91, 0xd4, 0x2e, 0xfc, 0x6a, 0xc9, 0xce, -- 0x2d, 0x57, 0x99, 0x87, 0x47, 0x31, 0xe3, 0xab, 0x28, 0x93, 0x32, 0xa1, -- 0xae, 0x71, 0xd6, 0xd0, 0x96, 0xb4, 0xbb, 0xd2, 0xfa, 0x71, 0x71, 0xc7, -- 0x35, 0x4e, 0x2f, 0x2f, 0xf3, 0x31, 0x17, 0xae, 0xf1, 0x70, 0xc0, 0xcc, -- 0xe2, 0xe5, 0xc1, 0x99, 0x95, 0x55, 0xa2, 0xb9, 0x25, 0x8b, 0xe5, 0x68, -- 0x4a, 0x77, 0xaf, 0x45, 0xa7, 0xd3, 0xa1, 0xc2, 0x2a, 0x91, 0xf2, 0x84, -- 0xe6, 0xc4, 0x37, 0x0f, 0xfd, 0xb1, 0x15, 0x11, 0xad, 0xc5, 0xd8, 0x59, -- 0xa2, 0x9e, 0xa1, 0xd8, 0x2b, 0x87, 0x0d, 0xcf, 0x8a, 0xb9, 0x25, 0xb7, -- 0x2c, 0x2b, 0x01, 0x87, 0xb4, 0xca, 0xed, 0x6b, 0xe2, 0x69, 0xc8, 0xa7, -- 0x8a, 0xc6, 0xae, 0x9a, 0x36, 0xde, 0x08, 0x27, 0x33, 0x19, 0x2c, 0xae, -- 0x17, 0xb6, 0xd3, 0x26, 0xdf, 0x88, 0xf0, 0xa3, 0xe9, 0x14, 0x38, 0x79, -- 0xa7, 0xdf, 0x9c, 0x0e, 0x93, 0x43, 0x6e, 0x49, 0xc6, 0xa4, 0x72, 0x2b, -- 0x4c, 0x2e, 0xf4, 0x1d, 0x4d, 0xf6, 0x8a, 0xef, 0xaf, 0x93, 0x92, 0xff, -- 0x42, 0x6b, 0xfa, 0xa5, 0x58, 0x59, 0xf1, 0x6d, 0xb3, 0x57, 0x6a, 0xc8, -- 0x82, 0xa6, 0x4f, 0xf1, 0x3b, 0x1d, 0x15, 0x92, 0xa6, 0xdc, 0x36, 0xf9, -- 0x1e, 0x8a, 0xb2, 0x01, 0xa5, 0x23, 0x6f, 0x26, 0x24, 0x64, 0x41, 0x54, -- 0x5a, 0xdc, 0x63, 0xff, 0x02, 0xde, 0x28, 0xe2, 0xa4, 0x34, 0x10, 0x90, -- 0x96, 0x92, 0x9f, 0x0b, 0xc7, 0x93, 0x73, 0x55, 0x0a, 0x88, 0x4c, 0x99, -- 0x69, 0xf0, 0x62, 0xa1, 0x5e, 0x4f, 0x31, 0x50, 0x54, 0x59, 0xeb, 0xb8, -- 0x06, 0xea, 0x98, 0x7d, 0xc1, 0x5a, 0x34, 0x8f, 0x85, 0x84, 0x16, 0xda, -- 0x82, 0xe1, 0xda, 0xff, 0x0d, 0xe7, 0xf9, 0xe0, 0x85, 0x2c, 0x65, 0x02, -- 0x00, --}; --#define BUF_SIZE 0x10000 --static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size) --{ -- (void) opaque; -- /* not a typo, keep it calloc() */ -- return (voidpf) calloc(items, size); --} --static void zfree_func(voidpf opaque, voidpf ptr) --{ -- (void) opaque; -- free(ptr); --} --/* Decompress and send to stdout a gzip-compressed buffer */ --void hugehelp(void) --{ -- unsigned char* buf; -- int status,headerlen; -- z_stream z; -- -- /* Make sure no gzip options are set */ -- if (hugehelpgz[3] & 0xfe) -- return; -- -- headerlen = 10; -- memset(&z, 0, sizeof(z_stream)); -- z.zalloc = (alloc_func)zalloc_func; -- z.zfree = (free_func)zfree_func; -- z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen); -- z.next_in = (unsigned char *)hugehelpgz + headerlen; -- -- if (inflateInit2(&z, -MAX_WBITS) != Z_OK) -- return; -- -- buf = malloc(BUF_SIZE); -- if (buf) { -- while(1) { -- z.avail_out = BUF_SIZE; -- z.next_out = buf; -- status = inflate(&z, Z_SYNC_FLUSH); -- if (status == Z_OK || status == Z_STREAM_END) { -- fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout); -- if (status == Z_STREAM_END) -- break; -- } -- else -- break; /* Error */ -- } -- free(buf); -- } -- inflateEnd(&z); --} --#endif /* USE_MANUAL */ --#endif /* HAVE_LIBZ */ diff --git a/meta/recipes-support/curl/curl_7.36.0.bb b/meta/recipes-support/curl/curl_7.40.0.bb index 54ea6d407f..4cde9c6baa 100644 --- a/meta/recipes-support/curl/curl_7.36.0.bb +++ b/meta/recipes-support/curl/curl_7.40.0.bb @@ -5,50 +5,38 @@ SECTION = "console/network" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://COPYING;beginline=7;md5=3a34942f4ae3fbf1a303160714e664ac" -DEPENDS = "zlib gnutls" -DEPENDS_class-native = "zlib-native openssl-native" -DEPENDS_class-nativesdk = "nativesdk-zlib" - SRC_URI = "http://curl.haxx.se/download/curl-${PV}.tar.bz2 \ file://pkgconfig_fix.patch \ - file://generate_code_for_disable_manual.patch \ - file://remove_inappropriate_file_from_rel.patch \ -" + " # curl likes to set -g0 in CFLAGS, so we stop it # from mucking around with debug options # SRC_URI += " file://configure_ac.patch" -SRC_URI[md5sum] = "e6d1f9d1b59da5062109ffe14e0569a4" -SRC_URI[sha256sum] = "1fbe82b89bcd6b7ccda8cb0ff076edc60e911595030e27689f4abd5ef7f3cfcd" +SRC_URI[md5sum] = "8d30594212e65657a5c32030f0998fa9" +SRC_URI[sha256sum] = "899109eb3900fa6b8a2f995df7f449964292776a04763e94fae640700f883fba" inherit autotools pkgconfig binconfig multilib_header -EXTRA_OECONF = "--with-zlib=${STAGING_LIBDIR}/../ \ - --without-libssh2 \ - --with-random=/dev/urandom \ - --without-libidn \ +PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "ipv6", "ipv6", "", d)} gnutls zlib" +PACKAGECONFIG_class-native = "ipv6 ssl zlib" +PACKAGECONFIG_class-nativesdk = "ipv6 ssl zlib" + +PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6," +PACKAGECONFIG[ssl] = "--with-ssl --with-random=/dev/urandom,--without-ssl,openssl" +PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls" +PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib" +PACKAGECONFIG[rtmpdump] = "--with-librtmp,--without-librtmp,rtmpdump" +PACKAGECONFIG[libssh2] = "--with-libssh2,--without-libssh2,libssh2" +PACKAGECONFIG[smb] = "--enable-smb,--disable-smb," + +EXTRA_OECONF = "--without-libidn \ --enable-crypto-auth \ --disable-ldap \ --disable-ldaps \ --with-ca-bundle=${sysconfdir}/ssl/certs/ca-certificates.crt \ - ${CURLGNUTLS} \ - " - -CURLGNUTLS = " --with-gnutls=${STAGING_LIBDIR}/../ --without-ssl" -CURLGNUTLS_class-native = "--without-gnutls --with-ssl" -CURLGNUTLS_class-nativesdk = "--without-gnutls --without-ssl" - -PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "ipv6", "ipv6", "", d)}" -PACKAGECONFIG_class-native = "ipv6" -PACKAGECONFIG_class-nativesdk = "ipv6" - -PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6," - -do_configure_prepend() { - sed -i s:OPT_GNUTLS/bin:OPT_GNUTLS:g ${S}/configure.ac -} +" do_install_append() { oe_multilib_header curl/curlbuild.h diff --git a/meta/recipes-support/db/db/arm-thumb-mutex_db5.patch b/meta/recipes-support/db/db/arm-thumb-mutex_db5.patch index 40b13dee79..34e8db84df 100644 --- a/meta/recipes-support/db/db/arm-thumb-mutex_db5.patch +++ b/meta/recipes-support/db/db/arm-thumb-mutex_db5.patch @@ -1,5 +1,15 @@ +Original patch submitted by jbowler@nslu2-linux.org on 2005-11-17: + +db: fix thumb uclibc operation in 4.3.29 + - uclibc thumb builds were using libpthread to implement mutexes, the + - uclibc version seems to be a stub (at least on thumb). This commit + - fixes the ARM/gcc-assembly mutex implementation so that it has thumb + - support and the resultant db4 works (tested on LE Thumb uclibc) + Upstream-Status: Inappropriate [embedded specific] +Author: jbowler@nslu2-linux.org + --- db-5.1.19/src/dbinc/mutex_int.h.orig 2011-01-05 19:21:42.181805366 -0600 +++ db-5.1.19/src/dbinc/mutex_int.h 2011-01-05 19:24:53.141853117 -0600 @@ -474,6 +474,25 @@ diff --git a/meta/recipes-support/db/db_5.3.21.bb b/meta/recipes-support/db/db_5.3.28.bb index caf6890261..e8b814e06b 100644 --- a/meta/recipes-support/db/db_5.3.21.bb +++ b/meta/recipes-support/db/db_5.3.28.bb @@ -20,10 +20,10 @@ SRC_URI += "file://arm-thumb-mutex_db5.patch;patchdir=.. \ file://fix-parallel-build.patch \ " -SRC_URI[md5sum] = "3fda0b004acdaa6fa350bfc41a3b95ca" -SRC_URI[sha256sum] = "ddd92a930317df92021054c03992392db9ea5cddba43bef8920d392a82114fb8" +SRC_URI[md5sum] = "b99454564d5b4479750567031d66fe24" +SRC_URI[sha256sum] = "e0a992d740709892e81f9d93f06daf305cf73fb81b545afe72478043172c3628" -LIC_FILES_CHKSUM = "file://../LICENSE;md5=32aefa5a8e7318be1f657432cbe2e768" +LIC_FILES_CHKSUM = "file://../LICENSE;md5=ed1158e31437f4f87cdd4ab2b8613955" inherit autotools @@ -42,6 +42,7 @@ PROVIDES += "${VIRTUAL_NAME}" # persuades bitbake to go to the right place S = "${WORKDIR}/db-${PV}/dist" B = "${WORKDIR}/db-${PV}/build_unix" +SPDX_S = "${WORKDIR}/db-${PV}" # The executables go in a separate package - typically there # is no need to install these unless doing real database diff --git a/meta/recipes-support/db/db_6.0.30.bb b/meta/recipes-support/db/db_6.0.30.bb new file mode 100644 index 0000000000..47fb296daa --- /dev/null +++ b/meta/recipes-support/db/db_6.0.30.bb @@ -0,0 +1,115 @@ +# Version 6 of the Berkeley DB from Oracle (formerly Sleepycat) +# +# At present this package only installs the DB code +# itself (shared libraries, .a in the dev package), +# documentation and headers. +# +# The headers have the same names as those as v3 +# of the DB, only one version can be used *for dev* +# at once - DB3 and DB6 can both be installed on the +# same system at the same time if really necessary. +SECTION = "libs" +SUMMARY = "Berkeley Database v6" +HOMEPAGE = "http://www.oracle.com/technology/products/berkeley-db/db/index.html" +LICENSE = "AGPL-3.0" +VIRTUAL_NAME ?= "virtual/db" +RCONFLICTS_${PN} = "db3" + +SRC_URI = "http://download.oracle.com/berkeley-db/db-${PV}.tar.gz" +SRC_URI += "file://arm-thumb-mutex_db5.patch;patchdir=.. \ + file://fix-parallel-build.patch \ + " + +SRC_URI[md5sum] = "ad28eb86ad3203b5422844db179c585b" +SRC_URI[sha256sum] = "608e4b1cf390e9bf54c0ef00c5bd9ca76d36e2261b9f4d33d54516f3f6a20fd2" + +LIC_FILES_CHKSUM = "file://../LICENSE;md5=1ec8b0b17cc31513fe35ab10716f8490" + +inherit autotools + +# Put virtual/db in any appropriate provider of a +# relational database, use it as a dependency in +# place of a specific db and use: +# +# PREFERRED_PROVIDER_virtual/db +# +# to select the correct db in the build (distro) .conf +PROVIDES += "${VIRTUAL_NAME}" + +# bitbake isn't quite clever enough to deal with sleepycat, +# the distribution sits in the expected directory, but all +# the builds must occur from a sub-directory. The following +# persuades bitbake to go to the right place +S = "${WORKDIR}/db-${PV}/dist" +B = "${WORKDIR}/db-${PV}/build_unix" +SPDX_S = "${WORKDIR}/db-${PV}" + +# The executables go in a separate package - typically there +# is no need to install these unless doing real database +# management on the system. +inherit lib_package + +PACKAGES =+ "${PN}-cxx" +FILES_${PN}-cxx = "${libdir}/*cxx*so" + + +# The dev package has the .so link (as in db3) and the .a's - +# it is therefore incompatible (cannot be installed at the +# same time) as the db3 package +# sort out the .so since they do version prior to the .so +SOLIBS = "-6*.so" +FILES_SOLIBSDEV = "${libdir}/libdb.so ${libdir}/libdb_cxx.so" + +#configuration - set in local.conf to override +# All the --disable-* options replace --enable-smallbuild, which breaks a bunch of stuff (eg. postfix) +DB6_CONFIG ?= "--enable-o_direct --disable-cryptography --disable-queue --disable-replication --disable-verify --disable-compat185 --disable-sql" + +EXTRA_OECONF = "${DB6_CONFIG} --enable-shared --enable-cxx --with-sysroot" + +# Override the MUTEX setting here, the POSIX library is +# the default - "POSIX/pthreads/library". +# Don't ignore the nice SWP instruction on the ARM: +# These enable the ARM assembler mutex code +ARM_MUTEX = "--with-mutex=ARM/gcc-assembly" +MUTEX = "" +MUTEX_arm = "${ARM_MUTEX}" +MUTEX_armeb = "${ARM_MUTEX}" +EXTRA_OECONF += "${MUTEX}" + +# Cancel the site stuff - it's set for db3 and destroys the +# configure. +CONFIG_SITE = "" +do_configure() { + gnu-configize --force ${S} + export STRIP="true" + oe_runconf +} + +do_compile_prepend() { + sed -i -e 's|hardcode_into_libs=yes|hardcode_into_libs=no|' \ + ${B}/libtool +} + +do_install_append() { + mkdir -p ${D}/${includedir}/db60 + mv ${D}/${includedir}/db.h ${D}/${includedir}/db60/. + mv ${D}/${includedir}/db_cxx.h ${D}/${includedir}/db60/. + ln -s db60/db.h ${D}/${includedir}/db.h + ln -s db60/db_cxx.h ${D}/${includedir}/db_cxx.h + + # The docs end up in /usr/docs - not right. + if test -d "${D}/${prefix}/docs" + then + mkdir -p "${D}/${datadir}" + test ! -d "${D}/${docdir}" || rm -rf "${D}/${docdir}" + mv "${D}/${prefix}/docs" "${D}/${docdir}" + fi + + chown -R root:root ${D} +} + +INSANE_SKIP_${PN} = "dev-so" +INSANE_SKIP_${PN}-cxx = "dev-so" + +BBCLASSEXTEND = "native nativesdk" + diff --git a/meta/recipes-support/debianutils/debianutils_4.4.bb b/meta/recipes-support/debianutils/debianutils_4.4.bb new file mode 100644 index 0000000000..346eaf16eb --- /dev/null +++ b/meta/recipes-support/debianutils/debianutils_4.4.bb @@ -0,0 +1,35 @@ +SUMMARY = "Miscellaneous utilities specific to Debian" +SECTION = "base" +LICENSE = "GPLv2 & SMAIL_GPL" +LIC_FILES_CHKSUM = "file://debian/copyright;md5=f01a5203d50512fc4830b4332b696a9f" + +SRC_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/${BPN}_${PV}.tar.gz" +SRC_URI[md5sum] = "c0cb076754d7f4eb1e3397d00916647f" +SRC_URI[sha256sum] = "190850cdd6b5302e0a1ba1aaed1bc7074d67d3bd8d04c613f242f7145afa53a6" + +inherit autotools update-alternatives + +do_configure_prepend() { + sed -i -e 's:tempfile.1 which.1:which.1:g' ${S}/Makefile.am +} + +do_install_append() { + if [ "${base_bindir}" != "${bindir}" ]; then + # Debian places some utils into ${base_bindir} as does busybox + install -d ${D}${base_bindir} + for app in run-parts tempfile; do + mv ${D}${bindir}/$app ${D}${base_bindir}/$app + done + fi +} + +ALTERNATIVE_PRIORITY="100" +ALTERNATIVE_${PN} = "add-shell installkernel remove-shell run-parts savelog tempfile which" + +ALTERNATIVE_LINK_NAME[add-shell]="${sbindir}/add-shell" +ALTERNATIVE_LINK_NAME[installkernel]="${sbindir}/installkernel" +ALTERNATIVE_LINK_NAME[remove-shell]="${sbindir}/remove-shell" +ALTERNATIVE_LINK_NAME[run-parts]="${base_bindir}/run-parts" +ALTERNATIVE_LINK_NAME[savelog]="${bindir}/savelog" +ALTERNATIVE_LINK_NAME[tempfile]="${base_bindir}/tempfile" +ALTERNATIVE_LINK_NAME[which]="${bindir}/which" diff --git a/meta/recipes-support/gdbm/gdbm-1.8.3/ldflags.patch b/meta/recipes-support/gdbm/gdbm-1.8.3/ldflags.patch new file mode 100644 index 0000000000..770d8f66b9 --- /dev/null +++ b/meta/recipes-support/gdbm/gdbm-1.8.3/ldflags.patch @@ -0,0 +1,22 @@ +Obey LDFLAGS + +Signed-off-by: Christopher Larson <chris_larson@mentor.com> +Upstream-status: Inappropriate [old version] + +--- gdbm-1.8.3.orig/Makefile.in ++++ gdbm-1.8.3/Makefile.in +@@ -156,12 +156,12 @@ install-compat: + + libgdbm.la: $(LOBJS) gdbm.h + rm -f libgdbm.la +- $(LIBTOOL) --mode=link $(CC) -o libgdbm.la -rpath $(libdir) \ ++ $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o libgdbm.la -rpath $(libdir) \ + -version-info $(SHLIB_VER) $(LOBJS) + + libgdbm_compat.la: $(C_LOBJS) gdbm.h + rm -f libgdbm_compat.la +- $(LIBTOOL) --mode=link $(CC) -o libgdbm_compat.la -rpath $(libdir) \ ++ $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o libgdbm_compat.la -rpath $(libdir) \ + -version-info $(SHLIB_VER) $(C_LOBJS) + + gdbm.h: gdbm.proto gdbmerrno.h gdbm.proto2 diff --git a/meta/recipes-support/gdbm/gdbm_1.8.3.bb b/meta/recipes-support/gdbm/gdbm_1.8.3.bb index aecf47afb9..2331d1df3a 100644 --- a/meta/recipes-support/gdbm/gdbm_1.8.3.bb +++ b/meta/recipes-support/gdbm/gdbm_1.8.3.bb @@ -8,7 +8,8 @@ PR = "r4" SRC_URI = "${GNU_MIRROR}/gdbm/gdbm-${PV}.tar.gz \ file://makefile.patch \ - file://libtool-mode.patch" + file://libtool-mode.patch \ + file://ldflags.patch" SRC_URI[md5sum] = "1d1b1d5c0245b1c00aff92da751e9aa1" SRC_URI[sha256sum] = "cc340338a2e28b40058ab9eb5354a21d53f88a1582ea21ba0bb185c37a281dc9" diff --git a/meta/recipes-support/gmp/gmp-4.2.1/configure.patch b/meta/recipes-support/gmp/gmp-4.2.1/configure.patch deleted file mode 100644 index 7597a935a2..0000000000 --- a/meta/recipes-support/gmp/gmp-4.2.1/configure.patch +++ /dev/null @@ -1,209 +0,0 @@ -Upstream-Status: Pending - - acinclude.m4 | 26 ++++++++++++++------------ - configure.in | 24 +++++++++--------------- - 2 files changed, 23 insertions(+), 27 deletions(-) - -Index: gmp-5.0.3/acinclude.m4 -=================================================================== ---- gmp-5.0.3.orig/acinclude.m4 -+++ gmp-5.0.3/acinclude.m4 -@@ -30,29 +30,29 @@ dnl a_out.exe - OpenVMS DEC C called - dnl conftest.exe - various DOS compilers - - --define(IA64_PATTERN, -+define([IA64_PATTERN], - [[ia64*-*-* | itanium-*-* | itanium2-*-*]]) - - dnl Need to be careful not to match m6811, m6812, m68hc11 and m68hc12, all - dnl of which config.sub accepts. (Though none of which are likely to work - dnl with GMP.) - dnl --define(M68K_PATTERN, -+define([M68K_PATTERN], - [[m68k-*-* | m68[0-9][0-9][0-9]-*-*]]) - --define(POWERPC64_PATTERN, -+define([POWERPC64_PATTERN], - [[powerpc64-*-* | powerpc64le-*-* | powerpc620-*-* | powerpc630-*-* | powerpc970-*-* | power[3-9]-*-*]]) - --define(S390_PATTERN, -+define([S390_PATTERN], - [[s390-*-* | z900esa-*-* | z990esa-*-* | z9esa-*-* | z10esa-*-* | z196esa-*-*]]) - --define(S390X_PATTERN, -+define([S390X_PATTERN], - [[s390x-*-* | z900-*-* | z990-*-* | z9-*-* | z10-*-* | z196-*-*]]) - --define(X86_PATTERN, -+define([X86_PATTERN], - [[i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-*]]) - --define(X86_64_PATTERN, -+define([X86_64_PATTERN], - [[athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | bulldozer-*-* | pentium4-*-* | atom-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-*]]) - - dnl GMP_FAT_SUFFIX(DSTVAR, DIRECTORY) -@@ -70,7 +70,7 @@ dnl x86 -> x86 - dnl x86/k6 -> k6 - dnl x86/k6/mmx -> k6_mmx - --define(GMP_FAT_SUFFIX, -+define([GMP_FAT_SUFFIX], - [[$1=`echo $2 | sed -e '/\//s:^[^/]*/::' -e 's:[\\/]:_:g'`]]) - - -@@ -79,7 +79,7 @@ dnl ---------------------------------- - dnl Emit code to remove any occurrence of ITEM from $LISTVAR. ITEM can be a - dnl shell expression like $foo if desired. - --define(GMP_REMOVE_FROM_LIST, -+define([GMP_REMOVE_FROM_LIST], - [remove_from_list_tmp= - for remove_from_list_i in $[][$1]; do - if test $remove_from_list_i = [$2]; then :; -@@ -95,12 +95,12 @@ dnl GMP_STRIP_PATH(subdir) - dnl ---------------------- - dnl Strip entries */subdir from $path and $fat_path. - --define(GMP_STRIP_PATH, -+define([GMP_STRIP_PATH], - [GMP_STRIP_PATH_VAR(path, [$1]) - GMP_STRIP_PATH_VAR(fat_path, [$1]) - ]) - --define(GMP_STRIP_PATH_VAR, -+define([GMP_STRIP_PATH_VAR], - [tmp_path= - for i in $[][$1]; do - case $i in -@@ -121,7 +121,7 @@ dnl - dnl Dummy value for GMP_LIMB_BITS is enough - dnl for all current configure-time uses of gmp.h. - --define(GMP_INCLUDE_GMP_H, -+define([GMP_INCLUDE_GMP_H], - [[#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */ - #define GMP_NAIL_BITS $GMP_NAIL_BITS - #define GMP_LIMB_BITS 123 -@@ -136,7 +136,7 @@ dnl Expand at autoconf time to the valu - dnl FILE. The regexps here aren't very rugged, but are enough for gmp. - dnl /dev/null as a parameter prevents a hang if $2 is accidentally omitted. - --define(GMP_HEADER_GETVAL, -+define([GMP_HEADER_GETVAL], - [patsubst(patsubst( - esyscmd([grep "^#define $1 " $2 /dev/null 2>/dev/null]), - [^.*$1[ ]+],[]), -@@ -150,7 +150,7 @@ dnl The gmp version number, extracted f - dnl autoconf time. Two digits like 3.0 if patchlevel <= 0, or three digits - dnl like 3.0.1 if patchlevel > 0. - --define(GMP_VERSION, -+define([GMP_VERSION], - [GMP_HEADER_GETVAL(__GNU_MP_VERSION,gmp-h.in)[]dnl - .GMP_HEADER_GETVAL(__GNU_MP_VERSION_MINOR,gmp-h.in)[]dnl - .GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp-h.in)]) -@@ -1512,7 +1512,9 @@ esac - echo ["define(<CONFIG_TOP_SRCDIR>,<\`$tmp'>)"] >>$gmp_tmpconfigm4 - - # All CPUs use asm-defs.m4 --echo ["include][(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"] >>$gmp_tmpconfigm4i -+echo -n ["include("] >>$gmp_tmpconfigm4i -+echo -n ["CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4'"] >>$gmp_tmpconfigm4i -+echo [")"] >>$gmp_tmpconfigm4i - ]) - - -Index: gmp-5.0.3/configure.in -=================================================================== ---- gmp-5.0.3.orig/configure.in -+++ gmp-5.0.3/configure.in -@@ -29,12 +29,6 @@ AC_REVISION($Revision$) - AC_PREREQ(2.59) - AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see http://gmplib.org/manual/Reporting-Bugs.html], gmp) - AC_CONFIG_SRCDIR(gmp-impl.h) --m4_pattern_forbid([^[ \t]*GMP_]) --m4_pattern_allow(GMP_LDFLAGS) --m4_pattern_allow(GMP_LIMB_BITS) --m4_pattern_allow(GMP_MPARAM_H_SUGGEST) --m4_pattern_allow(GMP_NAIL_BITS) --m4_pattern_allow(GMP_NUMB_BITS) - - # If --target is not used then $target_alias is empty, but if say - # "./configure athlon-pc-freebsd3.5" is used, then all three of -@@ -311,7 +305,7 @@ AH_VERBATIM([HAVE_HOST_CPU_1], - # After GMP specific searches and tests, the standard autoconf AC_PROG_CC is - # called. User selections of CC etc are respected. - # --# Care is taken not to use macros like AC_TRY_COMPILE during the GMP -+# Care is taken not to use macros like AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) during the GMP - # pre-testing, since they of course depend on AC_PROG_CC, and also some of - # them cache their results, which is not wanted. - # -@@ -403,7 +397,7 @@ abilist="standard" - # FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring - # c89 over cc here. But note that on HP-UX c89 provides a castrated - # environment, and would want to be excluded somehow. Maybe --# AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and -+# already does enough to stick cc into ANSI mode and - # we don't need to worry. - # - cclist="gcc cc" -@@ -1666,7 +1660,7 @@ esac - CFLAGS_or_unset=${CFLAGS-'(unset)'} - CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'} - --cat >&AC_FD_CC <<EOF -+cat >&AS_MESSAGE_LOG_FD() <<EOF - User: - ABI=$ABI - CC=$CC -@@ -2073,7 +2067,6 @@ AC_SUBST(DEFN_LONG_LONG_LIMB) - - # The C compiler and preprocessor, put into ANSI mode if possible. - AC_PROG_CC --AC_PROG_CC_STDC - AC_PROG_CPP - GMP_H_ANSI - -@@ -2096,11 +2089,11 @@ AC_SUBST(CCAS) - - # The C++ compiler, if desired. - want_cxx=no -+AC_PROG_CXX - if test $enable_cxx != no; then - test_CXXFLAGS=${CXXFLAGS+set} -- AC_PROG_CXX - -- echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC -+ echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AS_MESSAGE_LOG_FD() - cxxflags_ac_prog_cxx=$CXXFLAGS - cxxflags_list=ac_prog_cxx - -@@ -2206,7 +2199,7 @@ case $host in - esac - - --cat >&AC_FD_CC <<EOF -+cat >&AS_MESSAGE_LOG_FD() <<EOF - Decided: - ABI=$ABI - CC=$CC -@@ -3465,7 +3458,7 @@ GMP_FINISH - # FIXME: Upcoming version of autoconf/automake may not like broken lines. - # Right now automake isn't accepting the new AC_CONFIG_FILES scheme. - --AC_OUTPUT(Makefile \ -+AC_CONFIG_FILES([Makefile \ - mpbsd/Makefile mpf/Makefile mpn/Makefile mpq/Makefile \ - mpz/Makefile printf/Makefile scanf/Makefile cxx/Makefile \ - tests/Makefile tests/devel/Makefile tests/mpbsd/Makefile \ -@@ -3474,4 +3467,5 @@ AC_OUTPUT(Makefile \ - tests/cxx/Makefile \ - doc/Makefile tune/Makefile \ - demos/Makefile demos/calc/Makefile demos/expr/Makefile \ -- gmp.h:gmp-h.in mp.h:mp-h.in) -+ gmp.h:gmp-h.in mp.h:mp-h.in]) -+AC_OUTPUT diff --git a/meta/recipes-support/gmp/gmp-4.2.1/disable-stdc.patch b/meta/recipes-support/gmp/gmp-4.2.1/disable-stdc.patch deleted file mode 100644 index aaffaf14c5..0000000000 --- a/meta/recipes-support/gmp/gmp-4.2.1/disable-stdc.patch +++ /dev/null @@ -1,33 +0,0 @@ -Upstream-Status: Pending - -# "extern inline" in traditional gcc means that the function should be -# inlined wherever it's seen, while in C99, "extern inline" means that i -# the function should only be inlined where the inline definition is -# seen while in other places it's not inlined: -# http://gcc.gnu.org/ml/gcc/2006-11/msg00006.html -# -# gmp checks "--std=gnu99" to use C99 convention however it internally -# defines some "extern inline" functions in gmp.h, which is included -# by mainly .c files and finally lead a flood of redefinition function -# errors when linking objects together. -# -# So disable C99/ANSI detection to stick to tranditional gcc behavior -# -# by Kevin Tian <kevin.tian@intel.com>, 2010-08-13 -# -# (this patch is licensed under GPLv2+) - -diff --git a/configure.in b/configure.in -index 450cc92..aab0b59 100644 ---- a/configure.in -+++ b/configure.in -@@ -1869,9 +1869,7 @@ AC_SUBST(DEFN_LONG_LONG_LIMB) - - # The C compiler and preprocessor, put into ANSI mode if possible. - AC_PROG_CC --AC_PROG_CC_STDC - AC_PROG_CPP --GMP_H_ANSI - - - # The C compiler on the build system, and associated tests. diff --git a/meta/recipes-support/gmp/gmp-4.2.1/gmp_fix_for_automake-1.12.patch b/meta/recipes-support/gmp/gmp-4.2.1/gmp_fix_for_automake-1.12.patch deleted file mode 100644 index fbd8a39d01..0000000000 --- a/meta/recipes-support/gmp/gmp-4.2.1/gmp_fix_for_automake-1.12.patch +++ /dev/null @@ -1,48 +0,0 @@ -Upstream-Status: Pending - -automake 1.12 has depricated automatic de-ANSI-fication support - -this patch avoids these kinds of errors: - -| configure.in:2240: error: automatic de-ANSI-fication support has been removed -| Makefile.am:28: error: automatic de-ANSI-fication support has been removed - -Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com> -2012/05/02 - -Index: gmp-4.2.1/configure.in -=================================================================== ---- gmp-4.2.1.orig/configure.in -+++ gmp-4.2.1/configure.in -@@ -67,7 +67,7 @@ dnl - dnl Note that there's a copy of these options in the top-level Makefile.am, - dnl so update there too if changing anything. - dnl --AM_INIT_AUTOMAKE([1.8 gnu no-dependencies $(top_builddir)/ansi2knr]) -+AM_INIT_AUTOMAKE([1.8 gnu no-dependencies]) - AM_CONFIG_HEADER(config.h:config.in) - AM_MAINTAINER_MODE - -@@ -2022,9 +2022,6 @@ fi - echo " MPN_PATH=\"$path\"" - - --# Automake ansi2knr support. --AM_C_PROTOTYPES -- - GMP_PROG_AR - GMP_PROG_NM - -Index: gmp-4.2.1/Makefile.am -=================================================================== ---- gmp-4.2.1.orig/Makefile.am -+++ gmp-4.2.1/Makefile.am -@@ -27,7 +27,7 @@ - # Makefiles in subdirectories, but here we must omit it so automake gives - # the actual ansi2knr build rule, not "cd $(top_builddir) && make ansi2knr". - # --AUTOMAKE_OPTIONS = 1.8 gnu no-dependencies ansi2knr -+AUTOMAKE_OPTIONS = 1.8 gnu no-dependencies - - - # Libtool -version-info for libgmp.la and libmp.la. See "Versioning" in the diff --git a/meta/recipes-support/gmp/gmp.inc b/meta/recipes-support/gmp/gmp.inc index d025e07256..558ee06799 100644 --- a/meta/recipes-support/gmp/gmp.inc +++ b/meta/recipes-support/gmp/gmp.inc @@ -4,9 +4,9 @@ DESCRIPTION = "GMP is a free library for arbitrary precision arithmetic, operati HOMEPAGE = "http://gmplib.org/" LICENSE = "GPLv3 LGPLv3" -REVISION = "" +REVISION ?= "" -SRC_URI = "ftp://ftp.gmplib.org/pub/gmp-${PV}/gmp-${PV}${REVISION}.tar.bz2 \ +SRC_URI = "https://gmplib.org/download/${BPN}/${BP}${REVISION}.tar.bz2 \ file://configure.patch \ file://amd64.patch " @@ -18,6 +18,9 @@ acpaths = "" BBCLASSEXTEND = "native nativesdk" +PACKAGECONFIG ??= "" +PACKAGECONFIG[readline] = "--with-readline=yes,--with-readline=no,readline" + EXTRA_OECONF += " --enable-cxx=detect" PACKAGES =+ "libgmpxx" diff --git a/meta/recipes-support/gmp/gmp-5.1.1/append_user_provided_flags.patch b/meta/recipes-support/gmp/gmp/append_user_provided_flags.patch index ae1386c4c1..ae1386c4c1 100644 --- a/meta/recipes-support/gmp/gmp-5.1.1/append_user_provided_flags.patch +++ b/meta/recipes-support/gmp/gmp/append_user_provided_flags.patch diff --git a/meta/recipes-support/gmp/gmp-5.1.1/configure.patch b/meta/recipes-support/gmp/gmp/configure.patch index 591ea79051..349da3c6b0 100644 --- a/meta/recipes-support/gmp/gmp-5.1.1/configure.patch +++ b/meta/recipes-support/gmp/gmp/configure.patch @@ -4,17 +4,23 @@ Updated to apply to gmp-5.1.0 Signed-off-by: Marko Lindqvist <cazfi74@gmail.com> -diff -Nurd gmp-5.1.0/acinclude.m4 gmp-5.1.0/acinclude.m4 ---- gmp-5.1.0/acinclude.m4 2012-12-18 21:05:09.000000000 +0200 -+++ gmp-5.1.0/acinclude.m4 2013-01-02 05:19:26.977013073 +0200 -@@ -30,29 +30,29 @@ +--- + acinclude.m4 | 32 +++++++++++++++++--------------- + configure.ac | 26 +++++++++----------------- + 2 files changed, 26 insertions(+), 32 deletions(-) + +diff --git a/acinclude.m4 b/acinclude.m4 +index 227712a..199aa6f 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -40,29 +40,29 @@ dnl a_out.exe - OpenVMS DEC C called via GNV wrapper (gnv.sourceforge.net) dnl conftest.exe - various DOS compilers - - + + -define(IA64_PATTERN, +define([IA64_PATTERN], [[ia64*-*-* | itanium-*-* | itanium2-*-*]]) - + dnl Need to be careful not to match m6811, m6812, m68hc11 and m68hc12, all dnl of which config.sub accepts. (Though none of which are likely to work dnl with GMP.) @@ -22,105 +28,106 @@ diff -Nurd gmp-5.1.0/acinclude.m4 gmp-5.1.0/acinclude.m4 -define(M68K_PATTERN, +define([M68K_PATTERN], [[m68k-*-* | m68[0-9][0-9][0-9]-*-*]]) - + -define(POWERPC64_PATTERN, +define([POWERPC64_PATTERN], [[powerpc64-*-* | powerpc64le-*-* | powerpc620-*-* | powerpc630-*-* | powerpc970-*-* | power[3-9]-*-*]]) - + -define(S390_PATTERN, +define([S390_PATTERN], [[s390-*-* | z900esa-*-* | z990esa-*-* | z9esa-*-* | z10esa-*-* | z196esa-*-*]]) - + -define(S390X_PATTERN, +define([S390X_PATTERN], [[s390x-*-* | z900-*-* | z990-*-* | z9-*-* | z10-*-* | z196-*-*]]) - + -define(X86_PATTERN, +define([X86_PATTERN], [[i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-*]]) - + -define(X86_64_PATTERN, +define([X86_64_PATTERN], - [[athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | bulldozer-*-* | pentium4-*-* | atom-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-*]]) - + [[athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | jaguar-*-* | bulldozer-*-* | piledriver-*-* | steamroller-*-* | excavator-*-* | pentium4-*-* | atom-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-*]]) + dnl GMP_FAT_SUFFIX(DSTVAR, DIRECTORY) -@@ -70,7 +70,7 @@ +@@ -80,7 +80,7 @@ dnl x86 -> x86 dnl x86/k6 -> k6 dnl x86/k6/mmx -> k6_mmx - + -define(GMP_FAT_SUFFIX, +define([GMP_FAT_SUFFIX], [[$1=`echo $2 | sed -e '/\//s:^[^/]*/::' -e 's:[\\/]:_:g'`]]) - - -@@ -79,7 +79,7 @@ + + +@@ -89,7 +89,7 @@ dnl ---------------------------------- dnl Emit code to remove any occurrence of ITEM from $LISTVAR. ITEM can be a dnl shell expression like $foo if desired. - + -define(GMP_REMOVE_FROM_LIST, +define([GMP_REMOVE_FROM_LIST], [remove_from_list_tmp= for remove_from_list_i in $[][$1]; do if test $remove_from_list_i = [$2]; then :; -@@ -95,12 +95,12 @@ +@@ -105,12 +105,12 @@ dnl GMP_STRIP_PATH(subdir) dnl ---------------------- dnl Strip entries */subdir from $path and $fat_path. - + -define(GMP_STRIP_PATH, +define([GMP_STRIP_PATH], [GMP_STRIP_PATH_VAR(path, [$1]) GMP_STRIP_PATH_VAR(fat_path, [$1]) ]) - + -define(GMP_STRIP_PATH_VAR, +define([GMP_STRIP_PATH_VAR], [tmp_path= for i in $[][$1]; do case $i in -@@ -121,7 +121,7 @@ +@@ -131,7 +131,7 @@ dnl dnl Dummy value for GMP_LIMB_BITS is enough dnl for all current configure-time uses of gmp.h. - + -define(GMP_INCLUDE_GMP_H, +define([GMP_INCLUDE_GMP_H], [[#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */ #define GMP_NAIL_BITS $GMP_NAIL_BITS #define GMP_LIMB_BITS 123 -@@ -136,7 +136,7 @@ +@@ -146,7 +146,7 @@ dnl Expand at autoconf time to the value of a "#define NAME" from the given dnl FILE. The regexps here aren't very rugged, but are enough for gmp. dnl /dev/null as a parameter prevents a hang if $2 is accidentally omitted. - + -define(GMP_HEADER_GETVAL, +define([GMP_HEADER_GETVAL], [patsubst(patsubst( esyscmd([grep "^#define $1 " $2 /dev/null 2>/dev/null]), [^.*$1[ ]+],[]), -@@ -150,7 +150,7 @@ +@@ -160,7 +160,7 @@ dnl The gmp version number, extracted from the #defines in gmp-h.in at dnl autoconf time. Two digits like 3.0 if patchlevel <= 0, or three digits dnl like 3.0.1 if patchlevel > 0. - + -define(GMP_VERSION, +define([GMP_VERSION], [GMP_HEADER_GETVAL(__GNU_MP_VERSION,gmp-h.in)[]dnl .GMP_HEADER_GETVAL(__GNU_MP_VERSION_MINOR,gmp-h.in)[]dnl .GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp-h.in)]) -@@ -1512,7 +1512,9 @@ +@@ -1524,7 +1524,9 @@ esac echo ["define(<CONFIG_TOP_SRCDIR>,<\`$tmp'>)"] >>$gmp_tmpconfigm4 - + # All CPUs use asm-defs.m4 -echo ["include][(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"] >>$gmp_tmpconfigm4i +echo -n ["include("] >>$gmp_tmpconfigm4i +echo -n ["CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4'"] >>$gmp_tmpconfigm4i +echo [")"] >>$gmp_tmpconfigm4i ]) - - -diff -Nurd gmp-5.1.0/configure.ac gmp-5.1.0/configure.ac ---- gmp-5.1.0/configure.ac 2012-12-18 21:05:09.000000000 +0200 -+++ gmp-5.1.0/configure.ac 2013-01-02 05:19:26.977013073 +0200 -@@ -29,13 +29,6 @@ + + +diff --git a/configure.ac b/configure.ac +index 64b2c50..f07b821 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -39,14 +39,6 @@ AC_REVISION($Revision$) AC_PREREQ(2.59) - AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see http://gmplib.org/manual/Reporting-Bugs.html], gmp) + AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html], gmp) AC_CONFIG_SRCDIR(gmp-impl.h) -m4_pattern_forbid([^[ \t]*GMP_]) -m4_pattern_allow(GMP_LDFLAGS) @@ -129,10 +136,11 @@ diff -Nurd gmp-5.1.0/configure.ac gmp-5.1.0/configure.ac -m4_pattern_allow(GMP_NAIL_BITS) -m4_pattern_allow(GMP_NUMB_BITS) -m4_pattern_allow(GMP_NONSTD_ABI) - +-m4_pattern_allow(GMP_CPU_TYPE) + # If --target is not used then $target_alias is empty, but if say # "./configure athlon-pc-freebsd3.5" is used, then all three of -@@ -314,7 +307,7 @@ +@@ -348,7 +340,7 @@ AH_VERBATIM([HAVE_HOST_CPU_1], # After GMP specific searches and tests, the standard autoconf AC_PROG_CC is # called. User selections of CC etc are respected. # @@ -141,7 +149,7 @@ diff -Nurd gmp-5.1.0/configure.ac gmp-5.1.0/configure.ac # pre-testing, since they of course depend on AC_PROG_CC, and also some of # them cache their results, which is not wanted. # -@@ -406,7 +399,7 @@ +@@ -440,7 +432,7 @@ abilist="standard" # FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring # c89 over cc here. But note that on HP-UX c89 provides a castrated # environment, and would want to be excluded somehow. Maybe @@ -150,61 +158,65 @@ diff -Nurd gmp-5.1.0/configure.ac gmp-5.1.0/configure.ac # we don't need to worry. # cclist="gcc cc" -@@ -1727,7 +1720,7 @@ +@@ -1843,7 +1835,7 @@ esac CFLAGS_or_unset=${CFLAGS-'(unset)'} CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'} - + -cat >&AC_FD_CC <<EOF +cat >&AS_MESSAGE_LOG_FD() <<EOF User: ABI=$ABI CC=$CC -@@ -2147,7 +2140,6 @@ - +@@ -2264,7 +2256,6 @@ AC_SUBST(DEFN_LONG_LONG_LIMB) + # The C compiler and preprocessor, put into ANSI mode if possible. AC_PROG_CC -AC_PROG_CC_STDC AC_PROG_CPP - - -@@ -2169,11 +2161,11 @@ - + + +@@ -2286,11 +2277,11 @@ AC_SUBST(CCAS) + # The C++ compiler, if desired. want_cxx=no +AC_PROG_CXX if test $enable_cxx != no; then test_CXXFLAGS=${CXXFLAGS+set} - AC_PROG_CXX - + - echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC + echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AS_MESSAGE_LOG_FD() cxxflags_ac_prog_cxx=$CXXFLAGS cxxflags_list=ac_prog_cxx - -@@ -2289,7 +2281,7 @@ + +@@ -2412,7 +2403,7 @@ if test "$enable_assembly" = "no"; then fi - - + + -cat >&AC_FD_CC <<EOF +cat >&AS_MESSAGE_LOG_FD() <<EOF Decided: ABI=$ABI CC=$CC -@@ -3638,7 +3630,7 @@ +@@ -3781,7 +3772,7 @@ GMP_FINISH # FIXME: Upcoming version of autoconf/automake may not like broken lines. # Right now automake isn't accepting the new AC_CONFIG_FILES scheme. - + -AC_OUTPUT(Makefile \ +AC_CONFIG_FILES([Makefile \ mpf/Makefile mpn/Makefile mpq/Makefile \ mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile \ tests/Makefile tests/devel/Makefile \ -@@ -3647,7 +3639,8 @@ +@@ -3790,7 +3781,8 @@ AC_OUTPUT(Makefile \ tests/cxx/Makefile \ doc/Makefile tune/Makefile \ demos/Makefile demos/calc/Makefile demos/expr/Makefile \ - gmp.h:gmp-h.in) + gmp.h:gmp-h.in]) +AC_OUTPUT - + AC_MSG_NOTICE([summary of build options: + +-- +1.9.1 + diff --git a/meta/recipes-support/gmp/gmp/gmp-6.0.0-ppc64.patch b/meta/recipes-support/gmp/gmp/gmp-6.0.0-ppc64.patch new file mode 100644 index 0000000000..1113b41ecd --- /dev/null +++ b/meta/recipes-support/gmp/gmp/gmp-6.0.0-ppc64.patch @@ -0,0 +1,26 @@ + +Signed-off-by: Armin Kuster <akuster808@gmail.com> + +This patch with pulled from gmp. +https://gmplib.org/repo/gmp/rev/4a6d258b467f +Upstream-Status: Backport + +# HG changeset patch +# User Torbjorn Granlund <tege@gmplib.org> +# Date 1395835068 -3600 +# Node ID 4a6d258b467f661da0894cc60ecd060f2e3c67c7 +# Parent 301ce2788826a2d4d2725bd5cf01e998638db37a +Provide default for BMOD_1_TO_MOD_1_THRESHOLD. + +diff -r 301ce2788826 -r 4a6d258b467f mpn/powerpc64/mode64/gcd_1.asm +--- a/mpn/powerpc64/mode64/gcd_1.asm Tue Mar 25 15:34:52 2014 +0100 ++++ b/mpn/powerpc64/mode64/gcd_1.asm Wed Mar 26 12:57:48 2014 +0100 +@@ -43,6 +43,9 @@ + define(`n', `r4') + define(`v0', `r5') + ++ifdef(`BMOD_1_TO_MOD_1_THRESHOLD',, ++ `define(`BMOD_1_TO_MOD_1_THRESHOLD',30)') ++ + EXTERN_FUNC(mpn_mod_1) + EXTERN_FUNC(mpn_modexact_1c_odd) diff --git a/meta/recipes-support/gmp/gmp_4.2.1.bb b/meta/recipes-support/gmp/gmp_4.2.1.bb deleted file mode 100644 index 5c93925daa..0000000000 --- a/meta/recipes-support/gmp/gmp_4.2.1.bb +++ /dev/null @@ -1,20 +0,0 @@ -SUMMARY = "GNU multiprecision arithmetic library" -DESCRIPTION = "GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers" -HOMEPAGE = "http://gmplib.org/" -BUGTRACKER = "http://gmplib.org/mailman/listinfo/gmp-bugs" -# demo is licensed under GPLv2+, which however we don't package at all -LICENSE = "LGPLv2.1+" -LIC_FILES_CHKSUM = "file://COPYING;md5=892f569a555ba9c07a568a7c0c4fa63a \ - file://COPYING.LIB;md5=fbc093901857fcd118f065f900982c24 \ - file://gmp-h.in;beginline=6;endline=21;md5=e056f74a12c3277d730dbcfb85d2ca34" -PR = "r2" - -SRC_URI = "${GNU_MIRROR}/gmp/${BP}.tar.bz2 \ - file://disable-stdc.patch \ - file://gmp_fix_for_automake-1.12.patch \ - " - -SRC_URI[md5sum] = "091c56e0e1cca6b09b17b69d47ef18e3" -SRC_URI[sha256sum] = "d07ffcb37eecec35c5ec72516d10b35fdf6e6fef1fcf1dcd37e30b8cbf8bf941" - -inherit autotools texinfo diff --git a/meta/recipes-support/gmp/gmp_5.1.1.bb b/meta/recipes-support/gmp/gmp_5.1.1.bb deleted file mode 100644 index 602061096a..0000000000 --- a/meta/recipes-support/gmp/gmp_5.1.1.bb +++ /dev/null @@ -1,11 +0,0 @@ -require gmp.inc -LICENSE="LGPLv3&GPLv3" -LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ - file://version.c;endline=18;md5=d8c56b52b9092346b9f93b4da65ef790" - -SRC_URI_append = " file://use-includedir.patch \ - file://append_user_provided_flags.patch \ - " - -SRC_URI[md5sum] = "2fa018a7cd193c78494525f236d02dd6" -SRC_URI[sha256sum] = "a0d4779f48b36519dfaceb5f987a7c76fcac223258bebea3bb2244310970afad" diff --git a/meta/recipes-support/gmp/gmp_6.0.0.bb b/meta/recipes-support/gmp/gmp_6.0.0.bb new file mode 100644 index 0000000000..6218491142 --- /dev/null +++ b/meta/recipes-support/gmp/gmp_6.0.0.bb @@ -0,0 +1,14 @@ +require gmp.inc +LICENSE="GPLv2 | LGPLv3" +REVISION="a" +LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING.LESSERv3;md5=6a6a8e020838b23406c81b19c1d46df6 \ + file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ +" +SRC_URI_append = " file://use-includedir.patch \ + file://append_user_provided_flags.patch \ + file://gmp-6.0.0-ppc64.patch \ +" + +SRC_URI[md5sum] = "b7ff2d88cae7f8085bd5006096eed470" +SRC_URI[sha256sum] = "7f8e9a804b9c6d07164cf754207be838ece1219425d64e28cfa3e70d5c759aaf" diff --git a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing/0001-gsystem-subprocess.c-Enable-GNU-extensions-in-system.patch b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing/0001-gsystem-subprocess.c-Enable-GNU-extensions-in-system.patch new file mode 100644 index 0000000000..840666f302 --- /dev/null +++ b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing/0001-gsystem-subprocess.c-Enable-GNU-extensions-in-system.patch @@ -0,0 +1,35 @@ +From b1de2c6290bc0651fe87a8c4fb52e7a0a5fe6322 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Sun, 5 Oct 2014 16:01:49 -0700 +Subject: [PATCH] gsystem-subprocess.c: Enable GNU extensions in system C + library + +This should export O_CLOEXEC where it is only +available when _GNU_SOURCE is defined .e.g. uclibc based systems + +Signed-off-by: Khem Raj <raj.khem@gmail.com> + +Upstream-Status: Pending + +--- + src/libgsystem/gsystem-subprocess.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/libgsystem/gsystem-subprocess.c b/src/libgsystem/gsystem-subprocess.c +index a967896..a52a362 100644 +--- a/src/libgsystem/gsystem-subprocess.c ++++ b/src/libgsystem/gsystem-subprocess.c +@@ -18,6 +18,10 @@ + + #include "config.h" + ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE ++#endif ++ + #define _GSYSTEM_NO_LOCAL_ALLOC + #include "libgsystem.h" + +-- +2.1.1 + diff --git a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2014.1.bb b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2014.1.bb index 146a02ac7d..482de99d4d 100644 --- a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2014.1.bb +++ b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2014.1.bb @@ -2,7 +2,9 @@ SUMMARY = "Test runner for GNOME-style installed tests" HOMEPAGE = "https://wiki.gnome.org/GnomeGoals/InstalledTests" LICENSE = "LGPLv2+" -SRC_URI = "${GNOME_MIRROR}/${BPN}/${PV}/${BPN}-${PV}.tar.xz" +SRC_URI = "${GNOME_MIRROR}/${BPN}/${PV}/${BPN}-${PV}.tar.xz \ + file://0001-gsystem-subprocess.c-Enable-GNU-extensions-in-system.patch \ + " SRC_URI[md5sum] = "a608ad72a77e23a1aecdfd8d07a94baf" SRC_URI[sha256sum] = "1a3eed73678dd22d09d6a7ec4f899557df3e8b4a802affa76d0f163b31286539" @@ -11,7 +13,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \ DEPENDS = "glib-2.0" -inherit autotools-brokensep pkgconfig +inherit autotools pkgconfig + +PR = "r1" PACKAGECONFIG ??= "" PACKAGECONFIG[journald] = "--with-systemd-journal,--without-systemd-journal,systemd,systemd" diff --git a/meta/recipes-support/gnupg/gnupg-1.4.7/CVE-2013-4242.patch b/meta/recipes-support/gnupg/gnupg-1.4.7/CVE-2013-4242.patch new file mode 100644 index 0000000000..c9addca28e --- /dev/null +++ b/meta/recipes-support/gnupg/gnupg-1.4.7/CVE-2013-4242.patch @@ -0,0 +1,62 @@ +From e2202ff2b704623efc6277fb5256e4e15bac5676 Mon Sep 17 00:00:00 2001 +From: Werner Koch <wk@gnupg.org> +Date: Thu, 25 Jul 2013 11:17:52 +0200 +Subject: [PATCH] Mitigate a flush+reload cache attack on RSA secret + exponents. + +commit e2202ff2b704623efc6277fb5256e4e15bac5676 from +git://git.gnupg.org/libgcrypt.git + +* mpi/mpi-pow.c (gcry_mpi_powm): Always perfrom the mpi_mul for +exponents in secure memory. + +Upstream-Status: Backport + +Signed-off-by: Kai Kang <kai.kang@windriver.com> +-- + +The attack is published as http://eprint.iacr.org/2013/448 : + +Flush+Reload: a High Resolution, Low Noise, L3 Cache Side-Channel +Attack by Yuval Yarom and Katrina Falkner. 18 July 2013. + + Flush+Reload is a cache side-channel attack that monitors access to + data in shared pages. In this paper we demonstrate how to use the + attack to extract private encryption keys from GnuPG. The high + resolution and low noise of the Flush+Reload attack enables a spy + program to recover over 98% of the bits of the private key in a + single decryption or signing round. Unlike previous attacks, the + attack targets the last level L3 cache. Consequently, the spy + program and the victim do not need to share the execution core of + the CPU. The attack is not limited to a traditional OS and can be + used in a virtualised environment, where it can attack programs + executing in a different VM. + +Index: gnupg-1.4.7/mpi/mpi-pow.c +=================================================================== +--- gnupg-1.4.7.orig/mpi/mpi-pow.c ++++ gnupg-1.4.7/mpi/mpi-pow.c +@@ -212,7 +212,13 @@ mpi_powm( MPI res, MPI base, MPI exponen + tp = rp; rp = xp; xp = tp; + rsize = xsize; + +- if( (mpi_limb_signed_t)e < 0 ) { ++ /* To mitigate the Yarom/Falkner flush+reload cache ++ * side-channel attack on the RSA secret exponent, we do ++ * the multiplication regardless of the value of the ++ * high-bit of E. But to avoid this performance penalty ++ * we do it only if the exponent has been stored in secure ++ * memory and we can thus assume it is a secret exponent. */ ++ if (esec || (mpi_limb_signed_t)e < 0) { + /*mpihelp_mul( xp, rp, rsize, bp, bsize );*/ + if( bsize < KARATSUBA_THRESHOLD ) { + mpihelp_mul( xp, rp, rsize, bp, bsize ); +@@ -227,6 +233,8 @@ mpi_powm( MPI res, MPI base, MPI exponen + mpihelp_divrem(xp + msize, 0, xp, xsize, mp, msize); + xsize = msize; + } ++ } ++ if ( (mpi_limb_signed_t)e < 0 ) { + + tp = rp; rp = xp; xp = tp; + rsize = xsize; diff --git a/meta/recipes-support/gnupg/gnupg/dirmngr-uses-libgpg-error.patch b/meta/recipes-support/gnupg/gnupg/dirmngr-uses-libgpg-error.patch new file mode 100644 index 0000000000..3dc506c2f2 --- /dev/null +++ b/meta/recipes-support/gnupg/gnupg/dirmngr-uses-libgpg-error.patch @@ -0,0 +1,16 @@ +Upstream-Status: Pending +Signed-off-by: Saul Wold <sgw@linux.intel.com> +Index: gnupg-2.1.0/dirmngr/Makefile.am +=================================================================== +--- gnupg-2.1.0.orig/dirmngr/Makefile.am ++++ gnupg-2.1.0/dirmngr/Makefile.am +@@ -71,7 +71,8 @@ endif + dirmngr_LDADD = $(libcommontlsnpth) $(libcommonpth) \ + ../gl/libgnu.a $(DNSLIBS) $(LIBASSUAN_LIBS) \ + $(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(NPTH_LIBS) \ +- $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV) ++ $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV) \ ++ $(GPG_ERROR_LIBS) + if !USE_LDAPWRAPPER + dirmngr_LDADD += $(ldaplibs) + endif diff --git a/meta/recipes-support/gnupg/gnupg/pkgconfig.patch b/meta/recipes-support/gnupg/gnupg/pkgconfig.patch index ae92392dae..5e036bac90 100644 --- a/meta/recipes-support/gnupg/gnupg/pkgconfig.patch +++ b/meta/recipes-support/gnupg/gnupg/pkgconfig.patch @@ -5,11 +5,11 @@ Upstream-Status: Rejected RP 2014/5/22 -Index: gnupg-2.0.22/m4/gnupg-pth.m4 +Index: gnupg-2.1.0/m4/gnupg-pth.m4 =================================================================== ---- gnupg-2.0.22.orig/m4/gnupg-pth.m4 2013-10-04 12:32:53.000000000 +0000 -+++ gnupg-2.0.22/m4/gnupg-pth.m4 2014-05-13 21:33:21.000000000 +0000 -@@ -17,33 +17,9 @@ +--- gnupg-2.1.0.orig/m4/gnupg-pth.m4 ++++ gnupg-2.1.0/m4/gnupg-pth.m4 +@@ -17,33 +17,9 @@ dnl implied warranty of MERCHANTABILITY # Taken and modified from the m4 macros which come with Pth. AC_DEFUN([GNUPG_PTH_VERSION_CHECK], [ @@ -44,7 +44,7 @@ Index: gnupg-2.0.22/m4/gnupg-pth.m4 if test $have_pth = yes; then AC_MSG_RESULT(yes) AC_MSG_CHECKING([whether PTH installation is sane]) -@@ -51,9 +29,9 @@ +@@ -51,9 +27,9 @@ AC_DEFUN([GNUPG_PTH_VERSION_CHECK], _gnupg_pth_save_cflags=$CFLAGS _gnupg_pth_save_ldflags=$LDFLAGS _gnupg_pth_save_libs=$LIBS @@ -57,30 +57,34 @@ Index: gnupg-2.0.22/m4/gnupg-pth.m4 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pth.h> ], [[ pth_init ();]])], -@@ -81,23 +59,11 @@ +@@ -80,26 +56,13 @@ AC_DEFUN([GNUPG_PTH_VERSION_CHECK], + # PTH_CLFAGS and PTH_LIBS are AS_SUBST. # AC_DEFUN([GNUPG_PATH_PTH], -+[ -[ AC_ARG_WITH(pth-prefix, - AC_HELP_STRING([--with-pth-prefix=PFX], -- [prefix where GNU Pth is installed]), +- [prefix where GNU Pth is installed (optional)]), - pth_config_prefix="$withval", pth_config_prefix="") - if test x$pth_config_prefix != x ; then - PTH_CONFIG="$pth_config_prefix/bin/pth-config" - fi - AC_PATH_PROG(PTH_CONFIG, pth-config, no) ++[ tmp=ifelse([$1], ,1.3.7,$1) - if test "$PTH_CONFIG" != "no"; then - GNUPG_PTH_VERSION_CHECK($tmp) -- if test $have_pth = yes; then +- if test $have_pth = yes; then - PTH_CFLAGS=`$PTH_CONFIG --cflags` - PTH_LIBS=`$PTH_CONFIG --ldflags` - PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`" +- AC_DEFINE(HAVE_PTH, 1, + GNUPG_PTH_VERSION_CHECK($tmp) + if test $have_pth = yes; then - AC_DEFINE(HAVE_PTH, 1, ++ AC_DEFINE(HAVE_PTH, 1, [Defined if the GNU Pth is available]) - fi fi AC_SUBST(PTH_CFLAGS) AC_SUBST(PTH_LIBS) + ]) +- diff --git a/meta/recipes-support/gnupg/gnupg/use-pkgconfig-instead-of-npth-config.patch b/meta/recipes-support/gnupg/gnupg/use-pkgconfig-instead-of-npth-config.patch new file mode 100644 index 0000000000..c6dbf1b75a --- /dev/null +++ b/meta/recipes-support/gnupg/gnupg/use-pkgconfig-instead-of-npth-config.patch @@ -0,0 +1,72 @@ +Upstream-Status: Inappropriate [openembedded specific] + +Signed-off-by: Saul Wold <sgw@linux.intel.com> + + +Index: gnupg-2.1.0/m4/npth.m4 +=================================================================== +--- gnupg-2.1.0.orig/m4/npth.m4 ++++ gnupg-2.1.0/m4/npth.m4 +@@ -17,10 +17,10 @@ AC_DEFUN([_AM_PATH_NPTH_CONFIG], + if test "x$npth_config_prefix" != x ; then + NPTH_CONFIG="$npth_config_prefix/bin/npth-config" + fi +- AC_PATH_PROG(NPTH_CONFIG, npth-config, no) ++ AC_PATH_PROG(PKGCONFIG, pkg-config, no) + +- if test "$NPTH_CONFIG" != "no" ; then +- npth_version=`$NPTH_CONFIG --version` ++ if test "$PKGCONFIG" != "no" ; then ++ npth_version=`$PKGCONFIG --modversion npth` + fi + npth_version_major=`echo $npth_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` +@@ -45,7 +45,7 @@ AC_DEFUN([AM_PATH_NPTH], + + AC_MSG_CHECKING(for NPTH - version >= $min_npth_version) + ok=no +- if test "$NPTH_CONFIG" != "no" ; then ++ if test "$PKGCONFIG" != "no" ; then + req_major=`echo $min_npth_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_npth_version | \ +@@ -66,28 +66,9 @@ AC_DEFUN([AM_PATH_NPTH], + fi + if test $ok = yes; then + AC_MSG_RESULT([yes ($npth_version)]) +- else +- AC_MSG_RESULT(no) +- fi +- if test $ok = yes; then +- # If we have a recent NPTH, we should also check that the +- # API is compatible. +- if test "$req_npth_api" -gt 0 ; then +- tmp=`$NPTH_CONFIG --api-version 2>/dev/null || echo 0` +- if test "$tmp" -gt 0 ; then +- AC_MSG_CHECKING([NPTH API version]) +- if test "$req_npth_api" -eq "$tmp" ; then +- AC_MSG_RESULT([okay]) +- else +- ok=no +- AC_MSG_RESULT([does not match. want=$req_npth_api got=$tmp]) +- fi +- fi +- fi +- fi +- if test $ok = yes; then +- NPTH_CFLAGS=`$NPTH_CONFIG --cflags` +- NPTH_LIBS=`$NPTH_CONFIG --libs` ++ NPTH_CFLAGS=`$PKGCONFIG --cflags npth` ++ NPTH_LIBS=`$PKGCONFIG --libs npth` ++ AC_MSG_WARN([[GOT HERE - $NPTH_LIBS ]]) + ifelse([$2], , :, [$2]) + npth_config_host=`$NPTH_CONFIG --host 2>/dev/null || echo none` + if test x"$npth_config_host" != xnone ; then +@@ -103,6 +84,7 @@ AC_DEFUN([AM_PATH_NPTH], + fi + fi + else ++ AC_MSG_RESULT(no) + NPTH_CFLAGS="" + NPTH_LIBS="" + ifelse([$3], , :, [$3]) diff --git a/meta/recipes-support/gnupg/gnupg_1.4.7.bb b/meta/recipes-support/gnupg/gnupg_1.4.7.bb index 031eaf3cab..aef515d534 100644 --- a/meta/recipes-support/gnupg/gnupg_1.4.7.bb +++ b/meta/recipes-support/gnupg/gnupg_1.4.7.bb @@ -17,6 +17,7 @@ SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-${PV}.tar.bz2 \ file://curl_typeof_fix_backport.patch \ file://CVE-2013-4351.patch \ file://CVE-2013-4576.patch \ + file://CVE-2013-4242.patch \ " SRC_URI[md5sum] = "b06a141cca5cd1a55bbdd25ab833303c" @@ -95,3 +96,7 @@ FILES_gpgv = "${bindir}/gpgv" # Exclude debug files from the main packages FILES_${PN} = "${bindir}/* ${datadir}/${BPN} ${libexecdir}/${BPN}/*" FILES_${PN}-dbg += "${libexecdir}/${BPN}/.debug" + +PACKAGECONFIG ??= "" +PACKAGECONFIG[curl] = "--with-libcurl=${STAGING_LIBDIR},--without-libcurl,curl" +PACKAGECONFIG[libusb] = "--with-libusb=${STAGING_LIBDIR},--without-libusb,libusb-compat" diff --git a/meta/recipes-support/gnupg/gnupg_2.0.22.bb b/meta/recipes-support/gnupg/gnupg_2.1.1.bb index 0b003624c2..a7c42545bd 100644 --- a/meta/recipes-support/gnupg/gnupg_2.0.22.bb +++ b/meta/recipes-support/gnupg/gnupg_2.1.1.bb @@ -4,25 +4,26 @@ LICENSE = "GPLv3 & LGPLv3" LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949 \ file://COPYING.LIB;md5=6a6a8e020838b23406c81b19c1d46df6" -DEPENDS = "${PTH} libassuan libksba zlib bzip2 readline libgcrypt" -PTH = "pth" -PTH_libc-uclibc = "npth" +DEPENDS = "npth libassuan libksba zlib bzip2 readline libgcrypt" inherit autotools gettext texinfo pkgconfig SRC_URI = "ftp://ftp.gnupg.org/gcrypt/${BPN}/${BPN}-${PV}.tar.bz2 \ - file://pkgconfig.patch" + file://pkgconfig.patch \ + file://use-pkgconfig-instead-of-npth-config.patch \ + file://dirmngr-uses-libgpg-error.patch \ + " -SRC_URI[md5sum] = "ee22e7b4fdbfcb50229c2e6db6db291e" -SRC_URI[sha256sum] = "437d0ab259854359fc48aa8795af80cff4975e559c111c92c03d0bc91408e251" +SRC_URI[md5sum] = "9a314c3dcef0a091de90b6aa4d467db5" +SRC_URI[sha256sum] = "70ecd01d2875db62624c911c2fd815742f50aef5492698eb3bfc09a08690ce49" EXTRA_OECONF = "--disable-ldap \ --disable-ccid-driver \ - --without-libcurl \ --with-zlib=${STAGING_LIBDIR}/.. \ --with-bzip2=${STAGING_LIBDIR}/.. \ --with-readline=${STAGING_LIBDIR}/.. \ " +RRECOMMENDS_${PN} = "pinentry" do_configure_prepend () { # Else these could be used in prefernce to those in aclocal-copy @@ -36,3 +37,5 @@ do_install_append() { ln -sf gpg2 ${D}${bindir}/gpg ln -sf gpgv2 ${D}${bindir}/gpgv } + +RDEPENDS_${PN} = "gnutls" diff --git a/meta/recipes-support/gnutls/gnutls.inc b/meta/recipes-support/gnutls/gnutls.inc index 8820b0ef39..45fb529fa1 100644 --- a/meta/recipes-support/gnutls/gnutls.inc +++ b/meta/recipes-support/gnutls/gnutls.inc @@ -17,7 +17,7 @@ SHRT_VER = "${@d.getVar('PV',1).split('.')[0]}.${@d.getVar('PV',1).split('.')[1] SRC_URI = "ftp://ftp.gnutls.org/gcrypt/gnutls/v${SHRT_VER}/gnutls-${PV}.tar.xz" -inherit autotools-brokensep texinfo binconfig pkgconfig gettext lib_package +inherit autotools texinfo binconfig pkgconfig gettext lib_package EXTRA_OECONF="--disable-rpath \ --with-included-libtasn1 \ @@ -25,6 +25,7 @@ EXTRA_OECONF="--disable-rpath \ --with-libpthread-prefix=${STAGING_DIR_HOST}${prefix} \ --with-libz-prefix=${STAGING_DIR_HOST}${prefix} \ --disable-guile \ + --disable-crywrap \ --without-p11-kit \ " @@ -34,6 +35,9 @@ do_configure_prepend() { done } +PACKAGECONFIG ??= "" +PACKAGECONFIG[tpm] = "--with-tpm, --without-tpm, trousers" + PACKAGES =+ "${PN}-openssl ${PN}-xx" FILES_${PN}-dev += "${bindir}/gnutls-cli-debug" @@ -42,4 +46,4 @@ FILES_${PN}-xx = "${libdir}/libgnutlsxx.so.*" LDFLAGS_append_libc-uclibc += " -pthread" -BBCLASSEXTEND = "native" +BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-support/gnutls/gnutls/configure.ac-fix-sed-command.patch b/meta/recipes-support/gnutls/gnutls/configure.ac-fix-sed-command.patch new file mode 100644 index 0000000000..44a9934b5d --- /dev/null +++ b/meta/recipes-support/gnutls/gnutls/configure.ac-fix-sed-command.patch @@ -0,0 +1,31 @@ +From eb93aa7b986c84da60a3db40afb29d1a70c50223 Mon Sep 17 00:00:00 2001 +From: Robert Yang <liezhi.yang@windriver.com> +Date: Sat, 17 Jan 2015 17:02:15 +0000 +Subject: [PATCH] configure.ac: fix sed command + +The "sed 's/.bak//g'" matchs "bitbake", which would cause strange errors +when the S contains "bitbake", fix to "sed 's/\.bak$//'`" + +Upstream-Status: Pending + +Signed-off-by: Robert Yang <liezhi.yang@windriver.com> +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index c6818a0..1c4582d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -466,7 +466,7 @@ if test "$NEED_LIBOPTS_DIR" = "true";then + dnl replace libopts-generated files with distributed backups, if present + missing_baks= + for i in ${srcdir}/src/*-args.c.bak ${srcdir}/src/*-args.h.bak; do +- nam=`echo $i|sed 's/.bak//g'` ++ nam=`echo $i|sed 's/\.bak$//'` + if test -f $i;then + cp -f $i $nam + else +-- +2.0.1 + diff --git a/meta/recipes-support/gnutls/gnutls_3.2.15.bb b/meta/recipes-support/gnutls/gnutls_3.2.15.bb deleted file mode 100644 index ce8bdfdb31..0000000000 --- a/meta/recipes-support/gnutls/gnutls_3.2.15.bb +++ /dev/null @@ -1,7 +0,0 @@ -require gnutls.inc - -SRC_URI += "file://correct_rpl_gettimeofday_signature.patch \ - " - -SRC_URI[md5sum] = "ec3b06f80e312137386c5d322183ca5a" -SRC_URI[sha256sum] = "30bdc7b34b220258f714602cdf0afa1abf0883bf926f35f400c88b1c72ca77b9" diff --git a/meta/recipes-support/gnutls/gnutls_3.3.12.bb b/meta/recipes-support/gnutls/gnutls_3.3.12.bb new file mode 100644 index 0000000000..0d6ec756e6 --- /dev/null +++ b/meta/recipes-support/gnutls/gnutls_3.3.12.bb @@ -0,0 +1,7 @@ +require gnutls.inc + +SRC_URI += "file://correct_rpl_gettimeofday_signature.patch \ + file://configure.ac-fix-sed-command.patch \ + " +SRC_URI[md5sum] = "a37b20b4352a5f542367ded904729c90" +SRC_URI[sha256sum] = "67ab3e92c5d48f3323b897d7c1aa0bb2af6f3a84f5bd9931cda163a7ff32299b" diff --git a/meta/recipes-support/gnutls/libtasn1_3.5.bb b/meta/recipes-support/gnutls/libtasn1_4.0.bb index 0c0ebcd4c7..289833ec80 100644 --- a/meta/recipes-support/gnutls/libtasn1_3.5.bb +++ b/meta/recipes-support/gnutls/libtasn1_4.0.bb @@ -13,8 +13,8 @@ SRC_URI = "${GNU_MIRROR}/libtasn1/libtasn1-${PV}.tar.gz \ file://dont-depend-on-help2man.patch \ " -SRC_URI[md5sum] = "62c76352d0e17df1c082fe1c38bad5cf" -SRC_URI[sha256sum] = "d7fcffbc08b6413533b817d4ede5c2eadcb3dcb21c71cc91de6ece25191519ed" +SRC_URI[md5sum] = "d3d2d9bce3b6668b9827a9df52635be1" +SRC_URI[sha256sum] = "41d044f7644bdd1c4f8a5c15ac1885ca1fcbf32f5f6dd4760a19278b979857fe" inherit autotools texinfo binconfig lib_package diff --git a/meta/recipes-support/gpgme/gpgme-1.4.3/disable_gpgconf_check.patch b/meta/recipes-support/gpgme/gpgme-1.4.3/disable_gpgconf_check.patch deleted file mode 100644 index df0953069c..0000000000 --- a/meta/recipes-support/gpgme/gpgme-1.4.3/disable_gpgconf_check.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 1.2.0, gpgme will check if gpgconf & g13(from 1.3.0) exist, and cause -configure failure if not founding them in cross-compile environment. We can -add the gnupg-native to get them, but still have some issues: - -1. need add new package: libksba, update libassuan(not in sato), and extend - native support in some other packages(libgcrypt, libgpg-error, pth...) -2. Even we have gnupg, the g13 only exist in development branch, so that we - still have the g13 check failure in configure. - -I have searched the compile log, and found gpgconf/g13 are not used. So use a -simple method here, throw a warning mesg rather than an error here just like in -non-cross-compile environment. - -Signed-off-by: Zhai Edwin <edwin.zhai@intel.com> - -Upstream-Status: Inappropriate [embedded specific] - -Index: gpgme-1.3.0/configure.ac -=================================================================== ---- gpgme-1.3.0.orig/configure.ac 2010-07-21 09:38:09.000000000 +0800 -+++ gpgme-1.3.0/configure.ac 2010-07-21 09:39:19.000000000 +0800 -@@ -574,7 +574,7 @@ - *** Could not find gpgconf, install gpgconf or use --with-gpgconf=PATH to enable it - ***]) - else -- AC_MSG_ERROR([ -+ AC_MSG_WARN([ - *** - *** Can not determine path to gpgconf when cross-compiling, use --with-gpgconf=PATH - ***]) -@@ -670,7 +670,7 @@ - *** Could not find g13, install g13 or use --with-g13=PATH to enable it - ***]) - else -- AC_MSG_ERROR([ -+ AC_MSG_WARN([ - *** - *** Can not determine path to g13 when cross-compiling, use --with-g13=PATH - ***]) diff --git a/meta/recipes-support/gpgme/gpgme-1.4.3/gpgme.pc b/meta/recipes-support/gpgme/gpgme-1.4.3/gpgme.pc new file mode 100644 index 0000000000..30a4d56d6e --- /dev/null +++ b/meta/recipes-support/gpgme/gpgme-1.4.3/gpgme.pc @@ -0,0 +1,10 @@ +prefix=/usr +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: gpgme +Description: GNU Privacy Guard Made Easy +Version: 1.4.3 +Requires: +Libs: -L${libdir} -lgpgme -lassuan -lgpg-error +Cflags: -I${includedir} diff --git a/meta/recipes-support/gpgme/gpgme_1.4.3.bb b/meta/recipes-support/gpgme/gpgme_1.4.3.bb index ef08d4f2f4..98fd68b837 100644 --- a/meta/recipes-support/gpgme/gpgme_1.4.3.bb +++ b/meta/recipes-support/gpgme/gpgme_1.4.3.bb @@ -10,16 +10,15 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ file://src/engine.h;endline=22;md5=4b6d8ba313d9b564cc4d4cfb1640af9d" SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-${PV}.tar.bz2 \ - file://disable_gpgconf_check.patch" + file://gpgme.pc" SRC_URI[md5sum] = "334e524cffa8af4e2f43ae8afe585672" SRC_URI[sha256sum] = "2d1cc12411753752d9c5b9037e6fd3fd363517af720154768cc7b46b60120496" DEPENDS = "libgpg-error libassuan" -EXTRA_OECONF = "--with-gpg=${bindir}/gpg --without-gpgsm" - BINCONFIG = "${bindir}/gpgme-config" +EXTRA_OECONF = "--with-gpg=${bindir}/gpg --without-gpgsm --with-gpgconf=no --with-g13=no" inherit autotools texinfo binconfig-disabled pkgconfig @@ -32,3 +31,8 @@ do_configure_prepend () { rm -f ${S}/m4/gpg-error.m4 rm -f ${S}/m4/libassuan.m4 } + +do_install_append () { + install -d ${D}${libdir}/pkgconfig + install -m 0644 ${WORKDIR}/gpgme.pc ${D}${libdir}/pkgconfig/ +} diff --git a/meta/recipes-support/icu/icu.inc b/meta/recipes-support/icu/icu.inc index 77321076d5..f4254b5f5c 100644 --- a/meta/recipes-support/icu/icu.inc +++ b/meta/recipes-support/icu/icu.inc @@ -1,5 +1,8 @@ SUMMARY = "International Component for Unicode libraries" -DESCRIPTION = "The International Component for Unicode (ICU) is a mature, portable set of C/C++ and Java libraries for Unicode support, software internationalization (I18N) and globalization (G11N), giving applications the same results on all platforms." +DESCRIPTION = "The International Component for Unicode (ICU) is a mature, \ +portable set of C/C++ and Java libraries for Unicode support, software \ +internationalization (I18N) and globalization (G11N), giving applications the \ +same results on all platforms." HOMEPAGE = "http://site.icu-project.org/" LICENSE = "ICU" @@ -7,9 +10,9 @@ DEPENDS = "icu-native" DEPENDS_class-native = "" S = "${WORKDIR}/icu/source" +SPDX_S = "${WORKDIR}/icu" STAGING_ICU_DIR_NATIVE = "${STAGING_DATADIR_NATIVE}/${BPN}/${PV}" -PARALLEL_MAKE = "" CPPFLAGS_append_libc-uclibc = " -DU_TIMEZONE=0" BINCONFIG = "${bindir}/icu-config" @@ -23,23 +26,13 @@ EXTRA_OECONF = "--with-cross-build=${STAGING_ICU_DIR_NATIVE}" EXTRA_OECONF_class-native = "" EXTRA_OECONF_class-nativesdk = "--with-cross-build=${STAGING_ICU_DIR_NATIVE}" -# ICU puts custom m4 autoconf functions in aclocal.m4. -# However, this file is deleted in our build system. -# To make it work, we copy aclocal.m4 to acinclude.m4. -# This is a bug of ICU. See bug reference: -# http://bugs.icu-project.org/trac/ticket/9790 -do_configure_prepend() { - [ -f ${S}/acinclude.m4 ] || cp ${S}/aclocal.m4 ${S}/acinclude.m4 -} - do_install_append_class-native() { mkdir -p ${D}/${STAGING_ICU_DIR_NATIVE}/config cp -r ${B}/config/icucross.mk ${D}/${STAGING_ICU_DIR_NATIVE}/config - cp -r ${B}/config/icucross.inc ${D}/${STAGING_ICU_DIR_NATIVE}/config + cp -r ${B}/config/icucross.inc ${D}/${STAGING_ICU_DIR_NATIVE}/config cp -r ${B}/lib ${D}/${STAGING_ICU_DIR_NATIVE} cp -r ${B}/bin ${D}/${STAGING_ICU_DIR_NATIVE} cp -r ${B}/tools ${D}/${STAGING_ICU_DIR_NATIVE} - } PACKAGES =+ "libicudata libicuuc libicui18n libicule libiculx libicutu libicuio" @@ -55,4 +48,3 @@ FILES_libicutu = "${libdir}/libicutu.so.*" FILES_libicuio = "${libdir}/libicuio.so.*" BBCLASSEXTEND = "native nativesdk" - diff --git a/meta/recipes-support/icu/icu_53.1.bb b/meta/recipes-support/icu/icu_54.1.bb index d93af68438..45b5cb6001 100644 --- a/meta/recipes-support/icu/icu_53.1.bb +++ b/meta/recipes-support/icu/icu_54.1.bb @@ -1,6 +1,6 @@ require icu.inc -LIC_FILES_CHKSUM = "file://../license.html;md5=8b139ac5b93769623bd343318048238c" +LIC_FILES_CHKSUM = "file://../license.html;md5=9890f5ff4ed056a0c2fa84848b9b6066" def icu_download_version(d): pvsplit = d.getVar('PV', True).split('.') @@ -16,6 +16,6 @@ SRC_URI = "${BASE_SRC_URI} \ SRC_URI_append_class-target = "\ file://0001-Disable-LDFLAGSICUDT-for-Linux.patch \ " +SRC_URI[md5sum] = "e844caed8f2ca24c088505b0d6271bc0" +SRC_URI[sha256sum] = "d42bc9a8ca6a91c55eb0925c279f49e5b508d51ef26ac9850d9be55de5bb8ab3" -SRC_URI[md5sum] = "b73baa6fbdfef197608d1f69300919b9" -SRC_URI[sha256sum] = "6fa74fb5aac070c23eaba1711a7178fe582c59867484c5ec07c49002787a9a28" diff --git a/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch b/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch index 4f968812c9..f130d85652 100644 --- a/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch +++ b/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch @@ -6,18 +6,18 @@ Upstream-Status: Rejected Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Constantin Musca <constantinx.musca@intel.com> -Index: libassuan-2.1.1/Makefile.am +Index: libassuan-2.1.2/Makefile.am =================================================================== ---- libassuan-2.1.1.orig/Makefile.am 2014-05-13 20:57:37.794398357 +0000 -+++ libassuan-2.1.1/Makefile.am 2014-05-13 20:57:37.790398357 +0000 -@@ -24,10 +24,13 @@ +--- libassuan-2.1.2.orig/Makefile.am ++++ libassuan-2.1.2/Makefile.am +@@ -24,10 +24,13 @@ AUTOMAKE_OPTIONS = dist-bzip2 no-dist-gz # (A suitable gitlog-to-changelog script can be found in GnuPG master.) GITLOG_TO_CHANGELOG=gitlog-to-changelog +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libassuan.pc + - EXTRA_DIST = config.rpath autogen.sh README.GIT \ + EXTRA_DIST = autogen.sh autogen.rc README.GIT \ ChangeLog-2011 doc/ChangeLog-2011 src/ChangeLog-2011 \ tests/ChangeLog-2011 contrib/ChangeLog-2011 \ - build-aux/git-log-footer build-aux/git-log-fix @@ -25,10 +25,10 @@ Index: libassuan-2.1.1/Makefile.am SUBDIRS = m4 src doc tests -Index: libassuan-2.1.1/libassuan.pc.in +Index: libassuan-2.1.2/libassuan.pc.in =================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ libassuan-2.1.1/libassuan.pc.in 2014-05-13 20:57:37.790398357 +0000 +--- /dev/null ++++ libassuan-2.1.2/libassuan.pc.in @@ -0,0 +1,14 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ @@ -44,11 +44,11 @@ Index: libassuan-2.1.1/libassuan.pc.in +Libs: -L${libdir} -lassuan +Libs.private: -lgpg-error +Cflags: -I${includedir} -Index: libassuan-2.1.1/configure.ac +Index: libassuan-2.1.2/configure.ac =================================================================== ---- libassuan-2.1.1.orig/configure.ac 2014-05-13 20:57:37.794398357 +0000 -+++ libassuan-2.1.1/configure.ac 2014-05-13 20:57:37.790398357 +0000 -@@ -434,7 +434,7 @@ +--- libassuan-2.1.2.orig/configure.ac ++++ libassuan-2.1.2/configure.ac +@@ -439,7 +439,7 @@ AC_CONFIG_FILES([doc/Makefile]) AC_CONFIG_FILES([tests/Makefile]) AC_CONFIG_FILES([src/libassuan-config], [chmod +x src/libassuan-config]) AC_CONFIG_FILES([src/versioninfo.rc]) @@ -57,11 +57,11 @@ Index: libassuan-2.1.1/configure.ac AC_OUTPUT echo " -Index: libassuan-2.1.1/src/libassuan.m4 +Index: libassuan-2.1.2/src/libassuan.m4 =================================================================== ---- libassuan-2.1.1.orig/src/libassuan.m4 2011-04-06 15:37:26.000000000 +0000 -+++ libassuan-2.1.1/src/libassuan.m4 2014-05-13 21:06:53.402395537 +0000 -@@ -15,18 +15,6 @@ +--- libassuan-2.1.2.orig/src/libassuan.m4 ++++ libassuan-2.1.2/src/libassuan.m4 +@@ -15,18 +15,6 @@ dnl Returns ok set to yes or no. dnl AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON], [ AC_REQUIRE([AC_CANONICAL_HOST]) @@ -80,7 +80,7 @@ Index: libassuan-2.1.1/src/libassuan.m4 tmp=ifelse([$1], ,1:0.9.2,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then -@@ -37,51 +25,12 @@ +@@ -37,51 +25,12 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON], min_libassuan_version="$tmp" fi @@ -134,7 +134,7 @@ Index: libassuan-2.1.1/src/libassuan.m4 if test "$tmp" -gt 0 ; then AC_MSG_CHECKING([LIBASSUAN API version]) if test "$req_libassuan_api" -eq "$tmp" ; then -@@ -96,7 +45,7 @@ +@@ -96,7 +45,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON], if test $ok = yes; then if test x"$host" != x ; then @@ -143,7 +143,7 @@ Index: libassuan-2.1.1/src/libassuan.m4 if test x"$libassuan_config_host" != xnone ; then if test x"$libassuan_config_host" != x"$host" ; then AC_MSG_WARN([[ -@@ -137,12 +86,8 @@ +@@ -137,12 +86,8 @@ dnl AC_DEFUN([AM_PATH_LIBASSUAN], [ _AM_PATH_LIBASSUAN_COMMON($1) if test $ok = yes; then diff --git a/meta/recipes-support/libassuan/libassuan_2.1.1.bb b/meta/recipes-support/libassuan/libassuan_2.2.0.bb index d66023320d..d3a61ccc26 100644 --- a/meta/recipes-support/libassuan/libassuan_2.1.1.bb +++ b/meta/recipes-support/libassuan/libassuan_2.2.0.bb @@ -13,8 +13,8 @@ DEPENDS = "libgpg-error" SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libassuan/libassuan-${PV}.tar.bz2 \ file://libassuan-add-pkgconfig-support.patch" -SRC_URI[md5sum] = "757243cc4a71b30ed8d8dbe784035d36" -SRC_URI[sha256sum] = "23e2d67779b88e90d29fe1df6b157109f1c2a647d0f1b2a0f4295bb3c0b2039d" +SRC_URI[md5sum] = "a104faed3e97b9c302c5d67cc22b1d60" +SRC_URI[sha256sum] = "7df58ed70be4b694f77efd1f3b3f103c6311b6b71e04a370382f9fe8204f6ec6" BINCONFIG = "${bindir}/libassuan-config" @@ -22,5 +22,7 @@ inherit autotools texinfo binconfig-disabled pkgconfig do_configure_prepend () { # Else these could be used in prefernce to those in aclocal-copy - rm ${S}/m4/*.m4 + rm -f ${S}/m4/*.m4 } + +BBCLASSEXTEND = "native" diff --git a/meta/recipes-support/libbsd/libbsd_0.6.0.bb b/meta/recipes-support/libbsd/libbsd_0.7.0.bb index 70926bf742..902666da7f 100644 --- a/meta/recipes-support/libbsd/libbsd_0.6.0.bb +++ b/meta/recipes-support/libbsd/libbsd_0.7.0.bb @@ -9,12 +9,13 @@ DESCRIPTION = "This library provides useful functions commonly found on BSD syst HOMEPAGE = "http://libbsd.freedesktop.org/wiki/" LICENSE = "BSD-4-Clause & MIT" -LIC_FILES_CHKSUM = "file://COPYING;md5=98a015f07e71239b058398054f506f07" +LIC_FILES_CHKSUM = "file://COPYING;md5=f1530ea92aeaa1c5e2547cfd43905d8c" SECTION = "libs" DEPENDS = "" SRC_URI = "http://libbsd.freedesktop.org/releases/${BPN}-${PV}.tar.xz" -SRC_URI[md5sum] = "f6c75f0a9818e323a589bcbd560a0eb4" -SRC_URI[sha256sum] = "9e8f34ffa9c8579c87965a55a82d8ac37a1dc64858f717b7c49452ade277cc62" + +SRC_URI[md5sum] = "fcceb4e66fd448ca4ed42ba22a8babb0" +SRC_URI[sha256sum] = "0f3b0e17e5c34c038126e0a04351b11e23c6101a7d0ce3beeab29bb6415c10bb" inherit autotools pkgconfig diff --git a/meta/recipes-support/libcap/libcap/fix-CAP_LAST_CAP.patch b/meta/recipes-support/libcap/libcap/fix-CAP_LAST_CAP.patch deleted file mode 100644 index a5571883d3..0000000000 --- a/meta/recipes-support/libcap/libcap/fix-CAP_LAST_CAP.patch +++ /dev/null @@ -1,39 +0,0 @@ -fix CAP_LAST_CAP - -Upstream-Status: pending - -Two new capability CAP_BLOCK_SUSPEND and CAP_WAKE_ALARM have been added into -kernel, but libcap did not update them. -Once libcap uses its capability.h (the default value of KERNEL_HEADERS), and -application always use capability.h from kernel, that will make cap_get_flag -return wrong value. - -Signed-off-by: Roy Li <rongqing.li@windriver.com> ---- - libcap/include/linux/capability.h | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/libcap/include/linux/capability.h b/libcap/include/linux/capability.h -index 4924f2a..57026be 100644 ---- a/libcap/include/linux/capability.h -+++ b/libcap/include/linux/capability.h -@@ -360,7 +360,15 @@ struct cpu_vfs_cap_data { - CAP_SYS_ADMIN is not acceptable anymore. */ - #define CAP_SYSLOG 34 - --#define CAP_LAST_CAP CAP_SYSLOG -+/* Allow triggering something that will wake the system */ -+ -+#define CAP_WAKE_ALARM 35 -+ -+/* Allow preventing system suspends */ -+ -+#define CAP_BLOCK_SUSPEND 36 -+ -+#define CAP_LAST_CAP CAP_BLOCK_SUSPEND - - #define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP) - --- -1.7.10.4 - diff --git a/meta/recipes-support/libcap/libcap_2.22.bb b/meta/recipes-support/libcap/libcap_2.22.bb deleted file mode 100644 index a989bb6a6b..0000000000 --- a/meta/recipes-support/libcap/libcap_2.22.bb +++ /dev/null @@ -1,6 +0,0 @@ -require libcap.inc - -PR = "r6" - -SRC_URI[md5sum] = "b4896816b626bea445f0b3849bdd4077" -SRC_URI[sha256sum] = "e1cae65d8febf2579be37c255d2e058715785ead481a4e6a4357a06aff84721f" diff --git a/meta/recipes-support/libcap/libcap.inc b/meta/recipes-support/libcap/libcap_2.24.bb index 08f4cfedde..75cf5d415d 100644 --- a/meta/recipes-support/libcap/libcap.inc +++ b/meta/recipes-support/libcap/libcap_2.24.bb @@ -5,15 +5,12 @@ HOMEPAGE = "http://sites.google.com/site/fullycapable/" LICENSE = "BSD | GPLv2" LIC_FILES_CHKSUM = "file://License;md5=3f84fd6f29d453a56514cb7e4ead25f1" -DEPENDS = "attr perl-native-runtime" -DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}" -# attr and pam are disabled by EXTRA_OEMAKE_class-native -DEPENDS_class-native = "perl-native-runtime" +DEPENDS = "perl-native-runtime" -SRC_URI = "${DEBIAN_MIRROR}/main/libc/libcap2/${BPN}2_${PV}.orig.tar.gz \ - file://fix-CAP_LAST_CAP.patch" +SRC_URI = "${KERNELORG_MIRROR}/linux/libs/security/linux-privs/${BPN}2/${BPN}-${PV}.tar.xz" -PR = "r1" +SRC_URI[md5sum] = "d43ab9f680435a7fff35b4ace8d45b80" +SRC_URI[sha256sum] = "cee4568f78dc851d726fc93f25f4ed91cc223b1fe8259daa4a77158d174e6c65" inherit lib_package @@ -29,33 +26,40 @@ do_configure() { sed -e '/shell gperf/cifeq (,yes)' -i libcap/Makefile } -EXTRA_OEMAKE = " \ - LIBATTR=yes \ - PAM_CAP=${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'yes', 'no', d)} \ - INDENT= SYSTEM_HEADERS=${STAGING_INCDIR} RAISE_SETFCAP=no \ - lib=${@os.path.basename('${libdir}')} \ -" -EXTRA_OEMAKE_class-native = " \ - LIBATTR=no \ - PAM_CAP=no \ - INDENT= \ +PACKAGECONFIG ??= "attr ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)}" +PACKAGECONFIG_class-native ??= "" + +PACKAGECONFIG[attr] = "LIBATTR=yes,LIBATTR=no,attr" +PACKAGECONFIG[pam] = "PAM_CAP=yes,PAM_CAP=no,libpam" + +EXTRA_OEMAKE += " \ + INDENT= \ lib=${@os.path.basename('${libdir}')} \ + RAISE_SETFCAP=no \ " +EXTRA_OEMAKE_append_class-target = " SYSTEM_HEADERS=${STAGING_INCDIR}" + do_compile() { - oe_runmake + oe_runmake ${EXTRA_OECONF} } do_install() { - oe_runmake install DESTDIR="${D}" prefix="${prefix}" SBINDIR="${D}${sbindir}" + oe_runmake install \ + ${EXTRA_OECONF} \ + DESTDIR="${D}" \ + prefix="${prefix}" \ + SBINDIR="${D}${sbindir}" } do_install_append() { # Move the library to base_libdir install -d ${D}${base_libdir} if [ ! ${D}${libdir} -ef ${D}${base_libdir} ]; then - mv ${D}${libdir}/* ${D}${base_libdir} - rmdir ${D}${libdir} + mv ${D}${libdir}/libcap* ${D}${base_libdir} + if [ -d ${D}${libdir}/security ]; then + mv ${D}${libdir}/security ${D}${base_libdir} + fi fi } @@ -65,4 +69,4 @@ FILES_${PN}-dev += "${base_libdir}/*.so" FILES_${PN} += "${base_libdir}/security/*.so" FILES_${PN}-dbg += "${base_libdir}/security/.debug/*.so" -BBCLASSEXTEND = "native" +BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-support/libcheck/libcheck_0.9.13.bb b/meta/recipes-support/libcheck/libcheck_0.9.14.bb index 8c063d4696..2a69ff7733 100644 --- a/meta/recipes-support/libcheck/libcheck_0.9.13.bb +++ b/meta/recipes-support/libcheck/libcheck_0.9.14.bb @@ -8,8 +8,8 @@ LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=2d5025d4aa3495befef8f17206a5b0a1" SRC_URI = "${SOURCEFORGE_MIRROR}/check/check-${PV}.tar.gz \ " -SRC_URI[md5sum] = "95530868f81a9496b2518fd2b713008a" -SRC_URI[sha256sum] = "ca6589c34f9c60ffd4c3e198ce581e944a9f040ca9352ed54068dd61bebb5cb7" +SRC_URI[md5sum] = "38263d115d784c17aa3b959ce94be8b8" +SRC_URI[sha256sum] = "c272624645b1b738cf57fd5d81a3e4d9b722b99d6133ee3f3c4007d4d279840a" S = "${WORKDIR}/check-${PV}" diff --git a/meta/recipes-support/libcroco/libcroco_0.6.8.bb b/meta/recipes-support/libcroco/libcroco_0.6.8.bb index 7d042653b0..88696a4f47 100644 --- a/meta/recipes-support/libcroco/libcroco_0.6.8.bb +++ b/meta/recipes-support/libcroco/libcroco_0.6.8.bb @@ -11,9 +11,11 @@ SECTION = "x11/utils" DEPENDS = "glib-2.0 libxml2 zlib" BBCLASSEXTEND = "native" EXTRA_OECONF += "--enable-Bsymbolic=auto" -PR = "r1" +PR = "r2" -inherit autotools-brokensep pkgconfig gnomebase gtk-doc +BINCONFIG = "${bindir}/croco-0.6-config" + +inherit autotools pkgconfig gnomebase gtk-doc binconfig-disabled GNOME_COMPRESS_TYPE = "xz" diff --git a/meta/recipes-support/libevdev/libevdev_1.3.bb b/meta/recipes-support/libevdev/libevdev_1.3.bb new file mode 100644 index 0000000000..7206b307e0 --- /dev/null +++ b/meta/recipes-support/libevdev/libevdev_1.3.bb @@ -0,0 +1,13 @@ +SUMMARY = "Wrapper library for evdev devices" +HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libevdev/" +SECTION = "libs" + +LICENSE = "MIT-X" +LIC_FILES_CHKSUM = "file://COPYING;md5=75aae0d38feea6fda97ca381cb9132eb \ + file://libevdev/libevdev.h;endline=21;md5=7ff4f0b5113252c2f1a828e0bbad98d1" + +SRC_URI = "http://www.freedesktop.org/software/libevdev/${BP}.tar.xz" +SRC_URI[md5sum] = "ab67de8f949e84ae2abb48af09eda423" +SRC_URI[sha256sum] = "265411ce79a592b3074e9d07fb97d462745d0c7ef178254a6f720245ed253446" + +inherit autotools pkgconfig diff --git a/meta/recipes-support/libevent/libevent_2.0.21.bb b/meta/recipes-support/libevent/libevent_2.0.21.bb index 5a1ff3b1b0..1230e92b2e 100644 --- a/meta/recipes-support/libevent/libevent_2.0.21.bb +++ b/meta/recipes-support/libevent/libevent_2.0.21.bb @@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=45c5316ff684bcfe2f9f86d8b1279559" PR = "r1" -SRC_URI = "http://github.com/downloads/libevent/libevent/${BPN}-${PV}-stable.tar.gz \ +SRC_URI = "${SOURCEFORGE_MIRROR}/levent/${BP}-stable.tar.gz \ file://obsolete_automake_macros.patch \ file://disable_tests.patch \ " diff --git a/meta/recipes-support/libfm/libfm-1.1.2.2/fix-make-parallelism-issue.patch b/meta/recipes-support/libfm/libfm-1.1.2.2/fix-make-parallelism-issue.patch deleted file mode 100644 index 5d39d1954d..0000000000 --- a/meta/recipes-support/libfm/libfm-1.1.2.2/fix-make-parallelism-issue.patch +++ /dev/null @@ -1,31 +0,0 @@ -Fix make parallelism issue - -- remove pkginclude_HEADERS ( LIBFM_INCLUDES and LIBFM_GTK_INCLUDES -variables are empty) -- if we don't remove it then we will have a race condition between the code -that tries to symlink ${includedir}/libfm-1.0 to ${includedir}/libfm and the -am autogenerated code from the pkginclude_HEADERS definition which -tries to create pkgincludedir (${includedir}/libfm); -- if pkgincludedir is created before the symlink the symlink will be created -in the ${includedir}/libfm dir and it will have libfm-1.0 as name which is -wrong (we need the ${includedir}/libfm symlink for pcmanfm) - -Upstream-Status: Pending -Signed-off-by: Constantin Musca <constantinx.musca@intel.com> - -Index: libfm-1.1.0/src/Makefile.am -=================================================================== ---- libfm-1.1.0.orig/src/Makefile.am -+++ libfm-1.1.0/src/Makefile.am -@@ -211,11 +211,6 @@ libfmgtkinclude_HEADERS = \ - gtk/fm-gtk-marshal.h \ - $(NULL) - --pkginclude_HEADERS = \ -- $(LIBFM_INCLUDES) \ -- $(LIBFM_GTK_INCLUDES) \ -- $(NULL) -- - EXTRA_LTLIBRARIES = libfm-gtk.la libfm-gtk3.la - - lib_LTLIBRARIES = libfm.la @LIBFM_GTK_LTLIBRARIES@ diff --git a/meta/recipes-support/libfm/libfm-1.1.2.2/ignore_automake_warnings.patch b/meta/recipes-support/libfm/libfm-1.1.2.2/ignore_automake_warnings.patch deleted file mode 100644 index 58a2f09d66..0000000000 --- a/meta/recipes-support/libfm/libfm-1.1.2.2/ignore_automake_warnings.patch +++ /dev/null @@ -1,14 +0,0 @@ -Upstream-Status: Inappropriate [configuration] - -Signed-off-by: Marko Lindqvist <cazfi74@gmail.com> -diff -Nurd libfm-1.1.2.2/configure.ac libfm-1.1.2.2/configure.ac ---- libfm-1.1.2.2/configure.ac 2013-08-22 23:16:09.000000000 +0300 -+++ libfm-1.1.2.2/configure.ac 2013-10-25 01:35:18.110323079 +0300 -@@ -3,7 +3,7 @@ - - AC_PREREQ([2.63]) - AC_INIT([libfm], [1.1.2.2], [http://pcmanfm.sourceforge.net/]) --AM_INIT_AUTOMAKE([-Wall -Werror foreign]) -+AM_INIT_AUTOMAKE([-Wall foreign]) - AC_CONFIG_MACRO_DIR(m4) - AC_CONFIG_HEADERS([config.h]) diff --git a/meta/recipes-support/libfm/libfm-extra_1.2.3.bb b/meta/recipes-support/libfm/libfm-extra_1.2.3.bb new file mode 100644 index 0000000000..85bcc3c0c3 --- /dev/null +++ b/meta/recipes-support/libfm/libfm-extra_1.2.3.bb @@ -0,0 +1,23 @@ +SUMMARY = "Library for file management" +HOMEPAGE = "http://pcmanfm.sourceforge.net/" + +LICENSE = "LGPLv2+" +LIC_FILES_CHKSUM = "file://src/fm-extra.h;beginline=8;endline=21;md5=ef1f84da64b3c01cca447212f7ef6007" + +SECTION = "x11/libs" +DEPENDS = "glib-2.0 intltool-native" + +SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.xz" + +SRC_URI[md5sum] = "3ff38200701658f7e80e25ed395d92dd" +SRC_URI[sha256sum] = "c692f1624a4cbc8d1dd55f3b3f3369fbf5d26f63a916e2c295230b2344e1fbf9" + +S = "${WORKDIR}/libfm-${PV}" + +EXTRA_OECONF = "--with-extra-only --with-gtk=no" + +PR = "r1" + +inherit autotools pkgconfig gtk-doc + +do_configure[dirs] =+ "${S}/m4" diff --git a/meta/recipes-support/libfm/libfm_1.1.2.2.bb b/meta/recipes-support/libfm/libfm_1.1.2.2.bb deleted file mode 100644 index 10f31d9911..0000000000 --- a/meta/recipes-support/libfm/libfm_1.1.2.2.bb +++ /dev/null @@ -1,25 +0,0 @@ -SUMMARY = "Library for file management" -HOMEPAGE = "http://pcmanfm.sourceforge.net/" - -LICENSE = "GPLv2 & GPLv2+" -LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ - file://src/fm.h;endline=22;md5=e64555171770a551e3b51cc06fc62f1a \ - file://src/base/fm-config.h;endline=23;md5=ad0fc418c3cf041eea35ddb3daf37f17" - -SECTION = "x11/libs" -DEPENDS = "glib-2.0 pango gtk+ menu-cache intltool-native libexif" - -SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.gz \ - file://fix-make-parallelism-issue.patch \ - file://ignore_automake_warnings.patch \ - " - -SRC_URI[md5sum] = "ea3d09b23ef4c37cb84ae57ea16b8f08" -SRC_URI[sha256sum] = "158e2b6974350d2dab15932b496bb4d448553e60bbf7cdfe4d6e9bd99d19d682" - -inherit autotools-brokensep pkgconfig gtk-doc - -do_configure[dirs] =+ "${S}/m4" - -PACKAGES += "${PN}-mime" -FILES_${PN}-mime = "${datadir}/mime/" diff --git a/meta/recipes-support/libfm/libfm_1.2.3.bb b/meta/recipes-support/libfm/libfm_1.2.3.bb new file mode 100644 index 0000000000..629502f68f --- /dev/null +++ b/meta/recipes-support/libfm/libfm_1.2.3.bb @@ -0,0 +1,38 @@ +SUMMARY = "Library for file management" +HOMEPAGE = "http://pcmanfm.sourceforge.net/" + +LICENSE = "GPLv2+ & LGPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ + file://src/fm.h;beginline=8;endline=21;md5=ef1f84da64b3c01cca447212f7ef6007 \ + file://src/base/fm-config.h;beginline=10;endline=23;md5=ef1f84da64b3c01cca447212f7ef6007 \ + file://src/fm-gtk.h;beginline=6;endline=19;md5=646baa4955c04fe768f2ca27b92ac8dd" + + +SECTION = "x11/libs" +DEPENDS = "glib-2.0 pango gtk+ menu-cache intltool-native libexif libfm-extra" + +SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.xz" + +SRC_URI[md5sum] = "3ff38200701658f7e80e25ed395d92dd" +SRC_URI[sha256sum] = "c692f1624a4cbc8d1dd55f3b3f3369fbf5d26f63a916e2c295230b2344e1fbf9" + +PR = "r1" + +inherit autotools pkgconfig gtk-doc + +do_configure[dirs] =+ "${S}/m4" + +PACKAGES += "${PN}-mime" +FILES_${PN}-mime = "${datadir}/mime/" +FILES_${PN}-dbg += "${libdir}/libfm/modules/.debug" + +do_install_append () { + # remove files which are part of libfm-extra + rm -f ${D}${includedir}/libfm-1.0/fm-xml-file.h + rm -f ${D}${includedir}/libfm-1.0/fm-version.h + rm -f ${D}${includedir}/libfm-1.0/fm-extra.h + rm -f ${D}${libdir}/pkgconfig/libfm-extra.pc + rm -f ${D}${libdir}/libfm-extra.so* + rm -f ${D}${libdir}/libfm-extra.a + rm -f ${D}${libdir}/libfm-extra.la +} diff --git a/meta/recipes-support/libgcrypt/libgcrypt.inc b/meta/recipes-support/libgcrypt/libgcrypt.inc index fa2bc38284..eea67aa58d 100644 --- a/meta/recipes-support/libgcrypt/libgcrypt.inc +++ b/meta/recipes-support/libgcrypt/libgcrypt.inc @@ -18,13 +18,15 @@ SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-${PV}.tar.gz \ BINCONFIG = "${bindir}/libgcrypt-config" -inherit autotools-brokensep texinfo binconfig-disabled pkgconfig +PR = "r1" + +inherit autotools texinfo binconfig-disabled pkgconfig EXTRA_OECONF = "--disable-asm --with-capabilities" do_configure_prepend () { - # Else these could be used in prefernce to those in aclocal-copy - rm -f ${S}/m4/*.m4 + # Else this could be used in preference to the one in aclocal-copy + rm -f ${S}/m4/gpg-error.m4 } # libgcrypt.pc is added locally and thus installed here diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb deleted file mode 100644 index 1657ea4de4..0000000000 --- a/meta/recipes-support/libgcrypt/libgcrypt_1.6.1.bb +++ /dev/null @@ -1,4 +0,0 @@ -require libgcrypt.inc - -SRC_URI[md5sum] = "d155aa1b06fa879175922ba28f6a6509" -SRC_URI[sha256sum] = "7c1007197bef49c3b8740cf6af8b4eb4eb74c7a69796ebcf555d928c287255de" diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.6.2.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.6.2.bb new file mode 100644 index 0000000000..c49c0e7c17 --- /dev/null +++ b/meta/recipes-support/libgcrypt/libgcrypt_1.6.2.bb @@ -0,0 +1,4 @@ +require libgcrypt.inc + +SRC_URI[md5sum] = "d19adc062edff0ebc7e887212733ef1f" +SRC_URI[sha256sum] = "936921644b9c81e2395e18a554a9a5f9252aae3976f8afc3e4229ee9d785e627" diff --git a/meta/recipes-support/libgpg-error/libgpg-error-1.12/pkgconfig.patch b/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch index 2a2c1e9c21..96476badaa 100644 --- a/meta/recipes-support/libgpg-error/libgpg-error-1.12/pkgconfig.patch +++ b/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch @@ -5,11 +5,11 @@ Upstream-Status: Pending -Index: libgpg-error-1.12/configure.ac +Index: libgpg-error-1.17/configure.ac =================================================================== ---- libgpg-error-1.12.orig/configure.ac 2014-05-13 21:14:26.846393236 +0000 -+++ libgpg-error-1.12/configure.ac 2014-05-13 21:14:26.926393236 +0000 -@@ -217,6 +217,7 @@ +--- libgpg-error-1.17.orig/configure.ac ++++ libgpg-error-1.17/configure.ac +@@ -521,6 +521,7 @@ AC_CONFIG_FILES([src/Makefile tests/Make AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpg-error.asd]) AC_CONFIG_FILES([src/versioninfo.rc]) AC_CONFIG_FILES([src/gpg-error-config], [chmod +x src/gpg-error-config]) @@ -17,11 +17,11 @@ Index: libgpg-error-1.12/configure.ac AC_OUTPUT -Index: libgpg-error-1.12/src/Makefile.am +Index: libgpg-error-1.17/src/Makefile.am =================================================================== ---- libgpg-error-1.12.orig/src/Makefile.am 2014-05-13 21:14:26.846393236 +0000 -+++ libgpg-error-1.12/src/Makefile.am 2014-05-13 21:14:26.934393236 +0000 -@@ -37,13 +37,15 @@ +--- libgpg-error-1.17.orig/src/Makefile.am ++++ libgpg-error-1.17/src/Makefile.am +@@ -74,13 +74,15 @@ nodist_include_HEADERS = gpg-error.h bin_SCRIPTS = gpg-error-config m4datadir = $(datadir)/aclocal m4data_DATA = gpg-error.m4 @@ -31,17 +31,17 @@ Index: libgpg-error-1.12/src/Makefile.am EXTRA_DIST = mkstrtable.awk err-sources.h.in err-codes.h.in \ mkerrnos.awk errnos.in README \ mkerrcodes.awk mkerrcodes1.awk mkerrcodes2.awk mkerrcodes.c \ - mkheader.awk gpg-error.h.in mkw32errmap.c w32-add.h w32ce-add.h \ + mkheader.c gpg-error.h.in mkw32errmap.c w32-add.h w32ce-add.h \ err-sources.h err-codes.h gpg-error-config.in gpg-error.m4 \ -- gpg-error.def.in versioninfo.rc.in -+ gpg-error.def.in versioninfo.rc.in gpg-error.pc.in +- gpg-error.vers gpg-error.def.in versioninfo.rc.in \ ++ gpg-error.vers gpg-error.def.in versioninfo.rc.in gpg-error.pc \ + $(lock_obj_pub) BUILT_SOURCES = err-sources.h err-codes.h code-to-errno.h code-from-errno.h \ - err-sources-sym.h err-codes-sym.h errnos-sym.h gpg-error.h \ -Index: libgpg-error-1.12/src/gpg-error.pc.in +Index: libgpg-error-1.17/src/gpg-error.pc.in =================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ libgpg-error-1.12/src/gpg-error.pc.in 2014-05-13 21:48:20.266382916 +0000 +--- /dev/null ++++ libgpg-error-1.17/src/gpg-error.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ @@ -52,13 +52,13 @@ Index: libgpg-error-1.12/src/gpg-error.pc.in +Name: gpg-error +Description: a library that defines common error values for all GnuPG components +Version: @VERSION@ -+Libs: -L{libdir} -lgpg-error ++Libs: -L${libdir} -lgpg-error +Cflags: -I${includedir} -Index: libgpg-error-1.12/src/gpg-error.m4 +Index: libgpg-error-1.17/src/gpg-error.m4 =================================================================== ---- libgpg-error-1.12.orig/src/gpg-error.m4 2014-05-13 21:45:02.038383922 +0000 -+++ libgpg-error-1.12/src/gpg-error.m4 2014-05-13 21:47:08.362383281 +0000 -@@ -15,58 +15,14 @@ +--- libgpg-error-1.17.orig/src/gpg-error.m4 ++++ libgpg-error-1.17/src/gpg-error.m4 +@@ -26,73 +26,13 @@ dnl is added to the gpg_config_script_wa dnl AC_DEFUN([AM_PATH_GPG_ERROR], [ AC_REQUIRE([AC_CANONICAL_HOST]) @@ -70,7 +70,7 @@ Index: libgpg-error-1.12/src/gpg-error.m4 - AC_HELP_STRING([--with-libgpg-error-prefix=PFX], - [prefix where GPG Error is installed (optional)]), - [gpg_error_config_prefix="$withval"]) - +- - dnl Accept --with-gpg-error-prefix and make it work the same as - dnl --with-libgpg-error-prefix above, for backwards compatibility, - dnl but do not document this old, inconsistently-named option. @@ -78,14 +78,27 @@ Index: libgpg-error-1.12/src/gpg-error.m4 - [gpg_error_config_prefix="$withval"]) + min_gpg_error_version=ifelse([$1], ,0.0,$1) -- if test x$gpg_error_config_prefix != x ; then -- if test x${GPG_ERROR_CONFIG+set} != xset ; then -- GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config +- if test x"${GPG_ERROR_CONFIG}" = x ; then +- if test x"${gpg_error_config_prefix}" != x ; then +- GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config" +- else +- case "${SYSROOT}" in +- /*) +- if test -x "${SYSROOT}/bin/gpg-error-config" ; then +- GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config" +- fi +- ;; +- '') +- ;; +- *) +- AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.]) +- ;; +- esac - fi - fi + PKG_CHECK_MODULES(GPG_ERROR, [gpg-error >= $min_gpg_error_version], [ok=yes], [ok=no]) -- AC_PATH_TOOL(GPG_ERROR_CONFIG, gpg-error-config, no) +- AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no) - min_gpg_error_version=ifelse([$1], ,0.0,$1) - AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version) - ok=no @@ -113,6 +126,8 @@ Index: libgpg-error-1.12/src/gpg-error.m4 if test $ok = yes; then - GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags` - GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs` +- GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --cflags 2>/dev/null` +- GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --mt --libs 2>/dev/null` - AC_MSG_RESULT([yes ($gpg_error_config_version)]) ifelse([$2], , :, [$2]) - gpg_error_config_host=`$GPG_ERROR_CONFIG $gpg_error_config_args --host 2>/dev/null || echo none` @@ -120,12 +135,14 @@ Index: libgpg-error-1.12/src/gpg-error.m4 if test x"$gpg_error_config_host" != xnone ; then if test x"$gpg_error_config_host" != x"$host" ; then AC_MSG_WARN([[ -@@ -80,9 +36,6 @@ +@@ -107,11 +47,6 @@ AC_DEFUN([AM_PATH_GPG_ERROR], fi fi else - GPG_ERROR_CFLAGS="" - GPG_ERROR_LIBS="" +- GPG_ERROR_MT_CFLAGS="" +- GPG_ERROR_MT_LIBS="" - AC_MSG_RESULT(no) ifelse([$3], , :, [$3]) fi diff --git a/meta/recipes-support/libgpg-error/libgpg-error_1.12.bb b/meta/recipes-support/libgpg-error/libgpg-error_1.12.bb deleted file mode 100644 index af9574d8fd..0000000000 --- a/meta/recipes-support/libgpg-error/libgpg-error_1.12.bb +++ /dev/null @@ -1,31 +0,0 @@ -SUMMARY = "Small library that defines common error values for all GnuPG components" -HOMEPAGE = "http://www.gnupg.org/related_software/libgpg-error/" -BUGTRACKER = "https://bugs.g10code.com/gnupg/index" - -LICENSE = "GPLv2+ & LGPLv2.1+" -LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ - file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \ - file://src/gpg-error.h.in;endline=23;md5=6ac0378874589a44d53512b3786b4bc0 \ - file://src/init.c;endline=20;md5=b69742f2a8827d494c6f6a4b1768416c" - - -SECTION = "libs" - -SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-${PV}.tar.bz2 \ - file://pkgconfig.patch" - -SRC_URI[md5sum] = "8f0eb41a344d19ac2aa9bd101dfb9ce6" -SRC_URI[sha256sum] = "cafc9ed6a87c53a35175d5a1220a96ca386696eef2fa059cc0306211f246e55f" - -BINCONFIG = "${bindir}/gpg-error-config" - -inherit autotools binconfig-disabled pkgconfig gettext - -FILES_${PN}-dev += "${bindir}/gpg-error" - -do_install_append() { - # we don't have common lisp in OE - rm -rf "${D}${datadir}/common-lisp/" -} - -BBCLASSEXTEND = "native" diff --git a/meta/recipes-support/libgpg-error/libgpg-error_1.18.bb b/meta/recipes-support/libgpg-error/libgpg-error_1.18.bb new file mode 100644 index 0000000000..6d11605e54 --- /dev/null +++ b/meta/recipes-support/libgpg-error/libgpg-error_1.18.bb @@ -0,0 +1,55 @@ +SUMMARY = "Small library that defines common error values for all GnuPG components" +HOMEPAGE = "http://www.gnupg.org/related_software/libgpg-error/" +BUGTRACKER = "https://bugs.g10code.com/gnupg/index" + +LICENSE = "GPLv2+ & LGPLv2.1+" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ + file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \ + file://src/gpg-error.h.in;endline=23;md5=8b204918f0ca707136394d8bb20c7ebc \ + file://src/init.c;endline=20;md5=8f5a9b59634f4aebcd0ec9d3ebd53bfe" + + +SECTION = "libs" + +SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-${PV}.tar.bz2 \ + file://pkgconfig.patch" +SRC_URI[md5sum] = "12312802d2065774b787cbfc22cc04e9" +SRC_URI[sha256sum] = "9ff1d6e61d4cef7c1d0607ceef6d40dc33f3da7a3094170c3718c00153d80810" + +BINCONFIG = "${bindir}/gpg-error-config" + +inherit autotools binconfig-disabled pkgconfig gettext +CPPFLAGS += "-P" +do_compile_prepend() { + TARGET_FILE=linux-gnu + if [ ${TARGET_OS} != "linux" ]; then + TARGET_FILE=${TARGET_OS} + fi + + case ${TARGET_ARCH} in + aarch64) TUPLE=aarch64-unknown-linux-gnu ;; + arm) TUPLE=arm-unknown-linux-gnueabi ;; + armeb) TUPLE=arm-unknown-linux-gnueabi ;; + i586) TUPLE=i486-pc-linux-gnu ;; + mipsel) TUPLE=mipsel-unknown-linux-gnu ;; + mips64el) TUPLE=mipsel-unknown-linux-gnu ;; + mips64) TUPLE=mips-unknown-linux-gnu ;; + mips) TUPLE=mips-unknown-linux-gnu ;; + powerpc64) TUPLE=powerpc64-unknown-linux-gnu ;; + powerpc) TUPLE=powerpc-unknown-linux-gnu ;; + sh4) TUPLE=sh4-unknown-linux-gnu ;; + x86_64) TUPLE=x86_64-pc-linux-gnu ;; + esac + + cp ${S}/src/syscfg/lock-obj-pub.$TUPLE.h \ + ${S}/src/syscfg/lock-obj-pub.$TARGET_FILE.h +} + +do_install_append() { + # we don't have common lisp in OE + rm -rf "${D}${datadir}/common-lisp/" +} + +FILES_${PN}-dev += "${bindir}/gpg-error" + +BBCLASSEXTEND = "native" diff --git a/meta/recipes-support/libical/files/pthread-fix.patch b/meta/recipes-support/libical/files/pthread-fix.patch deleted file mode 100644 index 877b808fc0..0000000000 --- a/meta/recipes-support/libical/files/pthread-fix.patch +++ /dev/null @@ -1,52 +0,0 @@ -New added pthread feature leads to some deadlock with some unlock code missing. -This patch fix it. - -Signed-off-by: Zhai Edwin <edwin.zhai@intel.com> - -Upstream-Status: Pending - -Index: libical-0.47/src/libical/icaltimezone.c -=================================================================== ---- libical-0.47.orig/src/libical/icaltimezone.c 2011-12-16 13:42:25.000000000 +0800 -+++ libical-0.47/src/libical/icaltimezone.c 2011-12-16 14:16:25.000000000 +0800 -@@ -1773,7 +1773,7 @@ - filename = (char*) malloc (filename_len); - if (!filename) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); -- return; -+ goto out; - } - - snprintf (filename, filename_len, "%s/%s.ics", get_zone_directory(), -@@ -1783,7 +1783,7 @@ - free (filename); - if (!fp) { - icalerror_set_errno(ICAL_FILE_ERROR); -- return; -+ goto out; - } - - -@@ -1807,7 +1807,7 @@ - - if (!subcomp) { - icalerror_set_errno(ICAL_PARSE_ERROR); -- return; -+ goto out; - } - - icaltimezone_get_vtimezone_properties (zone, subcomp); -@@ -1817,10 +1817,12 @@ - icalcomponent_free(comp); - } - #endif --#ifdef HAVE_PTHREAD -+ - out: -+#ifdef HAVE_PTHREAD - pthread_mutex_unlock(&builtin_mutex); - #endif -+ return; - } - - diff --git a/meta/recipes-support/libical/libical_0.48.bb b/meta/recipes-support/libical/libical_0.48.bb deleted file mode 100644 index f464026f8c..0000000000 --- a/meta/recipes-support/libical/libical_0.48.bb +++ /dev/null @@ -1,16 +0,0 @@ -SUMMARY = "iCal and scheduling (RFC 2445, 2446, 2447) library" -HOMEPAGE = "http://sourceforge.net/projects/freeassociation/" -BUGTRACKER = "http://sourceforge.net/tracker/?group_id=16077&atid=116077" -LICENSE = "LGPLv2.1 | MPL-1" -LIC_FILES_CHKSUM = "file://COPYING;md5=d4fc58309d8ed46587ac63bb449d82f8 \ - file://LICENSE;md5=d1a0891cd3e582b3e2ec8fe63badbbb6" -SECTION = "libs" - - -SRC_URI = "${SOURCEFORGE_MIRROR}/project/freeassociation/${BPN}/${P}/${BPN}-${PV}.tar.gz\ - file://pthread-fix.patch" - -SRC_URI[md5sum] = "e549f434d5fbf9cd156c60ed4943618f" -SRC_URI[sha256sum] = "2ae78b0757f0dd13431acf42a9a8d038339fd4767fd5134e650bf60ee0b4dff0" - -inherit autotools diff --git a/meta/recipes-support/libical/libical_1.0.0.bb b/meta/recipes-support/libical/libical_1.0.0.bb new file mode 100644 index 0000000000..be6b635caf --- /dev/null +++ b/meta/recipes-support/libical/libical_1.0.0.bb @@ -0,0 +1,13 @@ +SUMMARY = "iCal and scheduling (RFC 2445, 2446, 2447) library" +HOMEPAGE = "https://github.com/libical/libical" +BUGTRACKER = "https://github.com/libical/libical/issues" +LICENSE = "LGPLv2.1 | MPL-1" +LIC_FILES_CHKSUM = "file://COPYING;md5=d4fc58309d8ed46587ac63bb449d82f8 \ + file://LICENSE;md5=d1a0891cd3e582b3e2ec8fe63badbbb6" +SECTION = "libs" + +SRC_URI = "https://github.com/${BPN}/${BPN}/archive/v${PV}.tar.gz" +SRC_URI[md5sum] = "f4b8e33ae5efb2f025eb43ce69682a36" +SRC_URI[sha256sum] = "0072e83834092315772e6719b85fc8b11530b1ff53f4d108315fb38cddbce8c2" + +inherit autotools diff --git a/meta/recipes-support/libiconv/libiconv_1.11.1.bb b/meta/recipes-support/libiconv/libiconv_1.11.1.bb index c52564a42c..abf739bfa1 100644 --- a/meta/recipes-support/libiconv/libiconv_1.11.1.bb +++ b/meta/recipes-support/libiconv/libiconv_1.11.1.bb @@ -21,8 +21,8 @@ S = "${WORKDIR}/libiconv-${PV}" inherit autotools pkgconfig gettext python __anonymous() { - if d.getVar("TCLIBC", True) == "eglibc": - raise bb.parse.SkipPackage("libiconv is provided for use with uClibc only - eglibc already provides iconv") + if d.getVar("TCLIBC", True) == "glibc": + raise bb.parse.SkipPackage("libiconv is provided for use with uClibc only - glibc already provides iconv") } EXTRA_OECONF += "--enable-shared --enable-static --enable-relocatable" diff --git a/meta/recipes-support/libiconv/libiconv_1.14.bb b/meta/recipes-support/libiconv/libiconv_1.14.bb index d5f47b4e34..1b6fe09bb7 100644 --- a/meta/recipes-support/libiconv/libiconv_1.14.bb +++ b/meta/recipes-support/libiconv/libiconv_1.14.bb @@ -25,8 +25,8 @@ inherit autotools pkgconfig gettext python __anonymous() { if d.getVar("TARGET_OS", True) != "linux": return - if d.getVar("TCLIBC", True) == "eglibc": - raise bb.parse.SkipPackage("libiconv is provided for use with uClibc only - eglibc already provides iconv") + if d.getVar("TCLIBC", True) == "glibc": + raise bb.parse.SkipPackage("libiconv is provided for use with uClibc only - glibc already provides iconv") } EXTRA_OECONF += "--enable-shared --enable-static --enable-relocatable" diff --git a/meta/recipes-support/libksba/libksba_1.3.0.bb b/meta/recipes-support/libksba/libksba_1.3.2.bb index 13ad437629..cce08c302c 100644 --- a/meta/recipes-support/libksba/libksba_1.3.0.bb +++ b/meta/recipes-support/libksba/libksba_1.3.2.bb @@ -6,7 +6,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=fd541d83f75d038c4e0617b672ed8bda \ file://COPYING.GPLv3;md5=2f31b266d3440dd7ee50f92cf67d8e6c \ file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02 \ " -PR = "r1" DEPENDS = "libgpg-error" @@ -17,8 +16,8 @@ inherit autotools binconfig-disabled pkgconfig texinfo SRC_URI = "ftp://ftp.gnupg.org/gcrypt/${BPN}/${BPN}-${PV}.tar.bz2 \ file://ksba-add-pkgconfig-support.patch" -SRC_URI[md5sum] = "cd86fad9c9d360b2cf80449f8a4a4075" -SRC_URI[sha256sum] = "5a61eed50550d4d0dcb47457ce7b6a90f8e719d42a3b25f7e79333e8cd721971" +SRC_URI[md5sum] = "c3c9a66e22d87fe3ae59865250b8a09c" +SRC_URI[sha256sum] = "eb95537955dfc2845690a4cc3836074fa6d0a2c2ca2cbf1759364d3bd9868406" do_configure_prepend () { # Else these could be used in preference to those in aclocal-copy diff --git a/meta/recipes-support/libnl/libnl/fix-lib-cache_mngr.c-two-parentheses-bugs.patch b/meta/recipes-support/libnl/libnl/fix-lib-cache_mngr.c-two-parentheses-bugs.patch deleted file mode 100644 index 22b0d88428..0000000000 --- a/meta/recipes-support/libnl/libnl/fix-lib-cache_mngr.c-two-parentheses-bugs.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 82fdf49c185fd5f3810781af9ef52aa6a52bf2df Mon Sep 17 00:00:00 2001 -From: "Song.Li" <Song.Li@windriver.com> -Date: Thu, 28 Jun 2012 20:03:17 +0800 -Subject: [PATCH] fix lib/cache_mngr.c two parentheses bugs - -there are two parentheses bugs in libnl /lib/cache_mngr.c file. -The parentheses doesn't make any sense, -This will cause the variable err get a bool value, -the correct value of variable err should be the return value -of the function which can be any integer value. - ---- - lib/cache_mngr.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -Upstream-Status: Pending - -diff --git a/lib/cache_mngr.c b/lib/cache_mngr.c -index dae8768..57cc1f9 100644 ---- a/lib/cache_mngr.c -+++ b/lib/cache_mngr.c -@@ -150,10 +150,10 @@ int nl_cache_mngr_alloc(struct nl_sock *sk, int protocol, int flags, - /* Required to receive async event notifications */ - nl_socket_disable_seq_check(mngr->cm_sock); - -- if ((err = nl_connect(mngr->cm_sock, protocol) < 0)) -+ if ((err = nl_connect(mngr->cm_sock, protocol)) < 0) - goto errout; - -- if ((err = nl_socket_set_nonblocking(mngr->cm_sock) < 0)) -+ if ((err = nl_socket_set_nonblocking(mngr->cm_sock)) < 0) - goto errout; - - NL_DBG(1, "Allocated cache manager %p, protocol %d, %d caches\n", --- -1.7.9.5 - diff --git a/meta/recipes-support/libnl/libnl/fix-pktloc_syntax_h-race.patch b/meta/recipes-support/libnl/libnl/fix-pktloc_syntax_h-race.patch index b93d97b1b7..79aa0bdf11 100644 --- a/meta/recipes-support/libnl/libnl/fix-pktloc_syntax_h-race.patch +++ b/meta/recipes-support/libnl/libnl/fix-pktloc_syntax_h-race.patch @@ -6,24 +6,24 @@ newer version so we can assume this issue is fixed upstream Signed-off-by: Martin Jansa <martin.jansa@gmail.com> -Index: libnl-3.2.14/lib/Makefile.am +Index: libnl-3.2.25/lib/Makefile.am =================================================================== ---- libnl-3.2.14.orig/lib/Makefile.am -+++ libnl-3.2.14/lib/Makefile.am -@@ -39,9 +39,12 @@ CLEANFILES = \ +--- libnl-3.2.25.orig/lib/Makefile.am ++++ libnl-3.2.25/lib/Makefile.am +@@ -46,9 +46,12 @@ CLEANFILES = \ # Hack to avoid using ylwrap. It does not function correctly in combination # with --header-file= +route/pktloc.lo: route/pktloc_syntax.h route/pktloc_grammar.h +route/pktloc_grammar.h: route/pktloc_grammar.c route/pktloc_grammar.c: route/pktloc_grammar.l - $(AM_V_GEN) $(FLEX) --header-file=route/pktloc_grammar.h $(LFLAGS) -o $@ $^ + $(AM_V_GEN) $(MKDIR_P) route; $(FLEX) --header-file=route/pktloc_grammar.h $(LFLAGS) -o $@ $^ +route/pktloc_syntax.h: route/pktloc_syntax.c route/pktloc_syntax.c: route/pktloc_syntax.y - $(AM_V_GEN) $(YACC) -d $(YFLAGS) -o $@ $^ + $(AM_V_GEN) $(MKDIR_P) route; $(YACC) -d $(YFLAGS) -o $@ $^ -@@ -89,7 +92,9 @@ BUILT_SOURCES = \ +@@ -102,7 +105,9 @@ BUILT_SOURCES = \ route/cls/ematch_grammar.c \ route/cls/ematch_syntax.c \ route/pktloc_grammar.c \ diff --git a/meta/recipes-support/libnl/libnl_3.2.24.bb b/meta/recipes-support/libnl/libnl_3.2.25.bb index d34ab74eac..97814fb134 100644 --- a/meta/recipes-support/libnl/libnl_3.2.24.bb +++ b/meta/recipes-support/libnl/libnl_3.2.25.bb @@ -3,6 +3,7 @@ HOMEPAGE = "http://www.infradead.org/~tgr/libnl/" SECTION = "libs/network" PE = "1" +PR = "r1" LICENSE = "LGPLv2.1" LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c" @@ -12,12 +13,12 @@ DEPENDS = "flex-native bison-native" SRC_URI = "http://www.infradead.org/~tgr/${BPN}/files/${BP}.tar.gz \ file://fix-pktloc_syntax_h-race.patch \ file://fix-pc-file.patch \ - file://fix-lib-cache_mngr.c-two-parentheses-bugs.patch \ " -SRC_URI[md5sum] = "6e0e7bad0674749d930dd9f285343d55" -SRC_URI[sha256sum] = "fb8d6e5dc8af5b85bc6d00a71582a68a01e6a3f7d1664d4a646e289a99dd6816" -inherit autotools-brokensep pkgconfig +SRC_URI[md5sum] = "03f74d0cd5037cadc8cdfa313bbd195c" +SRC_URI[sha256sum] = "8beb7590674957b931de6b7f81c530b85dc7c1ad8fbda015398bc1e8d1ce8ec5" + +inherit autotools pkgconfig FILES_${PN} = "${libdir}/libnl-3.so.* \ ${libdir}/libnl.so.* \ diff --git a/meta/recipes-support/libpcre/libpcre/Makefile b/meta/recipes-support/libpcre/libpcre/Makefile index 5419d71f7f..708d807d08 100644 --- a/meta/recipes-support/libpcre/libpcre/Makefile +++ b/meta/recipes-support/libpcre/libpcre/Makefile @@ -65,7 +65,7 @@ am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) MKDIR_P = /bin/mkdir -p -PACKAGE_STRING = PCRE 8.34 +PACKAGE_STRING = PCRE 8.36 SHELL = /bin/sh srcdir = . top_srcdir = . diff --git a/meta/recipes-support/libpcre/libpcre_8.35.bb b/meta/recipes-support/libpcre/libpcre_8.36.bb index 92098c8c51..a4b7f6d985 100644 --- a/meta/recipes-support/libpcre/libpcre_8.35.bb +++ b/meta/recipes-support/libpcre/libpcre_8.36.bb @@ -14,8 +14,8 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/project/pcre/pcre/${PV}/pcre-${PV}.tar.bz2 \ file://Makefile \ " -SRC_URI[md5sum] = "6aacb23986adccd9b3bc626c00979958" -SRC_URI[sha256sum] = "a961c1c78befef263cc130756eeca7b674b4e73a81533293df44e4265236865b" +SRC_URI[md5sum] = "b767bc9af0c20bc9c1fe403b0d41ad97" +SRC_URI[sha256sum] = "ef833457de0c40e82f573e34528f43a751ff20257ad0e86d272ed5637eb845bb" S = "${WORKDIR}/pcre-${PV}" @@ -28,8 +28,6 @@ BINCONFIG = "${bindir}/pcre-config" inherit autotools binconfig-disabled ptest -PARALLEL_MAKE = "" - EXTRA_OECONF = "\ --enable-newline-is-lf \ --enable-rebuild-chartables \ diff --git a/meta/recipes-support/libproxy/libproxy_0.4.11.bb b/meta/recipes-support/libproxy/libproxy_0.4.11.bb index a53a197615..3367c85156 100644 --- a/meta/recipes-support/libproxy/libproxy_0.4.11.bb +++ b/meta/recipes-support/libproxy/libproxy_0.4.11.bb @@ -29,7 +29,7 @@ do_configure_prepend() { } python() { - if bb.utils.contains("INCOMPATIBLE_LICENSE", "GPLv3", "x", "", d) == "x" or bb.utils.contains("DISTRO_FEATURES", "x11", "x", "", d) == "": + if incompatible_license_contains("GPLv3", "x", "", d) == "x" or bb.utils.contains("DISTRO_FEATURES", "x11", "x", "", d) == "": d.setVar("EXTRA_OECMAKE", d.getVar("EXTRA_OECMAKE").replace("-DWITH_GNOME=yes", "-DWITH_GNOME=no")) d.setVar("DEPENDS", " ".join(i for i in d.getVar("DEPENDS").split() if i != "gconf")) } diff --git a/meta/recipes-support/libsoup/libsoup-2.4_2.46.0.bb b/meta/recipes-support/libsoup/libsoup-2.4_2.46.0.bb index f062b2eefa..81da911926 100644 --- a/meta/recipes-support/libsoup/libsoup-2.4_2.46.0.bb +++ b/meta/recipes-support/libsoup/libsoup-2.4_2.46.0.bb @@ -23,7 +23,7 @@ SRC_URI[sha256sum] = "fa3d5574c1a2df521242e2ca624a2b3057121798cab9f8f40525aa186a S = "${WORKDIR}/libsoup-${PV}" -inherit autotools pkgconfig +inherit autotools gettext pkgconfig # glib-networking is needed for SSL, proxies, etc. RRECOMMENDS_${PN} = "glib-networking" diff --git a/meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch b/meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch index a330c73412..d4489165bf 100644 --- a/meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch +++ b/meta/recipes-support/libunistring/libunistring/iconv-m4-remove-the-test-to-convert-euc-jp.patch @@ -16,11 +16,11 @@ Signed-off-by: Jackie Huang <jackie.huang@windriver.com> gnulib-m4/iconv.m4 | 11 ----------- 1 files changed, 0 insertions(+), 11 deletions(-) -diff --git a/gnulib-m4/iconv.m4 b/gnulib-m4/iconv.m4 -index f46ff14..de0a5e9 100644 ---- a/gnulib-m4/iconv.m4 -+++ b/gnulib-m4/iconv.m4 -@@ -126,17 +126,6 @@ int main () +Index: libunistring-0.9.4/gnulib-m4/iconv.m4 +=================================================================== +--- libunistring-0.9.4.orig/gnulib-m4/iconv.m4 2014-11-03 17:41:29.755011917 +0000 ++++ libunistring-0.9.4/gnulib-m4/iconv.m4 2014-11-03 17:43:03.795014480 +0000 +@@ -159,17 +159,6 @@ } } #endif @@ -34,9 +34,7 @@ index f46ff14..de0a5e9 100644 - && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) - /* Try HP-UX names. */ - && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) -- return 1; - return 0; - }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], - [case "$host_os" in --- -1.7.4 +- result |= 16; + return result; + }]])], + [am_cv_func_iconv_works=yes], diff --git a/meta/recipes-support/libunistring/libunistring/libunistring_fix_for_automake_1.12.patch b/meta/recipes-support/libunistring/libunistring/libunistring_fix_for_automake_1.12.patch deleted file mode 100644 index 5d831d5491..0000000000 --- a/meta/recipes-support/libunistring/libunistring/libunistring_fix_for_automake_1.12.patch +++ /dev/null @@ -1,81 +0,0 @@ -Upstream-Status: Pending - -automake 1.12 has deprecated use of mkdir_p, and it recommends -use of MKDIR_P instead. Changed the code to avoid these kind -of warning-errors. - -| make[2]: /build/tmp/work/x86_64-linux/libunistring-native-0.9.3-r2/image/srv/home/nitin/builds2/build0/tmp/sysroots/x86_64-linux/usr/share/doc/libunistring: Command not found -| make[2]: *** [install-html-split] Error 127 - -Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com> -2012/07/10 - -Index: libunistring-0.9.3/doc/Makefile.am -=================================================================== ---- libunistring-0.9.3.orig/doc/Makefile.am -+++ libunistring-0.9.3/doc/Makefile.am -@@ -87,7 +87,7 @@ TEXI2DVI = @TEXI2DVI@ $(TEXINCLUDES) - # The install-dvi target is already defined by automake. - - installdirs-dvi: -- $(mkdir_p) $(DESTDIR)$(dvidir) -+ $(MKDIR_P) $(DESTDIR)$(dvidir) - - uninstall-dvi: - $(RM) $(DESTDIR)$(dvidir)/libunistring.dvi -@@ -105,7 +105,7 @@ libunistring.ps: libunistring.dvi - # The install-ps target is already defined by automake. - - installdirs-ps: -- $(mkdir_p) $(DESTDIR)$(psdir) -+ $(MKDIR_P) $(DESTDIR)$(psdir) - - uninstall-ps: - $(RM) $(DESTDIR)$(psdir)/libunistring.ps -@@ -120,7 +120,7 @@ TEXI2PDF = @TEXI2DVI@ --pdf $(TEXINCLUDE - # The install-pdf target is already defined by automake. - - installdirs-pdf: -- $(mkdir_p) $(DESTDIR)$(pdfdir) -+ $(MKDIR_P) $(DESTDIR)$(pdfdir) - - uninstall-pdf: - $(RM) $(DESTDIR)$(pdfdir)/libunistring.pdf -@@ -151,17 +151,17 @@ libunistring_toc.html: libunistring.texi - } - - install-html-monolithic: libunistring.html -- $(mkdir_p) $(DESTDIR)$(htmldir) -+ $(MKDIR_P) $(DESTDIR)$(htmldir) - $(INSTALL_DATA) `if test -f libunistring.html; then echo .; else echo $(srcdir); fi`/libunistring.html $(DESTDIR)$(htmldir)/libunistring.html - - install-html-split: libunistring_toc.html -- $(mkdir_p) $(DESTDIR)$(htmldir) -+ $(MKDIR_P) $(DESTDIR)$(htmldir) - for file in `if test -f libunistring_toc.html; then echo .; else echo $(srcdir); fi`/libunistring_*.html; do \ - $(INSTALL_DATA) $$file $(DESTDIR)$(htmldir)/`basename $$file`; \ - done - - installdirs-html: -- $(mkdir_p) $(DESTDIR)$(htmldir) -+ $(MKDIR_P) $(DESTDIR)$(htmldir) - - uninstall-html-monolithic: - $(RM) $(DESTDIR)$(htmldir)/libunistring.html -@@ -170,14 +170,14 @@ uninstall-html-split: - $(RM) $(DESTDIR)$(htmldir)/libunistring_*.html - - dist-html-monolithic: -- $(mkdir_p) $(distdir)/ -+ $(MKDIR_P) $(distdir)/ - file=libunistring.html; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - cp -p $$d/$$file $(distdir)/$$file || exit 1 - - # We would like to put libunistring_*.html into EXTRA_DIST, but it doesn't work. - dist-html-split: libunistring_toc.html -- $(mkdir_p) $(distdir)/ -+ $(MKDIR_P) $(distdir)/ - file=libunistring_toc.html; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - for file in `cd $$d && echo libunistring_*.html`; do \ diff --git a/meta/recipes-support/libunistring/libunistring/parallelmake.patch b/meta/recipes-support/libunistring/libunistring/parallelmake.patch deleted file mode 100644 index 21025b8e9d..0000000000 --- a/meta/recipes-support/libunistring/libunistring/parallelmake.patch +++ /dev/null @@ -1,26 +0,0 @@ -Fix a parallel make race where cdefs.h uses the unused-parameter.h header file -but has no dependency listed. This can result in an empty cdefs.h file which -results in a build failure like: - -| In file included from striconveh.c:30:0: -| unistr.h:193:48: error: expected ';', ',' or ')' before '_GL_UNUSED_PARAMETER' -| In file included from striconveh.c:30:0: -| unistr.h:263:54: error: expected ';', ',' or ')' before '_GL_UNUSED_PARAMETER' - -Upstream-Status: Pending - -RP 2012/4/12 - -Index: libunistring-0.9.3/lib/Makefile.am -=================================================================== ---- libunistring-0.9.3.orig/lib/Makefile.am 2012-04-12 07:45:41.450059820 +0000 -+++ libunistring-0.9.3/lib/Makefile.am 2012-04-12 07:48:45.434055559 +0000 -@@ -157,7 +157,7 @@ - - # unistring/cdefs.h is not public, but is included by other header files. - nobase_nodist_include_HEADERS += unistring/cdefs.h --unistring/cdefs.h : unistring/cdefs.in.h -+unistring/cdefs.h : unistring/cdefs.in.h $(UNUSED_PARAMETER_H) - @MKDIR_P@ unistring - rm -f $@-t $@ - sed -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ diff --git a/meta/recipes-support/libunistring/libunistring_0.9.3.bb b/meta/recipes-support/libunistring/libunistring_0.9.4.bb index db1651b2a6..89b1dc26f1 100644 --- a/meta/recipes-support/libunistring/libunistring_0.9.3.bb +++ b/meta/recipes-support/libunistring/libunistring_0.9.4.bb @@ -18,15 +18,11 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ file://COPYING.LIB;md5=6a6a8e020838b23406c81b19c1d46df6" SRC_URI = "${GNU_MIRROR}/libunistring/libunistring-${PV}.tar.gz \ - file://parallelmake.patch \ - file://libunistring_fix_for_automake_1.12.patch \ file://iconv-m4-remove-the-test-to-convert-euc-jp.patch \ " -SRC_URI[md5sum] = "db8eca3b64163abadf8c40e5cecc261f" -SRC_URI[sha256sum] = "610d3ec724fbdaa654afe3cff20b9f4d504be3fd296fded2e0f7f764041006a3" - -PR = "r3" +SRC_URI[md5sum] = "c24a6a3838d9ad4a41a62549312c4226" +SRC_URI[sha256sum] = "f5246d63286a42902dc096d6d44541fbe4204b6c02d6d5d28b457c9882ddd8a6" inherit autotools texinfo BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-support/libunwind/libunwind-1.1/AArch64-port.patch b/meta/recipes-support/libunwind/libunwind-1.1/AArch64-port.patch new file mode 100644 index 0000000000..228ec322d5 --- /dev/null +++ b/meta/recipes-support/libunwind/libunwind-1.1/AArch64-port.patch @@ -0,0 +1,2529 @@ +From ac6c0a6535975f1dc2da6e4e2766614baac2a14a Mon Sep 17 00:00:00 2001 +From: Yvan Roux <yvan.roux@linaro.org> +Date: Sat, 11 May 2013 09:18:23 -0600 +Subject: [PATCH] AArch64 port. + +Upstream-Status: Backport + +--- + Makefile.am | 6 + README | 1 + configure.ac | 6 + include/libunwind-aarch64.h | 187 ++++++++++++++++++++++ + include/libunwind.h.in | 4 + include/tdep-aarch64/dwarf-config.h | 52 ++++++ + include/tdep-aarch64/jmpbuf.h | 33 +++ + include/tdep-aarch64/libunwind_i.h | 294 +++++++++++++++++++++++++++++++++++ + include/tdep/dwarf-config.h | 4 + include/tdep/jmpbuf.h | 2 + include/tdep/libunwind_i.h.in | 4 + src/Makefile.am | 39 ++++ + src/aarch64/Gcreate_addr_space.c | 60 +++++++ + src/aarch64/Gget_proc_info.c | 39 ++++ + src/aarch64/Gget_save_loc.c | 100 +++++++++++ + src/aarch64/Gglobal.c | 57 ++++++ + src/aarch64/Ginit.c | 187 ++++++++++++++++++++++ + src/aarch64/Ginit_local.c | 55 ++++++ + src/aarch64/Ginit_remote.c | 45 +++++ + src/aarch64/Gis_signal_frame.c | 64 +++++++ + src/aarch64/Gregs.c | 113 +++++++++++++ + src/aarch64/Gresume.c | 177 +++++++++++++++++++++ + src/aarch64/Gstep.c | 129 +++++++++++++++ + src/aarch64/Lcreate_addr_space.c | 5 + src/aarch64/Lget_proc_info.c | 5 + src/aarch64/Lget_save_loc.c | 5 + src/aarch64/Lglobal.c | 5 + src/aarch64/Linit.c | 5 + src/aarch64/Linit_local.c | 5 + src/aarch64/Linit_remote.c | 5 + src/aarch64/Lis_signal_frame.c | 5 + src/aarch64/Lregs.c | 5 + src/aarch64/Lresume.c | 5 + src/aarch64/Lstep.c | 5 + src/aarch64/gen-offsets.c | 68 ++++++++ + src/aarch64/init.h | 127 +++++++++++++++ + src/aarch64/is_fpreg.c | 32 +++ + src/aarch64/offsets.h | 49 +++++ + src/aarch64/regname.c | 106 ++++++++++++ + src/aarch64/siglongjmp.S | 12 + + src/aarch64/unwind_i.h | 43 +++++ + src/coredump/_UCD_access_reg_linux.c | 5 + src/ptrace/_UPT_reg_offset.c | 36 ++++ + 43 files changed, 2184 insertions(+), 7 deletions(-) + create mode 100644 include/libunwind-aarch64.h + create mode 100644 include/tdep-aarch64/dwarf-config.h + create mode 100644 include/tdep-aarch64/jmpbuf.h + create mode 100644 include/tdep-aarch64/libunwind_i.h + create mode 100644 src/aarch64/Gcreate_addr_space.c + create mode 100644 src/aarch64/Gget_proc_info.c + create mode 100644 src/aarch64/Gget_save_loc.c + create mode 100644 src/aarch64/Gglobal.c + create mode 100644 src/aarch64/Ginit.c + create mode 100644 src/aarch64/Ginit_local.c + create mode 100644 src/aarch64/Ginit_remote.c + create mode 100644 src/aarch64/Gis_signal_frame.c + create mode 100644 src/aarch64/Gregs.c + create mode 100644 src/aarch64/Gresume.c + create mode 100644 src/aarch64/Gstep.c + create mode 100644 src/aarch64/Lcreate_addr_space.c + create mode 100644 src/aarch64/Lget_proc_info.c + create mode 100644 src/aarch64/Lget_save_loc.c + create mode 100644 src/aarch64/Lglobal.c + create mode 100644 src/aarch64/Linit.c + create mode 100644 src/aarch64/Linit_local.c + create mode 100644 src/aarch64/Linit_remote.c + create mode 100644 src/aarch64/Lis_signal_frame.c + create mode 100644 src/aarch64/Lregs.c + create mode 100644 src/aarch64/Lresume.c + create mode 100644 src/aarch64/Lstep.c + create mode 100644 src/aarch64/gen-offsets.c + create mode 100644 src/aarch64/init.h + create mode 100644 src/aarch64/is_fpreg.c + create mode 100644 src/aarch64/offsets.h + create mode 100644 src/aarch64/regname.c + create mode 100644 src/aarch64/siglongjmp.S + create mode 100644 src/aarch64/unwind_i.h + +--- a/Makefile.am ++++ b/Makefile.am +@@ -2,6 +2,9 @@ include_HEADERS = include/libunwind-dyna + include/libunwind-ptrace.h \ + include/libunwind-coredump.h + ++if ARCH_AARCH64 ++include_HEADERS += include/libunwind-aarch64.h ++endif + if ARCH_ARM + include_HEADERS += include/libunwind-arm.h + endif +@@ -41,6 +44,9 @@ SUBDIRS = src tests doc + noinst_HEADERS = include/dwarf.h include/dwarf_i.h include/dwarf-eh.h \ + include/compiler.h include/libunwind_i.h include/mempool.h \ + include/remote.h \ ++ include/tdep-aarch64/dwarf-config.h \ ++ include/tdep-aarch64/jmpbuf.h \ ++ include/tdep-aarch64/libunwind_i.h \ + include/tdep-arm/dwarf-config.h include/tdep-arm/ex_tables.h \ + include/tdep-arm/jmpbuf.h include/tdep-arm/libunwind_i.h \ + include/tdep-ia64/jmpbuf.h include/tdep-ia64/rse.h \ +--- a/README ++++ b/README +@@ -9,6 +9,7 @@ several architecture/operating-system co + Linux/IA-64: Fully tested and supported. + Linux/PARISC: Works well, but C library missing unwind-info. + HP-UX/IA-64: Mostly works but known to have some serious limitations. ++ Linux/AArch64: Newly added. + Linux/PPC64: Newly added. + Linux/SuperH: Newly added. + FreeBSD/i386: Newly added. +--- a/configure.ac ++++ b/configure.ac +@@ -104,7 +104,7 @@ SET_ARCH([$target_cpu],[target_arch]) + + AC_ARG_ENABLE(coredump, + AS_HELP_STRING([--enable-coredump],[building libunwind-coredump library]),, +- [AS_CASE([$host_arch], [arm*|mips*|sh*|x86*], [enable_coredump=yes], [enable_coredump=no])] ++ [AS_CASE([$host_arch], [aarch64*|arm*|mips*|sh*|x86*], [enable_coredump=yes], [enable_coredump=no])] + ) + + AC_MSG_CHECKING([if we should build libunwind-coredump]) +@@ -121,6 +121,7 @@ AC_MSG_RESULT([$target_os]) + + AM_CONDITIONAL(BUILD_COREDUMP, test x$enable_coredump = xyes) + AM_CONDITIONAL(REMOTE_ONLY, test x$target_arch != x$host_arch) ++AM_CONDITIONAL(ARCH_AARCH64, test x$target_arch = xaarch64) + AM_CONDITIONAL(ARCH_ARM, test x$target_arch = xarm) + AM_CONDITIONAL(ARCH_IA64, test x$target_arch = xia64) + AM_CONDITIONAL(ARCH_HPPA, test x$target_arch = xhppa) +@@ -137,7 +138,7 @@ AM_CONDITIONAL(OS_FREEBSD, expr x$target + AC_MSG_CHECKING([for ELF helper width]) + case "${target_arch}" in + (arm|hppa|ppc32|x86|sh) use_elf32=yes; AC_MSG_RESULT([32]);; +-(ia64|ppc64|x86_64) use_elf64=yes; AC_MSG_RESULT([64]);; ++(aarch64|ia64|ppc64|x86_64) use_elf64=yes; AC_MSG_RESULT([64]);; + (mips) use_elfxx=yes; AC_MSG_RESULT([xx]);; + *) AC_MSG_ERROR([Unknown ELF target: ${target_arch}]) + esac +@@ -186,6 +187,7 @@ AS_HELP_STRING([--enable-cxx-exceptions] + # C++ exception handling doesn't work too well on x86 + case $target_arch in + x86*) enable_cxx_exceptions=no;; ++ aarch64*) enable_cxx_exceptions=no;; + arm*) enable_cxx_exceptions=no;; + mips*) enable_cxx_exceptions=no;; + *) enable_cxx_exceptions=yes;; +--- /dev/null ++++ b/include/libunwind-aarch64.h +@@ -0,0 +1,187 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2001-2004 Hewlett-Packard Co ++ Contributed by David Mosberger-Tang <davidm@hpl.hp.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#ifndef LIBUNWIND_H ++#define LIBUNWIND_H ++ ++#if defined(__cplusplus) || defined(c_plusplus) ++extern "C" { ++#endif ++ ++#include <inttypes.h> ++#include <stddef.h> ++#include <ucontext.h> ++ ++#define UNW_TARGET aarch64 ++#define UNW_TARGET_AARCH64 1 ++ ++#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ ++ ++/* This needs to be big enough to accommodate "struct cursor", while ++ leaving some slack for future expansion. Changing this value will ++ require recompiling all users of this library. Stack allocation is ++ relatively cheap and unwind-state copying is relatively rare, so we ++ want to err on making it rather too big than too small. */ ++ ++#define UNW_TDEP_CURSOR_LEN 4096 ++ ++typedef uint64_t unw_word_t; ++typedef int64_t unw_sword_t; ++ ++typedef long double unw_tdep_fpreg_t; ++ ++typedef struct ++ { ++ /* no aarch64-specific auxiliary proc-info */ ++ } ++unw_tdep_proc_info_t; ++ ++typedef enum ++ { ++ /* 64-bit general registers. */ ++ UNW_AARCH64_X0, ++ UNW_AARCH64_X1, ++ UNW_AARCH64_X2, ++ UNW_AARCH64_X3, ++ UNW_AARCH64_X4, ++ UNW_AARCH64_X5, ++ UNW_AARCH64_X6, ++ UNW_AARCH64_X7, ++ UNW_AARCH64_X8, ++ ++ /* Temporary registers. */ ++ UNW_AARCH64_X9, ++ UNW_AARCH64_X10, ++ UNW_AARCH64_X11, ++ UNW_AARCH64_X12, ++ UNW_AARCH64_X13, ++ UNW_AARCH64_X14, ++ UNW_AARCH64_X15, ++ ++ /* Intra-procedure-call temporary registers. */ ++ UNW_AARCH64_X16, ++ UNW_AARCH64_X17, ++ ++ /* Callee-saved registers. */ ++ UNW_AARCH64_X18, ++ UNW_AARCH64_X19, ++ UNW_AARCH64_X20, ++ UNW_AARCH64_X21, ++ UNW_AARCH64_X22, ++ UNW_AARCH64_X23, ++ UNW_AARCH64_X24, ++ UNW_AARCH64_X25, ++ UNW_AARCH64_X26, ++ UNW_AARCH64_X27, ++ UNW_AARCH64_X28, ++ ++ /* 64-bit frame pointer. */ ++ UNW_AARCH64_X29, ++ ++ /* 64-bit link register. */ ++ UNW_AARCH64_X30, ++ ++ /* 64-bit stack pointer. */ ++ UNW_AARCH64_SP = 31, ++ UNW_AARCH64_PC, ++ UNW_AARCH64_PSTATE, ++ ++ /* 128-bit FP/Advanced SIMD registers. */ ++ UNW_AARCH64_V0 = 64, ++ UNW_AARCH64_V1, ++ UNW_AARCH64_V2, ++ UNW_AARCH64_V3, ++ UNW_AARCH64_V4, ++ UNW_AARCH64_V5, ++ UNW_AARCH64_V6, ++ UNW_AARCH64_V7, ++ UNW_AARCH64_V8, ++ UNW_AARCH64_V9, ++ UNW_AARCH64_V10, ++ UNW_AARCH64_V11, ++ UNW_AARCH64_V12, ++ UNW_AARCH64_V13, ++ UNW_AARCH64_V14, ++ UNW_AARCH64_V15, ++ UNW_AARCH64_V16, ++ UNW_AARCH64_V17, ++ UNW_AARCH64_V18, ++ UNW_AARCH64_V19, ++ UNW_AARCH64_V20, ++ UNW_AARCH64_V21, ++ UNW_AARCH64_V22, ++ UNW_AARCH64_V23, ++ UNW_AARCH64_V24, ++ UNW_AARCH64_V25, ++ UNW_AARCH64_V26, ++ UNW_AARCH64_V27, ++ UNW_AARCH64_V28, ++ UNW_AARCH64_V29, ++ UNW_AARCH64_V30, ++ UNW_AARCH64_V31, ++ ++ UNW_AARCH64_FPSR, ++ UNW_AARCH64_FPCR, ++ ++ /* For AArch64, the CFA is the value of SP (x31) at the call site of the ++ previous frame. */ ++ UNW_AARCH64_CFA = UNW_AARCH64_SP, ++ ++ UNW_TDEP_LAST_REG = UNW_AARCH64_FPCR, ++ ++ UNW_TDEP_IP = UNW_AARCH64_X30, ++ UNW_TDEP_SP = UNW_AARCH64_SP, ++ UNW_TDEP_EH = UNW_AARCH64_X0, ++ ++ } ++aarch64_regnum_t; ++ ++/* Use R0 through R3 to pass exception handling information. */ ++#define UNW_TDEP_NUM_EH_REGS 4 ++ ++typedef struct unw_tdep_save_loc ++ { ++ /* Additional target-dependent info on a save location. */ ++ } ++unw_tdep_save_loc_t; ++ ++ ++/* On AArch64, we can directly use ucontext_t as the unwind context. */ ++typedef ucontext_t unw_tdep_context_t; ++ ++#include "libunwind-common.h" ++#include "libunwind-dynamic.h" ++ ++#define unw_tdep_getcontext(uc) (getcontext (uc), 0) ++#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) ++ ++extern int unw_tdep_is_fpreg (int); ++ ++#if defined(__cplusplus) || defined(c_plusplus) ++} ++#endif ++ ++#endif /* LIBUNWIND_H */ +--- a/include/libunwind.h.in ++++ b/include/libunwind.h.in +@@ -3,7 +3,9 @@ + + #ifndef UNW_REMOTE_ONLY + +-#if defined __arm__ ++#if defined __aarch64__ ++#include "libunwind-aarch64.h" ++#elif defined __arm__ + # include "libunwind-arm.h" + #elif defined __hppa__ + # include "libunwind-hppa.h" +--- /dev/null ++++ b/include/tdep-aarch64/dwarf-config.h +@@ -0,0 +1,52 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#ifndef dwarf_config_h ++#define dwarf_config_h ++ ++/* This matches the value udes by GCC (see ++ gcc/config/aarch64/aarch64.h:DWARF_FRAME_REGISTERS. */ ++#define DWARF_NUM_PRESERVED_REGS 97 ++ ++/* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ ++#define dwarf_is_big_endian(addr_space) 0 ++ ++#define dwarf_to_unw_regnum(reg) (((reg) <= UNW_AARCH64_V31) ? (reg) : 0) ++ ++/* Convert a pointer to a dwarf_cursor structure to a pointer to ++ unw_cursor_t. */ ++#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) ++ ++typedef struct dwarf_loc ++ { ++ unw_word_t val; ++#ifndef UNW_LOCAL_ONLY ++ unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ ++#endif ++ } ++dwarf_loc_t; ++ ++#endif /* dwarf_config_h */ +--- /dev/null ++++ b/include/tdep-aarch64/jmpbuf.h +@@ -0,0 +1,33 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++/* Use glibc's jump-buffer indices; NPTL peeks at SP: */ ++ ++/* FIXME for AArch64 */ ++ ++#define JB_SP 13 ++#define JB_RP 14 ++#define JB_MASK_SAVED 15 ++#define JB_MASK 16 +--- /dev/null ++++ b/include/tdep-aarch64/libunwind_i.h +@@ -0,0 +1,294 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2001-2005 Hewlett-Packard Co ++ Contributed by David Mosberger-Tang <davidm@hpl.hp.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#ifndef AARCH64_LIBUNWIND_I_H ++#define AARCH64_LIBUNWIND_I_H ++ ++/* Target-dependent definitions that are internal to libunwind but need ++ to be shared with target-independent code. */ ++ ++#include <stdlib.h> ++#include <libunwind.h> ++ ++#include "elf64.h" ++#include "mempool.h" ++#include "dwarf.h" ++ ++typedef struct ++ { ++ /* no aarch64-specific fast trace */ ++ } ++unw_tdep_frame_t; ++ ++#ifdef UNW_LOCAL_ONLY ++ ++typedef unw_word_t aarch64_loc_t; ++ ++#else /* !UNW_LOCAL_ONLY */ ++ ++typedef struct aarch64_loc ++ { ++ unw_word_t w0, w1; ++ } ++aarch64_loc_t; ++ ++#endif /* !UNW_LOCAL_ONLY */ ++ ++struct unw_addr_space ++ { ++ struct unw_accessors acc; ++ int big_endian; ++ unw_caching_policy_t caching_policy; ++#ifdef HAVE_ATOMIC_OPS_H ++ AO_t cache_generation; ++#else ++ uint32_t cache_generation; ++#endif ++ unw_word_t dyn_generation; /* see dyn-common.h */ ++ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ ++ struct dwarf_rs_cache global_cache; ++ struct unw_debug_frame_list *debug_frames; ++ }; ++ ++struct cursor ++ { ++ struct dwarf_cursor dwarf; /* must be first */ ++ enum ++ { ++ AARCH64_SCF_NONE, ++ AARCH64_SCF_LINUX_RT_SIGFRAME, ++ } ++ sigcontext_format; ++ unw_word_t sigcontext_addr; ++ unw_word_t sigcontext_sp; ++ unw_word_t sigcontext_pc; ++ }; ++ ++#define DWARF_GET_LOC(l) ((l).val) ++ ++#ifdef UNW_LOCAL_ONLY ++# define DWARF_NULL_LOC DWARF_LOC (0, 0) ++# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) ++# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) ++# define DWARF_IS_REG_LOC(l) 0 ++# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ ++ tdep_uc_addr((c)->as_arg, (r)), 0)) ++# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) ++# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ ++ tdep_uc_addr((c)->as_arg, (r)), 0)) ++ ++static inline int ++dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) ++{ ++ if (!DWARF_GET_LOC (loc)) ++ return -1; ++ *val = *(unw_fpreg_t *) DWARF_GET_LOC (loc); ++ return 0; ++} ++ ++static inline int ++dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) ++{ ++ if (!DWARF_GET_LOC (loc)) ++ return -1; ++ *(unw_fpreg_t *) DWARF_GET_LOC (loc) = val; ++ return 0; ++} ++ ++static inline int ++dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) ++{ ++ if (!DWARF_GET_LOC (loc)) ++ return -1; ++ *val = *(unw_word_t *) DWARF_GET_LOC (loc); ++ return 0; ++} ++ ++static inline int ++dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) ++{ ++ if (!DWARF_GET_LOC (loc)) ++ return -1; ++ *(unw_word_t *) DWARF_GET_LOC (loc) = val; ++ return 0; ++} ++ ++#else /* !UNW_LOCAL_ONLY */ ++# define DWARF_LOC_TYPE_FP (1 << 0) ++# define DWARF_LOC_TYPE_REG (1 << 1) ++# define DWARF_NULL_LOC DWARF_LOC (0, 0) ++# define DWARF_IS_NULL_LOC(l) \ ++ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) ++# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) ++# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) ++# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) ++# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) ++# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) ++# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ ++ | DWARF_LOC_TYPE_FP)) ++ ++static inline int ++dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) ++{ ++ char *valp = (char *) &val; ++ unw_word_t addr; ++ int ret; ++ ++ if (DWARF_IS_NULL_LOC (loc)) ++ return -UNW_EBADREG; ++ ++ if (DWARF_IS_REG_LOC (loc)) ++ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), ++ val, 0, c->as_arg); ++ ++ addr = DWARF_GET_LOC (loc); ++ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, ++ 0, c->as_arg)) < 0) ++ return ret; ++ ++ return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0, ++ c->as_arg); ++} ++ ++static inline int ++dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) ++{ ++ char *valp = (char *) &val; ++ unw_word_t addr; ++ int ret; ++ ++ if (DWARF_IS_NULL_LOC (loc)) ++ return -UNW_EBADREG; ++ ++ if (DWARF_IS_REG_LOC (loc)) ++ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), ++ &val, 1, c->as_arg); ++ ++ addr = DWARF_GET_LOC (loc); ++ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, ++ 1, c->as_arg)) < 0) ++ return ret; ++ ++ return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, ++ 1, c->as_arg); ++} ++ ++static inline int ++dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) ++{ ++ if (DWARF_IS_NULL_LOC (loc)) ++ return -UNW_EBADREG; ++ ++ /* If a code-generator were to save a value of type unw_word_t in a ++ floating-point register, we would have to support this case. I ++ suppose it could happen with MMX registers, but does it really ++ happen? */ ++ assert (!DWARF_IS_FP_LOC (loc)); ++ ++ if (DWARF_IS_REG_LOC (loc)) ++ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, ++ 0, c->as_arg); ++ else ++ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, ++ 0, c->as_arg); ++} ++ ++static inline int ++dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) ++{ ++ if (DWARF_IS_NULL_LOC (loc)) ++ return -UNW_EBADREG; ++ ++ /* If a code-generator were to save a value of type unw_word_t in a ++ floating-point register, we would have to support this case. I ++ suppose it could happen with MMX registers, but does it really ++ happen? */ ++ assert (!DWARF_IS_FP_LOC (loc)); ++ ++ if (DWARF_IS_REG_LOC (loc)) ++ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, ++ 1, c->as_arg); ++ else ++ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, ++ 1, c->as_arg); ++} ++ ++#endif /* !UNW_LOCAL_ONLY */ ++ ++ ++ ++#define tdep_getcontext_trace unw_getcontext ++#define tdep_init_done UNW_OBJ(init_done) ++#define tdep_init UNW_OBJ(init) ++/* Platforms that support UNW_INFO_FORMAT_TABLE need to define ++ tdep_search_unwind_table. */ ++#define tdep_search_unwind_table dwarf_search_unwind_table ++#define tdep_find_unwind_table dwarf_find_unwind_table ++#define tdep_uc_addr UNW_OBJ(uc_addr) ++#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) ++#define tdep_access_reg UNW_OBJ(access_reg) ++#define tdep_access_fpreg UNW_OBJ(access_fpreg) ++#define tdep_fetch_frame(c,ip,n) do {} while(0) ++#define tdep_cache_frame(c,rs) do {} while(0) ++#define tdep_reuse_frame(c,rs) do {} while(0) ++#define tdep_stash_frame(c,rs) do {} while(0) ++#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) ++ ++#ifdef UNW_LOCAL_ONLY ++# define tdep_find_proc_info(c,ip,n) \ ++ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ ++ (c)->as_arg) ++# define tdep_put_unwind_info(as,pi,arg) \ ++ dwarf_put_unwind_info((as), (pi), (arg)) ++#else ++# define tdep_find_proc_info(c,ip,n) \ ++ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ ++ (c)->as_arg) ++# define tdep_put_unwind_info(as,pi,arg) \ ++ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) ++#endif ++ ++#define tdep_get_as(c) ((c)->dwarf.as) ++#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) ++#define tdep_get_ip(c) ((c)->dwarf.ip) ++#define tdep_big_endian(as) ((as)->big_endian) ++ ++extern int tdep_init_done; ++ ++extern void tdep_init (void); ++extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, ++ unw_dyn_info_t *di, unw_proc_info_t *pi, ++ int need_unwind_info, void *arg); ++extern void *tdep_uc_addr (unw_tdep_context_t *uc, int reg); ++extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, ++ unsigned long *segbase, unsigned long *mapoff, ++ char *path, size_t pathlen); ++extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, ++ unw_word_t *valp, int write); ++extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, ++ unw_fpreg_t *valp, int write); ++ ++#endif /* AARCH64_LIBUNWIND_I_H */ +--- a/include/tdep/dwarf-config.h ++++ b/include/tdep/dwarf-config.h +@@ -1,7 +1,9 @@ + /* Provide a real file - not a symlink - as it would cause multiarch conflicts + when multiple different arch releases are installed simultaneously. */ + +-#if defined __arm__ ++#if defined __aarch64__ ++# include "tdep-aarch64/dwarf-config.h" ++#elif defined __arm__ + # include "tdep-arm/dwarf-config.h" + #elif defined __hppa__ + # include "tdep-hppa/dwarf-config.h" +--- a/include/tdep/jmpbuf.h ++++ b/include/tdep/jmpbuf.h +@@ -3,6 +3,8 @@ + + #ifndef UNW_REMOTE_ONLY + ++#if defined __aarch64__ ++# include "tdep-aarch64/jmpbuf.h" + #if defined __arm__ + # include "tdep-arm/jmpbuf.h" + #elif defined __hppa__ +--- a/include/tdep/libunwind_i.h.in ++++ b/include/tdep/libunwind_i.h.in +@@ -3,7 +3,9 @@ + + #ifndef UNW_REMOTE_ONLY + +-#if defined __arm__ ++#if defined __aarch64__ ++# include "tdep-aarch64/libunwind_i.h" ++#elif defined __arm__ + # include "tdep-arm/libunwind_i.h" + #elif defined __hppa__ + # include "tdep-hppa/libunwind_i.h" +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -170,6 +170,28 @@ libunwind_elfxx_la_SOURCES = elfxx.c + noinst_LTLIBRARIES += $(LIBUNWIND_ELF) + libunwind_la_LIBADD += $(LIBUNWIND_ELF) + ++# The list of files that go into libunwind and libunwind-aarch64: ++noinst_HEADERS += aarch64/init.h aarch64/offsets.h aarch64/unwind_i.h ++libunwind_la_SOURCES_aarch64_common = $(libunwind_la_SOURCES_common) \ ++ aarch64/is_fpreg.c aarch64/regname.c ++ ++# The list of files that go into libunwind: ++libunwind_la_SOURCES_aarch64 = $(libunwind_la_SOURCES_aarch64_common) \ ++ $(libunwind_la_SOURCES_local) \ ++ aarch64/Lcreate_addr_space.c aarch64/Lget_proc_info.c \ ++ aarch64/Lget_save_loc.c aarch64/Lglobal.c aarch64/Linit.c \ ++ aarch64/Linit_local.c aarch64/Linit_remote.c \ ++ aarch64/Lis_signal_frame.c aarch64/Lregs.c aarch64/Lresume.c \ ++ aarch64/Lstep.c ++ ++libunwind_aarch64_la_SOURCES_aarch64 = $(libunwind_la_SOURCES_aarch64_common) \ ++ $(libunwind_la_SOURCES_generic) \ ++ aarch64/Gcreate_addr_space.c aarch64/Gget_proc_info.c \ ++ aarch64/Gget_save_loc.c aarch64/Gglobal.c aarch64/Ginit.c \ ++ aarch64/Ginit_local.c aarch64/Ginit_remote.c \ ++ aarch64/Gis_signal_frame.c aarch64/Gregs.c aarch64/Gresume.c \ ++ aarch64/Gstep.c ++ + # The list of files that go into libunwind and libunwind-arm: + noinst_HEADERS += arm/init.h arm/offsets.h arm/unwind_i.h + libunwind_la_SOURCES_arm_common = $(libunwind_la_SOURCES_common) \ +@@ -418,6 +440,18 @@ if OS_FREEBSD + libunwind_coredump_la_SOURCES += coredump/_UCD_access_reg_freebsd.c + endif + ++if ARCH_AARCH64 ++ lib_LTLIBRARIES += libunwind-aarch64.la ++ libunwind_la_SOURCES = $(libunwind_la_SOURCES_aarch64) ++ libunwind_aarch64_la_SOURCES = $(libunwind_aarch64_la_SOURCES_aarch64) ++ libunwind_aarch64_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) ++ libunwind_aarch64_la_LIBADD = libunwind-dwarf-generic.la ++ libunwind_aarch64_la_LIBADD += libunwind-elf64.la ++if !REMOTE_ONLY ++ libunwind_aarch64_la_LIBADD += libunwind.la -lc ++endif ++ libunwind_setjmp_la_SOURCES += aarch64/siglongjmp.S ++else + if ARCH_ARM + lib_LTLIBRARIES += libunwind-arm.la + libunwind_la_SOURCES = $(libunwind_la_SOURCES_arm) +@@ -545,6 +579,7 @@ endif # ARCH_MIPS + endif # ARCH_HPPA + endif # ARCH_IA64 + endif # ARCH_ARM ++endif # ARCH_AARCH64 + + # libunwind-setjmp depends on libunwind-$(arch). Therefore must be added + # at the end. +@@ -567,7 +602,8 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -I + AM_CCASFLAGS = $(AM_CPPFLAGS) + noinst_HEADERS += unwind/unwind-internal.h + +-EXTRA_DIST = $(libunwind_la_SOURCES_arm) \ ++EXTRA_DIST = $(libunwind_la_SOURCES_aarch64) \ ++ $(libunwind_la_SOURCES_arm) \ + $(libunwind_la_SOURCES_hppa) \ + $(libunwind_la_SOURCES_ia64) \ + $(libunwind_la_SOURCES_mips) \ +@@ -579,6 +615,7 @@ EXTRA_DIST = $(libunwind_la_SOURCES_arm) + $(libunwind_la_SOURCES_common) \ + $(libunwind_la_SOURCES_local) \ + $(libunwind_la_SOURCES_generic) \ ++ $(libunwind_aarch64_la_SOURCES_aarch64) \ + $(libunwind_arm_la_SOURCES_arm) \ + $(libunwind_hppa_la_SOURCES_hppa) \ + $(libunwind_ia64_la_SOURCES_ia64) \ +--- /dev/null ++++ b/src/aarch64/Gcreate_addr_space.c +@@ -0,0 +1,60 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include <string.h> ++#include <stdlib.h> ++ ++#include "unwind_i.h" ++ ++PROTECTED unw_addr_space_t ++unw_create_addr_space (unw_accessors_t *a, int byte_order) ++{ ++#ifdef UNW_LOCAL_ONLY ++ return NULL; ++#else ++ unw_addr_space_t as; ++ ++ /* AArch64 supports little-endian and big-endian. */ ++ if (byte_order != 0 && byte_order != __LITTLE_ENDIAN ++ && byte_order != __BIG_ENDIAN) ++ return NULL; ++ ++ as = malloc (sizeof (*as)); ++ if (!as) ++ return NULL; ++ ++ memset (as, 0, sizeof (*as)); ++ ++ as->acc = *a; ++ ++ /* Default to little-endian for AArch64. */ ++ if (byte_order == 0 || byte_order == __LITTLE_ENDIAN) ++ as->big_endian = 0; ++ else ++ as->big_endian = 1; ++ ++ return as; ++#endif ++} +--- /dev/null ++++ b/src/aarch64/Gget_proc_info.c +@@ -0,0 +1,39 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++ ++PROTECTED int ++unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) ++{ ++ struct cursor *c = (struct cursor *) cursor; ++ int ret; ++ ++ ret = dwarf_make_proc_info (&c->dwarf); ++ if (ret < 0) ++ return ret; ++ ++ *pi = c->dwarf.pi; ++ return 0; ++} +--- /dev/null ++++ b/src/aarch64/Gget_save_loc.c +@@ -0,0 +1,100 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++ ++PROTECTED int ++unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) ++{ ++ struct cursor *c = (struct cursor *) cursor; ++ dwarf_loc_t loc; ++ ++ switch (reg) ++ { ++ case UNW_AARCH64_X0: ++ case UNW_AARCH64_X1: ++ case UNW_AARCH64_X2: ++ case UNW_AARCH64_X3: ++ case UNW_AARCH64_X4: ++ case UNW_AARCH64_X5: ++ case UNW_AARCH64_X6: ++ case UNW_AARCH64_X7: ++ case UNW_AARCH64_X8: ++ case UNW_AARCH64_X9: ++ case UNW_AARCH64_X10: ++ case UNW_AARCH64_X11: ++ case UNW_AARCH64_X12: ++ case UNW_AARCH64_X13: ++ case UNW_AARCH64_X14: ++ case UNW_AARCH64_X15: ++ case UNW_AARCH64_X16: ++ case UNW_AARCH64_X17: ++ case UNW_AARCH64_X18: ++ case UNW_AARCH64_X19: ++ case UNW_AARCH64_X20: ++ case UNW_AARCH64_X21: ++ case UNW_AARCH64_X22: ++ case UNW_AARCH64_X23: ++ case UNW_AARCH64_X24: ++ case UNW_AARCH64_X25: ++ case UNW_AARCH64_X26: ++ case UNW_AARCH64_X27: ++ case UNW_AARCH64_X28: ++ case UNW_AARCH64_X29: ++ case UNW_AARCH64_X30: ++ case UNW_AARCH64_SP: ++ case UNW_AARCH64_PC: ++ case UNW_AARCH64_PSTATE: ++ loc = c->dwarf.loc[reg]; ++ break; ++ ++ default: ++ loc = DWARF_NULL_LOC; /* default to "not saved" */ ++ break; ++ } ++ ++ memset (sloc, 0, sizeof (*sloc)); ++ ++ if (DWARF_IS_NULL_LOC (loc)) ++ { ++ sloc->type = UNW_SLT_NONE; ++ return 0; ++ } ++ ++#if !defined(UNW_LOCAL_ONLY) ++ if (DWARF_IS_REG_LOC (loc)) ++ { ++ sloc->type = UNW_SLT_REG; ++ sloc->u.regnum = DWARF_GET_LOC (loc); ++ } ++ else ++#endif ++ { ++ sloc->type = UNW_SLT_MEMORY; ++ sloc->u.addr = DWARF_GET_LOC (loc); ++ } ++ return 0; ++} +--- /dev/null ++++ b/src/aarch64/Gglobal.c +@@ -0,0 +1,57 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++#include "dwarf_i.h" ++ ++HIDDEN define_lock (aarch64_lock); ++HIDDEN int tdep_init_done; ++ ++HIDDEN void ++tdep_init (void) ++{ ++ intrmask_t saved_mask; ++ ++ sigfillset (&unwi_full_mask); ++ ++ lock_acquire (&aarch64_lock, saved_mask); ++ { ++ if (tdep_init_done) ++ /* another thread else beat us to it... */ ++ goto out; ++ ++ mi_init (); ++ ++ dwarf_init (); ++ ++#ifndef UNW_REMOTE_ONLY ++ aarch64_local_addr_space_init (); ++#endif ++ tdep_init_done = 1; /* signal that we're initialized... */ ++ } ++ out: ++ lock_release (&aarch64_lock, saved_mask); ++} +--- /dev/null ++++ b/src/aarch64/Ginit.c +@@ -0,0 +1,187 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include <stdlib.h> ++#include <string.h> ++ ++#include "unwind_i.h" ++ ++#ifdef UNW_REMOTE_ONLY ++ ++/* unw_local_addr_space is a NULL pointer in this case. */ ++PROTECTED unw_addr_space_t unw_local_addr_space; ++ ++#else /* !UNW_REMOTE_ONLY */ ++ ++static struct unw_addr_space local_addr_space; ++ ++PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; ++ ++static inline void * ++uc_addr (ucontext_t *uc, int reg) ++{ ++ if (reg >= UNW_AARCH64_X0 && reg <= UNW_AARCH64_V31) ++ return &uc->uc_mcontext.regs[reg]; ++ else ++ return NULL; ++} ++ ++# ifdef UNW_LOCAL_ONLY ++ ++HIDDEN void * ++tdep_uc_addr (ucontext_t *uc, int reg) ++{ ++ return uc_addr (uc, reg); ++} ++ ++# endif /* UNW_LOCAL_ONLY */ ++ ++HIDDEN unw_dyn_info_list_t _U_dyn_info_list; ++ ++/* XXX fix me: there is currently no way to locate the dyn-info list ++ by a remote unwinder. On ia64, this is done via a special ++ unwind-table entry. Perhaps something similar can be done with ++ DWARF2 unwind info. */ ++ ++static void ++put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) ++{ ++ /* it's a no-op */ ++} ++ ++static int ++get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, ++ void *arg) ++{ ++ *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; ++ return 0; ++} ++ ++static int ++access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, ++ void *arg) ++{ ++ if (write) ++ { ++ Debug (16, "mem[%lx] <- %lx\n", addr, *val); ++ *(unw_word_t *) addr = *val; ++ } ++ else ++ { ++ *val = *(unw_word_t *) addr; ++ Debug (16, "mem[%lx] -> %lx\n", addr, *val); ++ } ++ return 0; ++} ++ ++static int ++access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, ++ void *arg) ++{ ++ unw_word_t *addr; ++ ucontext_t *uc = arg; ++ ++ if (unw_is_fpreg (reg)) ++ goto badreg; ++ ++ if (!(addr = uc_addr (uc, reg))) ++ goto badreg; ++ ++ if (write) ++ { ++ *(unw_word_t *) addr = *val; ++ Debug (12, "%s <- %lx\n", unw_regname (reg), *val); ++ } ++ else ++ { ++ *val = *(unw_word_t *) addr; ++ Debug (12, "%s -> %lx\n", unw_regname (reg), *val); ++ } ++ return 0; ++ ++ badreg: ++ Debug (1, "bad register number %u\n", reg); ++ return -UNW_EBADREG; ++} ++ ++static int ++access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, ++ int write, void *arg) ++{ ++ ucontext_t *uc = arg; ++ unw_fpreg_t *addr; ++ ++ if (!unw_is_fpreg (reg)) ++ goto badreg; ++ ++ if (!(addr = uc_addr (uc, reg))) ++ goto badreg; ++ ++ if (write) ++ { ++ Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), ++ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); ++ *(unw_fpreg_t *) addr = *val; ++ } ++ else ++ { ++ *val = *(unw_fpreg_t *) addr; ++ Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), ++ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); ++ } ++ return 0; ++ ++ badreg: ++ Debug (1, "bad register number %u\n", reg); ++ /* attempt to access a non-preserved register */ ++ return -UNW_EBADREG; ++} ++ ++static int ++get_static_proc_name (unw_addr_space_t as, unw_word_t ip, ++ char *buf, size_t buf_len, unw_word_t *offp, ++ void *arg) ++{ ++ return _Uelf64_get_proc_name (as, getpid (), ip, buf, buf_len, offp); ++} ++ ++HIDDEN void ++aarch64_local_addr_space_init (void) ++{ ++ memset (&local_addr_space, 0, sizeof (local_addr_space)); ++ local_addr_space.caching_policy = UNW_CACHE_GLOBAL; ++ local_addr_space.acc.find_proc_info = dwarf_find_proc_info; ++ local_addr_space.acc.put_unwind_info = put_unwind_info; ++ local_addr_space.acc.get_dyn_info_list_addr = get_dyn_info_list_addr; ++ local_addr_space.acc.access_mem = access_mem; ++ local_addr_space.acc.access_reg = access_reg; ++ local_addr_space.acc.access_fpreg = access_fpreg; ++ local_addr_space.acc.resume = aarch64_local_resume; ++ local_addr_space.acc.get_proc_name = get_static_proc_name; ++ unw_flush_cache (&local_addr_space, 0, 0); ++} ++ ++#endif /* !UNW_REMOTE_ONLY */ +--- /dev/null ++++ b/src/aarch64/Ginit_local.c +@@ -0,0 +1,55 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2011-2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++#include "init.h" ++ ++#ifdef UNW_REMOTE_ONLY ++ ++PROTECTED int ++unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) ++{ ++ return -UNW_EINVAL; ++} ++ ++#else /* !UNW_REMOTE_ONLY */ ++ ++PROTECTED int ++unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) ++{ ++ struct cursor *c = (struct cursor *) cursor; ++ ++ if (!tdep_init_done) ++ tdep_init (); ++ ++ Debug (1, "(cursor=%p)\n", c); ++ ++ c->dwarf.as = unw_local_addr_space; ++ c->dwarf.as_arg = uc; ++ ++ return common_init (c, 1); ++} ++ ++#endif /* !UNW_REMOTE_ONLY */ +--- /dev/null ++++ b/src/aarch64/Ginit_remote.c +@@ -0,0 +1,45 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "init.h" ++#include "unwind_i.h" ++ ++PROTECTED int ++unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) ++{ ++#ifdef UNW_LOCAL_ONLY ++ return -UNW_EINVAL; ++#else /* !UNW_LOCAL_ONLY */ ++ struct cursor *c = (struct cursor *) cursor; ++ ++ if (!tdep_init_done) ++ tdep_init (); ++ ++ Debug (1, "(cursor=%p)\n", c); ++ ++ c->dwarf.as = as; ++ c->dwarf.as_arg = as_arg; ++ return common_init (c, 0); ++#endif /* !UNW_LOCAL_ONLY */ ++} +--- /dev/null ++++ b/src/aarch64/Gis_signal_frame.c +@@ -0,0 +1,64 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++ ++/* The restorer stub will always have the form: ++ ++ d2801168 movz x8, #0x8b ++ d4000001 svc #0x0 ++*/ ++ ++PROTECTED int ++unw_is_signal_frame (unw_cursor_t *cursor) ++{ ++#ifdef __linux__ ++ struct cursor *c = (struct cursor *) cursor; ++ unw_word_t w0, ip; ++ unw_addr_space_t as; ++ unw_accessors_t *a; ++ void *arg; ++ int ret; ++ ++ as = c->dwarf.as; ++ a = unw_get_accessors (as); ++ arg = c->dwarf.as_arg; ++ ++ ip = c->dwarf.ip; ++ ++ ret = (*a->access_mem) (as, ip, &w0, 0, arg); ++ if (ret < 0) ++ return ret; ++ ++ /* FIXME: distinguish 32bit insn vs 64bit registers. */ ++ if (w0 != 0xd4000001d2801168) ++ return 0; ++ ++ return 1; ++ ++#else ++ return -UNW_ENOINFO; ++#endif ++} +--- /dev/null ++++ b/src/aarch64/Gregs.c +@@ -0,0 +1,113 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++ ++HIDDEN int ++tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, ++ int write) ++{ ++ dwarf_loc_t loc = DWARF_NULL_LOC; ++ unsigned int mask; ++ ++ switch (reg) ++ { ++ case UNW_AARCH64_X0: ++ case UNW_AARCH64_X1: ++ case UNW_AARCH64_X2: ++ case UNW_AARCH64_X3: ++ mask = 1 << reg; ++ if (write) ++ { ++ c->dwarf.eh_args[reg] = *valp; ++ c->dwarf.eh_valid_mask |= mask; ++ return 0; ++ } ++ else if ((c->dwarf.eh_valid_mask & mask) != 0) ++ { ++ *valp = c->dwarf.eh_args[reg]; ++ return 0; ++ } ++ else ++ loc = c->dwarf.loc[reg]; ++ break; ++ ++ case UNW_AARCH64_X4: ++ case UNW_AARCH64_X5: ++ case UNW_AARCH64_X6: ++ case UNW_AARCH64_X7: ++ case UNW_AARCH64_X8: ++ case UNW_AARCH64_X9: ++ case UNW_AARCH64_X10: ++ case UNW_AARCH64_X11: ++ case UNW_AARCH64_X12: ++ case UNW_AARCH64_X13: ++ case UNW_AARCH64_X14: ++ case UNW_AARCH64_X15: ++ case UNW_AARCH64_X16: ++ case UNW_AARCH64_X17: ++ case UNW_AARCH64_X18: ++ case UNW_AARCH64_X19: ++ case UNW_AARCH64_X20: ++ case UNW_AARCH64_X21: ++ case UNW_AARCH64_X22: ++ case UNW_AARCH64_X23: ++ case UNW_AARCH64_X24: ++ case UNW_AARCH64_X25: ++ case UNW_AARCH64_X26: ++ case UNW_AARCH64_X27: ++ case UNW_AARCH64_X28: ++ case UNW_AARCH64_X29: ++ case UNW_AARCH64_X30: ++ case UNW_AARCH64_PC: ++ case UNW_AARCH64_PSTATE: ++ loc = c->dwarf.loc[reg]; ++ break; ++ ++ case UNW_AARCH64_SP: ++ if (write) ++ return -UNW_EREADONLYREG; ++ *valp = c->dwarf.cfa; ++ return 0; ++ ++ default: ++ Debug (1, "bad register number %u\n", reg); ++ return -UNW_EBADREG; ++ } ++ ++ if (write) ++ return dwarf_put (&c->dwarf, loc, *valp); ++ else ++ return dwarf_get (&c->dwarf, loc, valp); ++} ++ ++HIDDEN int ++tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, ++ int write) ++{ ++ Debug (1, "bad register number %u\n", reg); ++ return -UNW_EBADREG; ++} +--- /dev/null ++++ b/src/aarch64/Gresume.c +@@ -0,0 +1,177 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2011-2013 Linaro Limited ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++#include "offsets.h" ++ ++#ifndef UNW_REMOTE_ONLY ++ ++HIDDEN inline int ++aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) ++{ ++#ifdef __linux__ ++ struct cursor *c = (struct cursor *) cursor; ++ unw_tdep_context_t *uc = c->dwarf.as_arg; ++ ++ if (c->sigcontext_format == AARCH64_SCF_NONE) ++ { ++ /* Since there are no signals involved here we restore the non scratch ++ registers only. */ ++ unsigned long regs[11]; ++ regs[0] = uc->uc_mcontext.regs[19]; ++ regs[1] = uc->uc_mcontext.regs[20]; ++ regs[2] = uc->uc_mcontext.regs[21]; ++ regs[3] = uc->uc_mcontext.regs[22]; ++ regs[4] = uc->uc_mcontext.regs[23]; ++ regs[5] = uc->uc_mcontext.regs[24]; ++ regs[6] = uc->uc_mcontext.regs[25]; ++ regs[7] = uc->uc_mcontext.regs[26]; ++ regs[8] = uc->uc_mcontext.regs[27]; ++ regs[9] = uc->uc_mcontext.regs[28]; ++ regs[10] = uc->uc_mcontext.regs[30]; /* LR */ ++ unsigned long sp = uc->uc_mcontext.sp; ++ ++ struct regs_overlay { ++ char x[sizeof(regs)]; ++ }; ++ ++ asm volatile ( ++ "ldp x19, x20, [%0]\n" ++ "ldp x21, x22, [%0,16]\n" ++ "ldp x23, x24, [%0,32]\n" ++ "ldp x25, x26, [%0,48]\n" ++ "ldp x27, x28, [%0,64]\n" ++ "ldr x30, [%0,80]\n" ++ "mov sp, %1\n" ++ "ret \n" ++ : ++ : "r" (regs), ++ "r" (sp), ++ "m" (*(struct regs_overlay *)regs) ++ ); ++ } ++ else ++ { ++ struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; ++ ++ if (c->dwarf.eh_valid_mask & 0x1) sc->regs[0] = c->dwarf.eh_args[0]; ++ if (c->dwarf.eh_valid_mask & 0x2) sc->regs[1] = c->dwarf.eh_args[1]; ++ if (c->dwarf.eh_valid_mask & 0x4) sc->regs[2] = c->dwarf.eh_args[2]; ++ if (c->dwarf.eh_valid_mask & 0x8) sc->regs[3] = c->dwarf.eh_args[3]; ++ ++ sc->regs[4] = uc->uc_mcontext.regs[4]; ++ sc->regs[5] = uc->uc_mcontext.regs[5]; ++ sc->regs[6] = uc->uc_mcontext.regs[6]; ++ sc->regs[7] = uc->uc_mcontext.regs[7]; ++ sc->regs[8] = uc->uc_mcontext.regs[8]; ++ sc->regs[9] = uc->uc_mcontext.regs[9]; ++ sc->regs[10] = uc->uc_mcontext.regs[10]; ++ sc->regs[11] = uc->uc_mcontext.regs[11]; ++ sc->regs[12] = uc->uc_mcontext.regs[12]; ++ sc->regs[13] = uc->uc_mcontext.regs[13]; ++ sc->regs[14] = uc->uc_mcontext.regs[14]; ++ sc->regs[15] = uc->uc_mcontext.regs[15]; ++ sc->regs[16] = uc->uc_mcontext.regs[16]; ++ sc->regs[17] = uc->uc_mcontext.regs[17]; ++ sc->regs[18] = uc->uc_mcontext.regs[18]; ++ sc->regs[19] = uc->uc_mcontext.regs[19]; ++ sc->regs[20] = uc->uc_mcontext.regs[20]; ++ sc->regs[21] = uc->uc_mcontext.regs[21]; ++ sc->regs[22] = uc->uc_mcontext.regs[22]; ++ sc->regs[23] = uc->uc_mcontext.regs[23]; ++ sc->regs[24] = uc->uc_mcontext.regs[24]; ++ sc->regs[25] = uc->uc_mcontext.regs[25]; ++ sc->regs[26] = uc->uc_mcontext.regs[26]; ++ sc->regs[27] = uc->uc_mcontext.regs[27]; ++ sc->regs[28] = uc->uc_mcontext.regs[28]; ++ sc->regs[29] = uc->uc_mcontext.regs[29]; ++ sc->regs[30] = uc->uc_mcontext.regs[30]; ++ sc->sp = uc->uc_mcontext.sp; ++ sc->pc = uc->uc_mcontext.pc; ++ sc->pstate = uc->uc_mcontext.pstate; ++ ++ asm volatile ( ++ "mov sp, %0\n" ++ "ret %1\n" ++ : : "r" (c->sigcontext_sp), "r" (c->sigcontext_pc) ++ ); ++ } ++ unreachable(); ++#else ++ printf ("%s: implement me\n", __FUNCTION__); ++#endif ++ return -UNW_EINVAL; ++} ++ ++#endif /* !UNW_REMOTE_ONLY */ ++ ++static inline void ++establish_machine_state (struct cursor *c) ++{ ++ unw_addr_space_t as = c->dwarf.as; ++ void *arg = c->dwarf.as_arg; ++ unw_fpreg_t fpval; ++ unw_word_t val; ++ int reg; ++ ++ Debug (8, "copying out cursor state\n"); ++ ++ for (reg = 0; reg <= UNW_AARCH64_PSTATE; ++reg) ++ { ++ Debug (16, "copying %s %d\n", unw_regname (reg), reg); ++ if (unw_is_fpreg (reg)) ++ { ++ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) ++ as->acc.access_fpreg (as, reg, &fpval, 1, arg); ++ } ++ else ++ { ++ if (tdep_access_reg (c, reg, &val, 0) >= 0) ++ as->acc.access_reg (as, reg, &val, 1, arg); ++ } ++ } ++} ++ ++PROTECTED int ++unw_resume (unw_cursor_t *cursor) ++{ ++ struct cursor *c = (struct cursor *) cursor; ++ ++ Debug (1, "(cursor=%p)\n", c); ++ ++ if (!c->dwarf.ip) ++ { ++ /* This can happen easily when the frame-chain gets truncated ++ due to bad or missing unwind-info. */ ++ Debug (1, "refusing to resume execution at address 0\n"); ++ return -UNW_EINVAL; ++ } ++ ++ establish_machine_state (c); ++ ++ return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, ++ c->dwarf.as_arg); ++} +--- /dev/null ++++ b/src/aarch64/Gstep.c +@@ -0,0 +1,129 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2011-2013 Linaro Limited ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++#include "offsets.h" ++ ++PROTECTED int ++unw_handle_signal_frame (unw_cursor_t *cursor) ++{ ++ struct cursor *c = (struct cursor *) cursor; ++ int ret; ++ unw_word_t sc_addr, sp, sp_addr = c->dwarf.cfa; ++ struct dwarf_loc sp_loc = DWARF_LOC (sp_addr, 0); ++ ++ if ((ret = dwarf_get (&c->dwarf, sp_loc, &sp)) < 0) ++ return -UNW_EUNSPEC; ++ ++ ret = unw_is_signal_frame (cursor); ++ Debug(1, "unw_is_signal_frame()=%d\n", ret); ++ ++ /* Save the SP and PC to be able to return execution at this point ++ later in time (unw_resume). */ ++ c->sigcontext_sp = c->dwarf.cfa; ++ c->sigcontext_pc = c->dwarf.ip; ++ ++ if (ret) ++ { ++ c->sigcontext_format = AARCH64_SCF_LINUX_RT_SIGFRAME; ++ sc_addr = sp_addr + sizeof (siginfo_t) + LINUX_UC_MCONTEXT_OFF; ++ } ++ else ++ return -UNW_EUNSPEC; ++ ++ c->sigcontext_addr = sc_addr; ++ ++ /* Update the dwarf cursor. ++ Set the location of the registers to the corresponding addresses of the ++ uc_mcontext / sigcontext structure contents. */ ++ c->dwarf.loc[UNW_AARCH64_X0] = DWARF_LOC (sc_addr + LINUX_SC_X0_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X1] = DWARF_LOC (sc_addr + LINUX_SC_X1_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X2] = DWARF_LOC (sc_addr + LINUX_SC_X2_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X3] = DWARF_LOC (sc_addr + LINUX_SC_X3_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X4] = DWARF_LOC (sc_addr + LINUX_SC_X4_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X5] = DWARF_LOC (sc_addr + LINUX_SC_X5_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X6] = DWARF_LOC (sc_addr + LINUX_SC_X6_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X7] = DWARF_LOC (sc_addr + LINUX_SC_X7_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X8] = DWARF_LOC (sc_addr + LINUX_SC_X8_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X9] = DWARF_LOC (sc_addr + LINUX_SC_X9_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X10] = DWARF_LOC (sc_addr + LINUX_SC_X10_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X11] = DWARF_LOC (sc_addr + LINUX_SC_X11_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X12] = DWARF_LOC (sc_addr + LINUX_SC_X12_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X13] = DWARF_LOC (sc_addr + LINUX_SC_X13_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X14] = DWARF_LOC (sc_addr + LINUX_SC_X14_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X15] = DWARF_LOC (sc_addr + LINUX_SC_X15_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X16] = DWARF_LOC (sc_addr + LINUX_SC_X16_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X17] = DWARF_LOC (sc_addr + LINUX_SC_X17_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X18] = DWARF_LOC (sc_addr + LINUX_SC_X18_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X19] = DWARF_LOC (sc_addr + LINUX_SC_X19_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X20] = DWARF_LOC (sc_addr + LINUX_SC_X20_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X21] = DWARF_LOC (sc_addr + LINUX_SC_X21_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X22] = DWARF_LOC (sc_addr + LINUX_SC_X22_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X23] = DWARF_LOC (sc_addr + LINUX_SC_X23_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X24] = DWARF_LOC (sc_addr + LINUX_SC_X24_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X25] = DWARF_LOC (sc_addr + LINUX_SC_X25_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X26] = DWARF_LOC (sc_addr + LINUX_SC_X26_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X27] = DWARF_LOC (sc_addr + LINUX_SC_X27_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X28] = DWARF_LOC (sc_addr + LINUX_SC_X28_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X29] = DWARF_LOC (sc_addr + LINUX_SC_X29_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_X30] = DWARF_LOC (sc_addr + LINUX_SC_X30_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_SP] = DWARF_LOC (sc_addr + LINUX_SC_SP_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_PC] = DWARF_LOC (sc_addr + LINUX_SC_PC_OFF, 0); ++ c->dwarf.loc[UNW_AARCH64_PSTATE] = DWARF_LOC (sc_addr + LINUX_SC_PSTATE_OFF, 0); ++ ++ /* Set SP/CFA and PC/IP. */ ++ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_SP], &c->dwarf.cfa); ++ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_PC], &c->dwarf.ip); ++ ++ c->dwarf.pi_valid = 0; ++ ++ return 1; ++} ++ ++PROTECTED int ++unw_step (unw_cursor_t *cursor) ++{ ++ struct cursor *c = (struct cursor *) cursor; ++ int ret; ++ ++ Debug (1, "(cursor=%p, ip=0x%016lx, cfa=0x%016lx))\n", ++ c, c->dwarf.ip, c->dwarf.cfa); ++ ++ /* Check if this is a signal frame. */ ++ if (unw_is_signal_frame (cursor)) ++ return unw_handle_signal_frame (cursor); ++ ++ ret = dwarf_step (&c->dwarf); ++ Debug(1, "dwarf_step()=%d\n", ret); ++ ++ if (unlikely (ret == -UNW_ESTOPUNWIND)) ++ return ret; ++ ++ if (unlikely (ret < 0)) ++ return 0; ++ ++ return (c->dwarf.ip == 0) ? 0 : 1; ++} +--- /dev/null ++++ b/src/aarch64/Lcreate_addr_space.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gcreate_addr_space.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Lget_proc_info.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gget_proc_info.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Lget_save_loc.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gget_save_loc.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Lglobal.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gglobal.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Linit.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Ginit.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Linit_local.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Ginit_local.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Linit_remote.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Ginit_remote.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Lis_signal_frame.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gis_signal_frame.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Lregs.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gregs.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Lresume.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gresume.c" ++#endif +--- /dev/null ++++ b/src/aarch64/Lstep.c +@@ -0,0 +1,5 @@ ++#define UNW_LOCAL_ONLY ++#include <libunwind.h> ++#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) ++#include "Gstep.c" ++#endif +--- /dev/null ++++ b/src/aarch64/gen-offsets.c +@@ -0,0 +1,68 @@ ++#include <stdio.h> ++#include <stddef.h> ++#include <ucontext.h> ++#include <asm/sigcontext.h> ++ ++#define UC(N,X) \ ++ printf ("#define LINUX_UC_" N "_OFF\t0x%X\n", offsetof (ucontext_t, X)) ++ ++#define SC(N,X) \ ++ printf ("#define LINUX_SC_" N "_OFF\t0x%X\n", offsetof (struct sigcontext, X)) ++ ++int ++main (void) ++{ ++ printf ( ++"/* Linux-specific definitions: */\n\n" ++ ++"/* Define various structure offsets to simplify cross-compilation. */\n\n" ++ ++"/* Offsets for AArch64 Linux \"ucontext_t\": */\n\n"); ++ ++ UC ("FLAGS", uc_flags); ++ UC ("LINK", uc_link); ++ UC ("STACK", uc_stack); ++ UC ("MCONTEXT", uc_mcontext); ++ UC ("SIGMASK", uc_sigmask); ++ ++ printf ("\n/* Offsets for AArch64 Linux \"struct sigcontext\": */\n\n"); ++ ++ SC ("R0", regs[0]); ++ SC ("R1", regs[1]); ++ SC ("R2", regs[2]); ++ SC ("R3", regs[3]); ++ SC ("R4", regs[4]); ++ SC ("R5", regs[5]); ++ SC ("R6", regs[6]); ++ SC ("R7", regs[7]); ++ SC ("R8", regs[8]); ++ SC ("R9", regs[9]); ++ SC ("R10", regs[10]); ++ SC ("R11", regs[11]); ++ SC ("R12", regs[12]); ++ SC ("R13", regs[13]); ++ SC ("R14", regs[14]); ++ SC ("R15", regs[15]); ++ SC ("R16", regs[16]); ++ SC ("R17", regs[17]); ++ SC ("R18", regs[18]); ++ SC ("R19", regs[19]); ++ SC ("R20", regs[20]); ++ SC ("R21", regs[21]); ++ SC ("R22", regs[22]); ++ SC ("R23", regs[23]); ++ SC ("R24", regs[24]); ++ SC ("R25", regs[25]); ++ SC ("R26", regs[26]); ++ SC ("R27", regs[27]); ++ SC ("R28", regs[28]); ++ SC ("R29", regs[29]); ++ SC ("R30", regs[30]); ++ SC ("R31", regs[31]); ++ ++ SC ("PC", pc); ++ SC ("SP", sp); ++ SC ("Fault", fault_address); ++ SC ("state", pstate); ++ return 0; ++} +--- /dev/null ++++ b/src/aarch64/init.h +@@ -0,0 +1,127 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++ ++static inline int ++common_init (struct cursor *c, unsigned use_prev_instr) ++{ ++ int ret, i; ++ ++ c->dwarf.loc[UNW_AARCH64_X0] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X0); ++ c->dwarf.loc[UNW_AARCH64_X1] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X1); ++ c->dwarf.loc[UNW_AARCH64_X2] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X2); ++ c->dwarf.loc[UNW_AARCH64_X3] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X3); ++ c->dwarf.loc[UNW_AARCH64_X4] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X4); ++ c->dwarf.loc[UNW_AARCH64_X5] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X5); ++ c->dwarf.loc[UNW_AARCH64_X6] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X6); ++ c->dwarf.loc[UNW_AARCH64_X7] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X7); ++ c->dwarf.loc[UNW_AARCH64_X8] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X8); ++ c->dwarf.loc[UNW_AARCH64_X9] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X9); ++ c->dwarf.loc[UNW_AARCH64_X10] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X10); ++ c->dwarf.loc[UNW_AARCH64_X11] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X11); ++ c->dwarf.loc[UNW_AARCH64_X12] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X12); ++ c->dwarf.loc[UNW_AARCH64_X13] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X13); ++ c->dwarf.loc[UNW_AARCH64_X14] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X14); ++ c->dwarf.loc[UNW_AARCH64_X15] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X15); ++ c->dwarf.loc[UNW_AARCH64_X16] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X16); ++ c->dwarf.loc[UNW_AARCH64_X17] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X17); ++ c->dwarf.loc[UNW_AARCH64_X18] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X18); ++ c->dwarf.loc[UNW_AARCH64_X19] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X19); ++ c->dwarf.loc[UNW_AARCH64_X20] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X20); ++ c->dwarf.loc[UNW_AARCH64_X21] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X21); ++ c->dwarf.loc[UNW_AARCH64_X22] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X22); ++ c->dwarf.loc[UNW_AARCH64_X23] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X23); ++ c->dwarf.loc[UNW_AARCH64_X24] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X24); ++ c->dwarf.loc[UNW_AARCH64_X25] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X25); ++ c->dwarf.loc[UNW_AARCH64_X26] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X26); ++ c->dwarf.loc[UNW_AARCH64_X27] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X27); ++ c->dwarf.loc[UNW_AARCH64_X28] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X28); ++ c->dwarf.loc[UNW_AARCH64_X29] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X29); ++ c->dwarf.loc[UNW_AARCH64_X30] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X30); ++ c->dwarf.loc[UNW_AARCH64_SP] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_SP); ++ c->dwarf.loc[UNW_AARCH64_PC] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_PC); ++ c->dwarf.loc[UNW_AARCH64_PSTATE] = DWARF_REG_LOC (&c->dwarf, ++ UNW_AARCH64_PSTATE); ++ c->dwarf.loc[UNW_AARCH64_V0] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V0); ++ c->dwarf.loc[UNW_AARCH64_V1] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V1); ++ c->dwarf.loc[UNW_AARCH64_V2] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V2); ++ c->dwarf.loc[UNW_AARCH64_V3] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V3); ++ c->dwarf.loc[UNW_AARCH64_V4] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V4); ++ c->dwarf.loc[UNW_AARCH64_V5] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V5); ++ c->dwarf.loc[UNW_AARCH64_V6] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V6); ++ c->dwarf.loc[UNW_AARCH64_V7] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V7); ++ c->dwarf.loc[UNW_AARCH64_V8] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V8); ++ c->dwarf.loc[UNW_AARCH64_V9] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V9); ++ c->dwarf.loc[UNW_AARCH64_V10] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V10); ++ c->dwarf.loc[UNW_AARCH64_V11] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V11); ++ c->dwarf.loc[UNW_AARCH64_V12] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V12); ++ c->dwarf.loc[UNW_AARCH64_V13] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V13); ++ c->dwarf.loc[UNW_AARCH64_V14] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V14); ++ c->dwarf.loc[UNW_AARCH64_V15] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V15); ++ c->dwarf.loc[UNW_AARCH64_V16] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V16); ++ c->dwarf.loc[UNW_AARCH64_V17] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V17); ++ c->dwarf.loc[UNW_AARCH64_V18] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V18); ++ c->dwarf.loc[UNW_AARCH64_V19] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V19); ++ c->dwarf.loc[UNW_AARCH64_V20] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V20); ++ c->dwarf.loc[UNW_AARCH64_V21] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V21); ++ c->dwarf.loc[UNW_AARCH64_V22] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V22); ++ c->dwarf.loc[UNW_AARCH64_V23] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V23); ++ c->dwarf.loc[UNW_AARCH64_V24] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V24); ++ c->dwarf.loc[UNW_AARCH64_V25] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V25); ++ c->dwarf.loc[UNW_AARCH64_V26] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V26); ++ c->dwarf.loc[UNW_AARCH64_V27] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V27); ++ c->dwarf.loc[UNW_AARCH64_V28] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V28); ++ c->dwarf.loc[UNW_AARCH64_V29] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V29); ++ c->dwarf.loc[UNW_AARCH64_V30] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V30); ++ c->dwarf.loc[UNW_AARCH64_V31] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V31); ++ ++ for (i = UNW_AARCH64_PSTATE + 1; i < UNW_AARCH64_V0; ++i) ++ c->dwarf.loc[i] = DWARF_NULL_LOC; ++ ++ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_PC], &c->dwarf.ip); ++ if (ret < 0) ++ return ret; ++ ++ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_SP], &c->dwarf.cfa); ++ if (ret < 0) ++ return ret; ++ ++ c->sigcontext_format = AARCH64_SCF_NONE; ++ c->sigcontext_addr = 0; ++ c->sigcontext_sp = 0; ++ c->sigcontext_pc = 0; ++ ++ c->dwarf.args_size = 0; ++ c->dwarf.ret_addr_column = 0; ++ c->dwarf.stash_frames = 0; ++ c->dwarf.use_prev_instr = use_prev_instr; ++ c->dwarf.pi_valid = 0; ++ c->dwarf.pi_is_dynamic = 0; ++ c->dwarf.hint = 0; ++ c->dwarf.prev_rs = 0; ++ ++ return 0; ++} +--- /dev/null ++++ b/src/aarch64/is_fpreg.c +@@ -0,0 +1,32 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "libunwind_i.h" ++ ++PROTECTED int ++unw_is_fpreg (int regnum) ++{ ++ return (regnum >= UNW_AARCH64_V0 && regnum <= UNW_AARCH64_V31); ++} +--- /dev/null ++++ b/src/aarch64/offsets.h +@@ -0,0 +1,49 @@ ++/* Linux-specific definitions: */ ++ ++/* Define various structure offsets to simplify cross-compilation. */ ++ ++/* Offsets for AArch64 Linux "ucontext_t": */ ++ ++#define LINUX_UC_FLAGS_OFF 0x0 ++#define LINUX_UC_LINK_OFF 0x8 ++#define LINUX_UC_STACK_OFF 0x10 ++#define LINUX_UC_SIGMASK_OFF 0x28 ++#define LINUX_UC_MCONTEXT_OFF 0xb0 ++ ++/* Offsets for AArch64 Linux "struct sigcontext": */ ++ ++#define LINUX_SC_FAULTADDRESS_OFF 0x00 ++#define LINUX_SC_X0_OFF 0x008 ++#define LINUX_SC_X1_OFF 0x010 ++#define LINUX_SC_X2_OFF 0x018 ++#define LINUX_SC_X3_OFF 0x020 ++#define LINUX_SC_X4_OFF 0x028 ++#define LINUX_SC_X5_OFF 0x030 ++#define LINUX_SC_X6_OFF 0x038 ++#define LINUX_SC_X7_OFF 0x040 ++#define LINUX_SC_X8_OFF 0x048 ++#define LINUX_SC_X9_OFF 0x050 ++#define LINUX_SC_X10_OFF 0x058 ++#define LINUX_SC_X11_OFF 0x060 ++#define LINUX_SC_X12_OFF 0x068 ++#define LINUX_SC_X13_OFF 0x070 ++#define LINUX_SC_X14_OFF 0x078 ++#define LINUX_SC_X15_OFF 0x080 ++#define LINUX_SC_X16_OFF 0x088 ++#define LINUX_SC_X17_OFF 0x090 ++#define LINUX_SC_X18_OFF 0x098 ++#define LINUX_SC_X19_OFF 0x0a0 ++#define LINUX_SC_X20_OFF 0x0a8 ++#define LINUX_SC_X21_OFF 0x0b0 ++#define LINUX_SC_X22_OFF 0x0b8 ++#define LINUX_SC_X23_OFF 0x0c0 ++#define LINUX_SC_X24_OFF 0x0c8 ++#define LINUX_SC_X25_OFF 0x0d0 ++#define LINUX_SC_X26_OFF 0x0d8 ++#define LINUX_SC_X27_OFF 0x0e0 ++#define LINUX_SC_X28_OFF 0x0e8 ++#define LINUX_SC_X29_OFF 0x0f0 ++#define LINUX_SC_X30_OFF 0x0f8 ++#define LINUX_SC_SP_OFF 0x100 ++#define LINUX_SC_PC_OFF 0x108 ++#define LINUX_SC_PSTATE_OFF 0x110 +--- /dev/null ++++ b/src/aarch64/regname.c +@@ -0,0 +1,106 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#include "unwind_i.h" ++ ++static const char *const regname[] = ++ { ++ [UNW_AARCH64_X0] = "x0", ++ [UNW_AARCH64_X1] = "x1", ++ [UNW_AARCH64_X2] = "x2", ++ [UNW_AARCH64_X3] = "x3", ++ [UNW_AARCH64_X4] = "x4", ++ [UNW_AARCH64_X5] = "x5", ++ [UNW_AARCH64_X6] = "x6", ++ [UNW_AARCH64_X7] = "x7", ++ [UNW_AARCH64_X8] = "x8", ++ [UNW_AARCH64_X9] = "x9", ++ [UNW_AARCH64_X10] = "x10", ++ [UNW_AARCH64_X11] = "x11", ++ [UNW_AARCH64_X12] = "x12", ++ [UNW_AARCH64_X13] = "x13", ++ [UNW_AARCH64_X14] = "x14", ++ [UNW_AARCH64_X15] = "x15", ++ [UNW_AARCH64_X16] = "ip0", ++ [UNW_AARCH64_X17] = "ip1", ++ [UNW_AARCH64_X18] = "x18", ++ [UNW_AARCH64_X19] = "x19", ++ [UNW_AARCH64_X20] = "x20", ++ [UNW_AARCH64_X21] = "x21", ++ [UNW_AARCH64_X22] = "x22", ++ [UNW_AARCH64_X23] = "x23", ++ [UNW_AARCH64_X24] = "x24", ++ [UNW_AARCH64_X25] = "x25", ++ [UNW_AARCH64_X26] = "x26", ++ [UNW_AARCH64_X27] = "x27", ++ [UNW_AARCH64_X28] = "x28", ++ [UNW_AARCH64_X29] = "fp", ++ [UNW_AARCH64_X30] = "lr", ++ [UNW_AARCH64_SP] = "sp", ++ [UNW_AARCH64_PC] = "pc", ++ [UNW_AARCH64_V0] = "v0", ++ [UNW_AARCH64_V1] = "v1", ++ [UNW_AARCH64_V2] = "v2", ++ [UNW_AARCH64_V3] = "v3", ++ [UNW_AARCH64_V4] = "v4", ++ [UNW_AARCH64_V5] = "v5", ++ [UNW_AARCH64_V6] = "v6", ++ [UNW_AARCH64_V7] = "v7", ++ [UNW_AARCH64_V8] = "v8", ++ [UNW_AARCH64_V9] = "v9", ++ [UNW_AARCH64_V10] = "v10", ++ [UNW_AARCH64_V11] = "v11", ++ [UNW_AARCH64_V12] = "v12", ++ [UNW_AARCH64_V13] = "v13", ++ [UNW_AARCH64_V14] = "v14", ++ [UNW_AARCH64_V15] = "v15", ++ [UNW_AARCH64_V16] = "v16", ++ [UNW_AARCH64_V17] = "v17", ++ [UNW_AARCH64_V18] = "v18", ++ [UNW_AARCH64_V19] = "v19", ++ [UNW_AARCH64_V20] = "v20", ++ [UNW_AARCH64_V21] = "v21", ++ [UNW_AARCH64_V22] = "v22", ++ [UNW_AARCH64_V23] = "v23", ++ [UNW_AARCH64_V24] = "v24", ++ [UNW_AARCH64_V25] = "v25", ++ [UNW_AARCH64_V26] = "v26", ++ [UNW_AARCH64_V27] = "v27", ++ [UNW_AARCH64_V28] = "v28", ++ [UNW_AARCH64_V29] = "v29", ++ [UNW_AARCH64_V30] = "v30", ++ [UNW_AARCH64_V31] = "v31", ++ [UNW_AARCH64_FPSR] = "fpsr", ++ [UNW_AARCH64_FPCR] = "fpcr", ++ }; ++ ++PROTECTED const char * ++unw_regname (unw_regnum_t reg) ++{ ++ if (reg < (unw_regnum_t) ARRAY_SIZE (regname) && regname[reg] != NULL) ++ return regname[reg]; ++ else ++ return "???"; ++} +--- /dev/null ++++ b/src/aarch64/siglongjmp.S +@@ -0,0 +1,12 @@ ++ /* Dummy implementation for now. */ ++ ++ .global _UI_siglongjmp_cont ++ .global _UI_longjmp_cont ++ ++_UI_siglongjmp_cont: ++_UI_longjmp_cont: ++ ret ++#ifdef __linux__ ++ /* We do not need executable stack. */ ++ .section .note.GNU-stack,"",%progbits ++#endif +--- /dev/null ++++ b/src/aarch64/unwind_i.h +@@ -0,0 +1,43 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2008 CodeSourcery ++ Copyright (C) 2013 Linaro Limited ++ ++This file is part of libunwind. ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ++ ++#ifndef unwind_i_h ++#define unwind_i_h ++ ++#include <stdint.h> ++ ++#include <libunwind-aarch64.h> ++ ++#include "libunwind_i.h" ++ ++#define aarch64_lock UNW_OBJ(lock) ++#define aarch64_local_resume UNW_OBJ(local_resume) ++#define aarch64_local_addr_space_init UNW_OBJ(local_addr_space_init) ++ ++extern void aarch64_local_addr_space_init (void); ++extern int aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, ++ void *arg); ++ ++#endif /* unwind_i_h */ +--- a/src/coredump/_UCD_access_reg_linux.c ++++ b/src/coredump/_UCD_access_reg_linux.c +@@ -39,7 +39,10 @@ _UCD_access_reg (unw_addr_space_t as, + return -UNW_EINVAL; + } + +-#if defined(UNW_TARGET_ARM) ++#if defined(UNW_TARGET_AARCH64) ++ if (regnum < 0 || regnum >= UNW_AARCH64_FPCR) ++ goto badreg; ++#elif defined(UNW_TARGET_ARM) + if (regnum < 0 || regnum >= 16) + goto badreg; + #elif defined(UNW_TARGET_SH) +--- a/src/ptrace/_UPT_reg_offset.c ++++ b/src/ptrace/_UPT_reg_offset.c +@@ -1,6 +1,7 @@ + /* libunwind - a platform-independent unwind library + Copyright (C) 2003-2004 Hewlett-Packard Co + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> ++ Copyright (C) 2013 Linaro Limited + + This file is part of libunwind. + +@@ -501,6 +502,41 @@ const int _UPT_reg_offset[UNW_REG_LAST + + [UNW_ARM_R15] = 0x3c, + #elif defined(UNW_TARGET_MIPS) + #elif defined(UNW_TARGET_SH) ++#elif defined(UNW_TARGET_AARCH64) ++ [UNW_AARCH64_X0] = 0x00, ++ [UNW_AARCH64_X1] = 0x08, ++ [UNW_AARCH64_X2] = 0x10, ++ [UNW_AARCH64_X3] = 0x18, ++ [UNW_AARCH64_X4] = 0x20, ++ [UNW_AARCH64_X5] = 0x28, ++ [UNW_AARCH64_X6] = 0x30, ++ [UNW_AARCH64_X7] = 0x38, ++ [UNW_AARCH64_X8] = 0x40, ++ [UNW_AARCH64_X9] = 0x48, ++ [UNW_AARCH64_X10] = 0x50, ++ [UNW_AARCH64_X11] = 0x58, ++ [UNW_AARCH64_X12] = 0x60, ++ [UNW_AARCH64_X13] = 0x68, ++ [UNW_AARCH64_X14] = 0x70, ++ [UNW_AARCH64_X15] = 0x78, ++ [UNW_AARCH64_X16] = 0x80, ++ [UNW_AARCH64_X17] = 0x88, ++ [UNW_AARCH64_X18] = 0x90, ++ [UNW_AARCH64_X19] = 0x98, ++ [UNW_AARCH64_X20] = 0xa0, ++ [UNW_AARCH64_X21] = 0xa8, ++ [UNW_AARCH64_X22] = 0xb0, ++ [UNW_AARCH64_X23] = 0xb8, ++ [UNW_AARCH64_X24] = 0xc0, ++ [UNW_AARCH64_X25] = 0xc8, ++ [UNW_AARCH64_X26] = 0xd0, ++ [UNW_AARCH64_X27] = 0xd8, ++ [UNW_AARCH64_X28] = 0xe0, ++ [UNW_AARCH64_X29] = 0xe8, ++ [UNW_AARCH64_X30] = 0xf0, ++ [UNW_AARCH64_SP] = 0xf8, ++ [UNW_AARCH64_PC] = 0x100, ++ [UNW_AARCH64_PSTATE] = 0x108 + #else + # error Fix me. + #endif diff --git a/meta/recipes-support/libunwind/libunwind-1.1/Fix-test-case-link-failure-on-PowerPC-systems-with-Altivec.patch b/meta/recipes-support/libunwind/libunwind-1.1/Fix-test-case-link-failure-on-PowerPC-systems-with-Altivec.patch new file mode 100644 index 0000000000..dc0f5c1b47 --- /dev/null +++ b/meta/recipes-support/libunwind/libunwind-1.1/Fix-test-case-link-failure-on-PowerPC-systems-with-Altivec.patch @@ -0,0 +1,28 @@ +Fix test case link failure on PowerPC systems with Altivec + +Upstream-Status:backport + +On systems where the system compiler supports Altivec by default, +the libunwind Makefile will attempt to build an extra test case +ppc64-test-altivec. Unfortunately, the link step will fail since +the Makefile does not actually link against the libunwind library. + +Fixed by adding the appropriate LDADD macro. + +Signed-off-by: Ulrich Weigand <address@hidden> +--- + tests/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 0e30536..9c76628 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -201,3 +201,4 @@ Lia64_test_rbs_LDADD = $(LIBUNWIND_local) + Lia64_test_readonly_LDADD = $(LIBUNWIND_local) + ia64_test_dyn1_LDADD = $(LIBUNWIND) + ia64_test_sig_LDADD = $(LIBUNWIND) ++ppc64_test_altivec_LDADD = $(LIBUNWIND) +-- +1.8.5 + diff --git a/meta/recipes-support/libunwind/libunwind-1.1/Link-libunwind-to-libgcc_s-rather-than-libgcc.patch b/meta/recipes-support/libunwind/libunwind-1.1/Link-libunwind-to-libgcc_s-rather-than-libgcc.patch new file mode 100644 index 0000000000..0e55c91b80 --- /dev/null +++ b/meta/recipes-support/libunwind/libunwind-1.1/Link-libunwind-to-libgcc_s-rather-than-libgcc.patch @@ -0,0 +1,42 @@ +From 508ca17a7be01d1cc960d9a07d0af4513948fb8d Mon Sep 17 00:00:00 2001 +From: Thierry Reding <treding@nvidia.com> +Date: Fri, 27 Jun 2014 08:40:33 +0200 +Subject: [PATCH] Link libunwind to libgcc_s rather than libgcc + +For some architectures, -lgcc and -lgcc_s are not equivalent. On ARM for +example, libgcc_s.so.1 contains some symbols needed by libunwind which +are not present in libgcc. + +This causes the following link error when building the X.Org X server +with libunwind support: + + CCLD Xorg + /usr/lib/libunwind.so: undefined reference to `__aeabi_unwind_cpp_pr0' + /usr/lib/libunwind.so: undefined reference to `__aeabi_unwind_cpp_pr1' + +Linking against libgcc_s explicitly solves this problem. + +Upstream-Status: Backport + +Signed-off-by: Thierry Reding <treding@nvidia.com> +Signed-off-by: Jonathan Liu <net147@gmail.com> +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index cffe19b..3beb5f2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -258,7 +258,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[#ifndef __INTEL_COMPILER + + if test x$GCC = xyes -a x$intel_compiler != xyes; then + CFLAGS="${CFLAGS} -fexceptions -Wall -Wsign-compare" +- LIBCRTS="-lgcc" ++ LIBCRTS="-lgcc_s" + fi + AC_MSG_RESULT([$intel_compiler]) + +-- +2.3.2 + diff --git a/meta/recipes-support/libunwind/libunwind-1.1/Support-building-with-older-compilers.patch b/meta/recipes-support/libunwind/libunwind-1.1/Support-building-with-older-compilers.patch new file mode 100644 index 0000000000..268b702dcb --- /dev/null +++ b/meta/recipes-support/libunwind/libunwind-1.1/Support-building-with-older-compilers.patch @@ -0,0 +1,72 @@ +From 10b064ffe902d5af31bb49bd8e4f03c545f8d462 Mon Sep 17 00:00:00 2001 +From: Ladislav Michl <ladis@linux-mips.org> +Date: Tue, 13 Nov 2012 11:19:47 +0100 +Subject: [PATCH] Support building with older compilers. + +Add a check for __builtin_unreachable. + +Upstream-Status: Pending +--- + configure.ac | 11 +++++++++++ + include/libunwind_i.h | 6 ++++++ + src/arm/Gresume.c | 2 +- + src/sh/Gresume.c | 2 +- + 4 files changed, 19 insertions(+), 2 deletions(-) + +--- a/configure.ac ++++ b/configure.ac +@@ -285,6 +285,17 @@ if test x$have__builtin___clear_cache = + fi + AC_MSG_RESULT([$have__builtin___clear_cache]) + ++AC_MSG_CHECKING([for __builtin_unreachable]) ++AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[]], [[__builtin_unreachable()]])], ++ [have__builtin_unreachable=yes], ++ [have__builtin_unreachable=no]) ++if test x$have__builtin_unreachable = xyes; then ++ AC_DEFINE([HAVE__BUILTIN_UNREACHABLE], [1], ++ [Defined if __builtin_unreachable() is available]) ++fi ++AC_MSG_RESULT([$have__builtin_unreachable]) ++ + AC_MSG_CHECKING([for __sync atomics]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[]], [[ +--- a/include/libunwind_i.h ++++ b/include/libunwind_i.h +@@ -72,6 +72,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DE + # endif + #endif + ++#if defined(HAVE__BUILTIN_UNREACHABLE) ++# define unreachable() __builtin_unreachable() ++#else ++# define unreachable() do { } while (1) ++#endif ++ + #ifdef DEBUG + # define UNW_DEBUG 1 + #else +--- a/src/arm/Gresume.c ++++ b/src/arm/Gresume.c +@@ -96,7 +96,7 @@ arm_local_resume (unw_addr_space_t as, u + : : "r" (c->sigcontext_sp), "r" (c->sigcontext_pc) + ); + } +- __builtin_unreachable(); ++ unreachable(); + #else + printf ("%s: implement me\n", __FUNCTION__); + #endif +--- a/src/sh/Gresume.c ++++ b/src/sh/Gresume.c +@@ -109,7 +109,7 @@ sh_local_resume (unw_addr_space_t as, un + "r" (c->sigcontext_pc) + ); + } +- __builtin_unreachable(); ++ unreachable(); + #endif + return -UNW_EINVAL; + } diff --git a/meta/recipes-support/libunwind/libunwind.inc b/meta/recipes-support/libunwind/libunwind.inc new file mode 100644 index 0000000000..6743b21fcf --- /dev/null +++ b/meta/recipes-support/libunwind/libunwind.inc @@ -0,0 +1,31 @@ +DESCRIPTION = "a portable and efficient C programming interface (API) to determine the call-chain of a program" +HOMEPAGE = "http://www.nongnu.org/libunwind" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3fced11d6df719b47505837a51c16ae5" + +SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz" + +inherit autotools + +PACKAGECONFIG ??= "" +PACKAGECONFIG[lzma] = "--enable-minidebuginfo,--disable-minidebuginfo,lzma" + +EXTRA_OECONF_arm = "--enable-debug-frame" +EXTRA_OECONF_aarch64 = "--enable-debug-frame" + +CFLAGS += "${ATOMICOPS}" +ATOMICOPS_armv5 = "-DAO_USE_PTHREAD_DEFS=1" +ATOMICOPS_armv4 = "-DAO_USE_PTHREAD_DEFS=1" +ATOMICOPS ?= "" + +LDFLAGS += "${LIBATOMICS}" +LIBATOMICS_armv5 = "-latomic_ops" +LIBATOMICS_armv4 = "-latomic_ops" +LIBATOMICS ?= "" + +DEPENDS += "${DEPLIBATOMICS}" +DEPLIBATOMICS_armv5 = "libatomics-ops" +DEPLIBATOMICS_armv4 = "libatomics-ops" +DEPLIBATOMICS ?= "" + +BBCLASSEXTEND = "native" diff --git a/meta/recipes-support/libunwind/libunwind_1.1.bb b/meta/recipes-support/libunwind/libunwind_1.1.bb new file mode 100644 index 0000000000..ee6f522d68 --- /dev/null +++ b/meta/recipes-support/libunwind/libunwind_1.1.bb @@ -0,0 +1,11 @@ +require libunwind.inc + +SRC_URI += "\ + file://Support-building-with-older-compilers.patch \ + file://AArch64-port.patch \ + file://Fix-test-case-link-failure-on-PowerPC-systems-with-Altivec.patch \ + file://Link-libunwind-to-libgcc_s-rather-than-libgcc.patch \ +" + +SRC_URI[md5sum] = "fb4ea2f6fbbe45bf032cd36e586883ce" +SRC_URI[sha256sum] = "9dfe0fcae2a866de9d3942c66995e4b460230446887dbdab302d41a8aee8d09a" diff --git a/meta/recipes-support/liburcu/liburcu/Revert-Blacklist-ARM-gcc-4.8.0-4.8.1-4.8.2.patch b/meta/recipes-support/liburcu/liburcu/Revert-Blacklist-ARM-gcc-4.8.0-4.8.1-4.8.2.patch new file mode 100644 index 0000000000..535a7384cb --- /dev/null +++ b/meta/recipes-support/liburcu/liburcu/Revert-Blacklist-ARM-gcc-4.8.0-4.8.1-4.8.2.patch @@ -0,0 +1,47 @@ +From 7b3df100346128d780f218b881d563d1fd12e310 Mon Sep 17 00:00:00 2001 +From: Jonathan Liu <net147@gmail.com> +Date: Mon, 20 Oct 2014 13:46:10 +1100 +Subject: [PATCH] Revert "Blacklist ARM gcc 4.8.0, 4.8.1, 4.8.2" + +This reverts commit 4b79310aa3d408ba30fee02cc497a68072d38a99. +OE-Core is using a patched GCC 4.8.2 which is able to compile liburcu +properly. + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Jonathan Liu <net147@gmail.com> +--- + urcu/compiler.h | 19 ------------------- + 1 file changed, 19 deletions(-) + +diff --git a/urcu/compiler.h b/urcu/compiler.h +index 1e30903..19534f0 100644 +--- a/urcu/compiler.h ++++ b/urcu/compiler.h +@@ -108,23 +108,4 @@ + + #define CAA_ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +-/* +- * Don't allow compiling with buggy compiler. +- */ +- +-#ifdef __GNUC__ +-# define URCU_GCC_VERSION (__GNUC__ * 10000 \ +- + __GNUC_MINOR__ * 100 \ +- + __GNUC_PATCHLEVEL__) +- +-/* +- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854 +- */ +-# ifdef __ARMEL__ +-# if URCU_GCC_VERSION >= 40800 && URCU_GCC_VERSION <= 40802 +-# error Your gcc version produces clobbered frame accesses +-# endif +-# endif +-#endif +- + #endif /* _URCU_COMPILER_H */ +-- +2.1.2 + diff --git a/meta/recipes-support/liburcu/liburcu/aarch64.patch b/meta/recipes-support/liburcu/liburcu/aarch64.patch new file mode 100644 index 0000000000..c6cc8c2fd3 --- /dev/null +++ b/meta/recipes-support/liburcu/liburcu/aarch64.patch @@ -0,0 +1,19 @@ +libucru: recognize aarch64 + +Make the same as "arm" internally. + +Upstream-Status: Pending + +Signed-off-by: joe.slater@windriver.com + + +--- a/configure.ac ++++ b/configure.ac +@@ -77,6 +77,7 @@ AS_CASE([$host_cpu], + [alpha*], [ARCHTYPE="alpha"], + [ia64], [ARCHTYPE="gcc"], + [arm*], [ARCHTYPE="arm"], ++ [aarch64], [ARCHTYPE="arm"], + [mips*], [ARCHTYPE="mips"], + [tile*], [ARCHTYPE="gcc"], + [ARCHTYPE="unknown"] diff --git a/meta/recipes-support/liburcu/liburcu/fixsepbuild.patch b/meta/recipes-support/liburcu/liburcu/fixsepbuild.patch deleted file mode 100644 index 9cd0ab9e73..0000000000 --- a/meta/recipes-support/liburcu/liburcu/fixsepbuild.patch +++ /dev/null @@ -1,19 +0,0 @@ -Upstream-Status: Pending - -Fix out of tree build for doc examples - -Signed-off-by: Cristiana Voicu <cristiana.voicu@intel.com> - -Index: userspace-rcu-0.8.0/doc/examples/Makefile.am -=================================================================== ---- userspace-rcu-0.8.0.orig/doc/examples/Makefile.am 2013-08-30 21:25:20.000000000 +0300 -+++ userspace-rcu-0.8.0/doc/examples/Makefile.am 2013-10-21 17:52:34.774597179 +0300 -@@ -128,7 +128,7 @@ - cp -fR $(srcdir)/$$subdir $(builddir); \ - done; \ - fi -- $(MAKE) -f dist-files/Makefile AM_CPPFLAGS="$(CPPFLAGS) -I../../../urcu/ -I../../../" AM_CFLAGS='$(CFLAGS)' AM_LDFLAGS='$(LDFLAGS) -L../../../.libs/ -Wl,-rpath="$(PWD)/../../.libs/"' $(AM_MAKEFLAGS) all -+ $(MAKE) -f dist-files/Makefile AM_CPPFLAGS="$(CPPFLAGS) -I$(top_srcdir) -I../../../urcu/ -I../../../" AM_CFLAGS='$(CFLAGS)' AM_LDFLAGS='$(LDFLAGS) -L../../../.libs/ -Wl,-rpath="$(PWD)/../../.libs/"' $(AM_MAKEFLAGS) all - - clean-local: - $(MAKE) -f dist-files/Makefile $(AM_MAKEFLAGS) clean diff --git a/meta/recipes-support/liburcu/liburcu_0.8.1.bb b/meta/recipes-support/liburcu/liburcu_0.8.6.bb index a9e7b2c899..263b77e995 100644 --- a/meta/recipes-support/liburcu/liburcu_0.8.1.bb +++ b/meta/recipes-support/liburcu/liburcu_0.8.6.bb @@ -8,10 +8,12 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0f060c30a27922ce9c0d557a639b4fa3 \ file://urcu/uatomic/x86.h;beginline=4;endline=21;md5=220552f72c55b102f2ee35929734ef42" SRC_URI = "http://lttng.org/files/urcu/userspace-rcu-${PV}.tar.bz2 \ - file://fixsepbuild.patch" + file://Revert-Blacklist-ARM-gcc-4.8.0-4.8.1-4.8.2.patch \ + file://aarch64.patch \ + " -SRC_URI[md5sum] = "c0c0613bcce3b6954a050faa6dec6f51" -SRC_URI[sha256sum] = "8008f697b030d7d3043ebd3a72be63cefc9242ed2d50520d30211e3908a4e01e" +SRC_URI[md5sum] = "834d91d939dd55108a05763be9879856" +SRC_URI[sha256sum] = "b1a5d3bce014ba7a702759bc60b692c1cd46ff0e8a5b53f0d0a95e22db74ab21" S = "${WORKDIR}/userspace-rcu-${PV}" CFLAGS_append_libc-uclibc = " -D_GNU_SOURCE" diff --git a/meta/recipes-support/libusb/libusb1_1.0.18.bb b/meta/recipes-support/libusb/libusb1_1.0.19.bb index 395145af10..a20e1fcdb8 100644 --- a/meta/recipes-support/libusb/libusb1_1.0.18.bb +++ b/meta/recipes-support/libusb/libusb1_1.0.19.bb @@ -11,8 +11,8 @@ BBCLASSEXTEND = "native nativesdk" SRC_URI = "${SOURCEFORGE_MIRROR}/libusb/libusb-${PV}.tar.bz2 \ " -SRC_URI[md5sum] = "4a6d049923efc6496f1d383054dac1a6" -SRC_URI[sha256sum] = "c73f5cec45a5de94418da4e151b7232958571926984acfb9bce02b9424e83720" +SRC_URI[md5sum] = "f9e2bb5879968467e5ca756cb4e1fa7e" +SRC_URI[sha256sum] = "6c502c816002f90d4f76050a6429c3a7e0d84204222cbff2dce95dd773ba6840" S = "${WORKDIR}/libusb-${PV}" diff --git a/meta/recipes-support/libxslt/libxslt_1.1.28.bb b/meta/recipes-support/libxslt/libxslt_1.1.28.bb index 0b2526dbee..ded883e457 100644 --- a/meta/recipes-support/libxslt/libxslt_1.1.28.bb +++ b/meta/recipes-support/libxslt/libxslt_1.1.28.bb @@ -35,6 +35,11 @@ RPROVIDES_${PN}-bin += "${PN}-utils" RCONFLICTS_${PN}-bin += "${PN}-utils" RREPLACES_${PN}-bin += "${PN}-utils" + +do_install_append_class-native () { + create_wrapper ${D}/${bindir}/xsltproc XML_CATALOG_FILES=${sysconfdir}/xml/catalog.xml +} + FILES_${PN} += "${libdir}/libxslt-plugins" FILES_${PN}-dev += "${libdir}/xsltConf.sh" diff --git a/meta/recipes-support/lz4/lz4_svn.bb b/meta/recipes-support/lz4/lz4_svn.bb index 38e36d8256..363e439eea 100644 --- a/meta/recipes-support/lz4/lz4_svn.bb +++ b/meta/recipes-support/lz4/lz4_svn.bb @@ -2,10 +2,10 @@ SUMMARY = "Extremely Fast Compression algorithm" DESCRIPTION = "LZ4 is a very fast lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems." LICENSE = "BSD" -LIC_FILES_CHKSUM = "file://LICENSE;md5=2008d2325e11691e17fcaa3a6046f850" +LIC_FILES_CHKSUM = "file://LICENSE;md5=0b0d063f37a4477b54af2459477dcafd" # Upstream names releases after SVN revs -SRCREV = "112" +SRCREV = "127" PV = "r${SRCREV}" SRC_URI = "svn://lz4.googlecode.com/svn/;module=trunk;protocol=http" diff --git a/meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch b/meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch new file mode 100644 index 0000000000..db3a70e803 --- /dev/null +++ b/meta/recipes-support/lzo/lzo/0001-Use-memcpy-instead-of-reinventing-it.patch @@ -0,0 +1,70 @@ +From: Simon McVittie <smcv@debian.org> +Date: Sun, 23 Nov 2014 22:50:33 +0000 +Subject: Use memcpy() instead of reinventing it + +gcc inlines memcpy() with results as fast as handwritten code (at +least in my brief testing with lzop), and knows the alignment +constraints for our architectures. + +Change suggested by Julian Taylor. + +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=757037 + +Upstream-Status: Pending +Signed-off-by: Saul Wold <sgw@linux.intel.com> +--- + minilzo/minilzo.c | 14 ++++++++++++++ + src/lzo_func.h | 14 ++++++++++++++ + 2 files changed, 28 insertions(+) + + +diff --git a/minilzo/minilzo.c b/minilzo/minilzo.c +index ab2be5f..6913c2f 100644 +--- a/minilzo/minilzo.c ++++ b/minilzo/minilzo.c +@@ -3523,6 +3523,20 @@ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8) + if ((void)0, n__n > 0) do { *d__n++ = *s__n++; } while (--n__n > 0); \ + LZO_BLOCK_END + ++/* Debian-specific change: we know that our compiler inlines memcpy() with ++ * constant n to be as fast as handwritten code, and knows which architectures ++ * need things correctly aligned. */ ++#undef LZO_MEMOPS_COPY1 ++#undef LZO_MEMOPS_COPY2 ++#undef LZO_MEMOPS_COPY4 ++#undef LZO_MEMOPS_COPY8 ++#undef LZO_MEMOPS_COPYN ++#define LZO_MEMOPS_COPY1(dd,ss) memcpy(dd, ss, 1) ++#define LZO_MEMOPS_COPY2(dd,ss) memcpy(dd, ss, 2) ++#define LZO_MEMOPS_COPY4(dd,ss) memcpy(dd, ss, 4) ++#define LZO_MEMOPS_COPY8(dd,ss) memcpy(dd, ss, 8) ++#define LZO_MEMOPS_COPYN(dd,ss,nn) memcpy(dd, ss, nn) ++ + __lzo_static_forceinline lzo_uint16_t lzo_memops_get_le16(const lzo_voidp ss) + { + lzo_uint16_t v; +diff --git a/src/lzo_func.h b/src/lzo_func.h +index dfaa676..1cc1b53 100644 +--- a/src/lzo_func.h ++++ b/src/lzo_func.h +@@ -333,6 +333,20 @@ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8) + if ((void)0, n__n > 0) do { *d__n++ = *s__n++; } while (--n__n > 0); \ + LZO_BLOCK_END + ++/* Debian-specific change: we know that our compiler inlines memcpy() with ++ * constant n to be as fast as handwritten code, and knows which architectures ++ * need things correctly aligned. */ ++#undef LZO_MEMOPS_COPY1 ++#undef LZO_MEMOPS_COPY2 ++#undef LZO_MEMOPS_COPY4 ++#undef LZO_MEMOPS_COPY8 ++#undef LZO_MEMOPS_COPYN ++#define LZO_MEMOPS_COPY1(dd,ss) memcpy(dd, ss, 1) ++#define LZO_MEMOPS_COPY2(dd,ss) memcpy(dd, ss, 2) ++#define LZO_MEMOPS_COPY4(dd,ss) memcpy(dd, ss, 4) ++#define LZO_MEMOPS_COPY8(dd,ss) memcpy(dd, ss, 8) ++#define LZO_MEMOPS_COPYN(dd,ss,nn) memcpy(dd, ss, nn) ++ + __lzo_static_forceinline lzo_uint16_t lzo_memops_get_le16(const lzo_voidp ss) + { + lzo_uint16_t v; diff --git a/meta/recipes-support/lzo/lzo-2.06/acinclude.m4 b/meta/recipes-support/lzo/lzo/acinclude.m4 index c4d2ccd5b5..c4d2ccd5b5 100644 --- a/meta/recipes-support/lzo/lzo-2.06/acinclude.m4 +++ b/meta/recipes-support/lzo/lzo/acinclude.m4 diff --git a/meta/recipes-support/lzo/lzo/run-ptest b/meta/recipes-support/lzo/lzo/run-ptest new file mode 100644 index 0000000000..2ea7745f70 --- /dev/null +++ b/meta/recipes-support/lzo/lzo/run-ptest @@ -0,0 +1,8 @@ +#!/bin/sh + +./lzotest -mavail -n10 -q /etc/services +LZOTEST=./lzotest /bin/sh -e "./check.sh" "/etc" +./align +./chksum +./simple +./testmini diff --git a/meta/recipes-support/lzo/lzo_2.06.bb b/meta/recipes-support/lzo/lzo_2.06.bb deleted file mode 100644 index 23f54edd80..0000000000 --- a/meta/recipes-support/lzo/lzo_2.06.bb +++ /dev/null @@ -1,24 +0,0 @@ -SUMMARY = "Lossless data compression library" -HOMEPAGE = "http://www.oberhumer.com/opensource/lzo/" -SECTION = "libs" -LICENSE = "GPLv2+" -LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ - file://src/lzo_init.c;beginline=23;endline=40;md5=924a0f71f5394f6d404be3b458474769" -PR = "r1" - -SRC_URI = "http://www.oberhumer.com/opensource/lzo/download/lzo-${PV}.tar.gz \ - file://acinclude.m4 \ - " - -SRC_URI[md5sum] = "95380bd4081f85ef08c5209f4107e9f8" -SRC_URI[sha256sum] = "ff79e6f836d62d3f86ef6ce893ed65d07e638ef4d3cb952963471b4234d43e73" - -inherit autotools - -EXTRA_OECONF = "--enable-shared" - -do_configure_prepend () { - cp ${WORKDIR}/acinclude.m4 ${S}/ -} - -BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-support/lzo/lzo_2.09.bb b/meta/recipes-support/lzo/lzo_2.09.bb new file mode 100644 index 0000000000..2978617bbd --- /dev/null +++ b/meta/recipes-support/lzo/lzo_2.09.bb @@ -0,0 +1,35 @@ +SUMMARY = "Lossless data compression library" +HOMEPAGE = "http://www.oberhumer.com/opensource/lzo/" +SECTION = "libs" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://src/lzo_init.c;beginline=5;endline=25;md5=355023835a9b9eeb70ab895395e951ff" + +SRC_URI = "http://www.oberhumer.com/opensource/lzo/download/lzo-${PV}.tar.gz \ + file://0001-Use-memcpy-instead-of-reinventing-it.patch \ + file://acinclude.m4 \ + file://run-ptest \ + " + +SRC_URI[md5sum] = "c7ffc9a103afe2d1bba0b015e7aa887f" +SRC_URI[sha256sum] = "f294a7ced313063c057c504257f437c8335c41bfeed23531ee4e6a2b87bcb34c" + +inherit autotools ptest + +EXTRA_OECONF = "--enable-shared" + +do_configure_prepend () { + cp ${WORKDIR}/acinclude.m4 ${S}/ +} + +do_install_ptest() { + t=${D}${PTEST_PATH} + cp ${S}/util/check.sh $t + cp ${B}/minilzo/testmini $t + for i in tests/align tests/chksum lzotest/lzotest examples/simple + do cp ${B}/`dirname $i`/.libs/`basename $i` $t; \ + done +} + + +BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-support/neon/neon-0.30.0/pkgconfig.patch b/meta/recipes-support/neon/neon/pkgconfig.patch index 1a2550c6fb..239dba8e25 100644 --- a/meta/recipes-support/neon/neon-0.30.0/pkgconfig.patch +++ b/meta/recipes-support/neon/neon/pkgconfig.patch @@ -4,15 +4,12 @@ Upstream-Status: Inappropriate [configuration] neon.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ---- neon-0.28.1.orig/neon.pc.in -+++ neon-0.28.1/neon.pc.in -@@ -4,8 +4,8 @@ libdir=@libdir@ - includedir=@includedir@ - - Name: neon +--- neon-0.30.1.orig/neon.pc.in ++++ neon-0.30.1/neon.pc.in +@@ -7,5 +7,5 @@ Name: neon Description: HTTP/WebDAV client library Version: @NEON_VERSION@ + Libs: -L${libdir} -lneon @NEON_PC_LIBS@ -Libs.private: @NEON_LIBS@ +Libs.private: -L${libdir} -lz -lgcrypt -lgpg-error -lexpat -lgnutls - Libs: -L${libdir} -lneon @NEON_PC_LIBS@ Cflags: -I${includedir}/neon @NEON_CFLAGS@ diff --git a/meta/recipes-support/neon/neon_0.30.0.bb b/meta/recipes-support/neon/neon_0.30.1.bb index 61bd7d9269..9245244eb8 100644 --- a/meta/recipes-support/neon/neon_0.30.0.bb +++ b/meta/recipes-support/neon/neon_0.30.1.bb @@ -11,8 +11,8 @@ BBCLASSEXTEND = "native" SRC_URI = "http://www.webdav.org/${BPN}/${BPN}-${PV}.tar.gz \ file://pkgconfig.patch" -SRC_URI[md5sum] = "fb60b3a124eeec441937a812c456fd94" -SRC_URI[sha256sum] = "2962cfcb5d30f3272e3d2fa0e473434419770a3801afe3d46e5d1650787990c2" +SRC_URI[md5sum] = "231adebe5c2f78fded3e3df6e958878e" +SRC_URI[sha256sum] = "00c626c0dc18d094ab374dbd9a354915bfe4776433289386ed489c2ec0845cdd" BINCONFIG = "${bindir}/neon-config" diff --git a/meta/recipes-support/nettle/nettle_2.7.1.bb b/meta/recipes-support/nettle/nettle_2.7.1.bb index 8aa5351896..f53afcc5d4 100644 --- a/meta/recipes-support/nettle/nettle_2.7.1.bb +++ b/meta/recipes-support/nettle/nettle_2.7.1.bb @@ -23,4 +23,4 @@ do_configure_prepend() { inherit autotools -BBCLASSEXTEND = "native" +BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-support/npth/npth/pkgconfig.patch b/meta/recipes-support/npth/npth/pkgconfig.patch new file mode 100644 index 0000000000..178ed54c22 --- /dev/null +++ b/meta/recipes-support/npth/npth/pkgconfig.patch @@ -0,0 +1,49 @@ +Added npth pkgconfig file + +Upstream-Status: Incompatible [oe-core specific] + +Signed-off-by: Saul Wold <sgw@linux.intel.com> + +Index: npth-1.1/src/npth.pc.in +=================================================================== +--- /dev/null ++++ npth-1.1/src/npth.pc.in +@@ -0,0 +1,10 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: npth ++Description: a new portable posix threading library ++Version: @VERSION@ ++Libs: -L${libdir} -lnpth -lpthread ++Cflags: -I${includedir} +Index: npth-1.1/src/Makefile.am +=================================================================== +--- npth-1.1.orig/src/Makefile.am ++++ npth-1.1/src/Makefile.am +@@ -27,8 +27,10 @@ + # License along with this program; if not, see <http://www.gnu.org/licenses/>. + + ## Process this file with automake to produce Makefile.in ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = npth.pc + +-EXTRA_DIST = libnpth.vers ++EXTRA_DIST = libnpth.vers npth.pc + # versioninfo.rc.in + nodist_include_HEADERS = npth.h + +Index: npth-1.1/configure.ac +=================================================================== +--- npth-1.1.orig/configure.ac ++++ npth-1.1/configure.ac +@@ -337,6 +337,7 @@ src/Makefile + w32/Makefile + tests/Makefile]) + AC_CONFIG_FILES(npth-config, chmod +x npth-config) ++AC_CONFIG_FILES([src/npth.pc]) + AC_OUTPUT + + echo " diff --git a/meta/recipes-support/npth/npth_0.91.bb b/meta/recipes-support/npth/npth_1.1.bb index 7105b94e3d..72a194e784 100644 --- a/meta/recipes-support/npth/npth_0.91.bb +++ b/meta/recipes-support/npth/npth_1.1.bb @@ -7,9 +7,11 @@ LIC_FILES_CHKSUM = "\ file://COPYING.LESSER;md5=6a6a8e020838b23406c81b19c1d46df6\ " SRC_URI = "ftp://ftp.gnupg.org/gcrypt/npth/npth-${PV}.tar.bz2 \ + file://pkgconfig.patch \ " -SRC_URI[md5sum] = "87712f0cee656c390b49773923e26e7f" -SRC_URI[sha256sum] = "caef86ced4a331e162897818a5b924860c8d6003e52da5bdf76da00e8e0dfae1" + +SRC_URI[md5sum] = "aaffc8ef3e955ab50a1905809f268a23" +SRC_URI[sha256sum] = "896c561eb2ec8da35f11828fb04a3fbff12d41ff657c799056d7dc4a66e5df7f" BINCONFIG = "${bindir}/npth-config" diff --git a/meta/recipes-support/nspr/nspr/fix-build-on-x86_64.patch b/meta/recipes-support/nspr/nspr/fix-build-on-x86_64.patch index a6fa1ea607..c2b7258e50 100644 --- a/meta/recipes-support/nspr/nspr/fix-build-on-x86_64.patch +++ b/meta/recipes-support/nspr/nspr/fix-build-on-x86_64.patch @@ -11,23 +11,27 @@ Upstream-Status: Pending configure.in | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) -diff --git a/configure.in b/configure.in -index 39c96a3..99a03ac 100644 ---- a/configure.in -+++ b/configure.in -@@ -1778,24 +1778,24 @@ tools are selected during the Xcode/Developer Tools installation.]) +Index: nspr/configure.in +=================================================================== +--- nspr.orig/configure.in ++++ nspr/configure.in +@@ -1875,28 +1875,24 @@ tools are selected during the Xcode/Deve PR_MD_ASFILES=os_Linux_ia64.s ;; x86_64) - if test -n "$USE_64"; then - PR_MD_ASFILES=os_Linux_x86_64.s -- else -+ if test -n "$USE_N32"; then - AC_DEFINE(i386) - PR_MD_ASFILES=os_Linux_x86.s - CC="$CC -m32" - CXX="$CXX -m32" -+ else +- elif test -n "$USE_X32"; then ++ if test -n "$USE_X32"; then ++ AC_DEFINE(i386) + PR_MD_ASFILES=os_Linux_x86_64.s + CC="$CC -mx32" + CXX="$CXX -mx32" + else +- AC_DEFINE(i386) +- PR_MD_ASFILES=os_Linux_x86.s +- CC="$CC -m32" +- CXX="$CXX -m32" + PR_MD_ASFILES=os_Linux_x86_64.s fi ;; @@ -46,6 +50,3 @@ index 39c96a3..99a03ac 100644 fi ;; m68k) --- -1.7.1 - diff --git a/meta/recipes-support/nspr/nspr/nspr-CVE-2014-1545.patch b/meta/recipes-support/nspr/nspr/nspr-CVE-2014-1545.patch new file mode 100644 index 0000000000..565ff168e0 --- /dev/null +++ b/meta/recipes-support/nspr/nspr/nspr-CVE-2014-1545.patch @@ -0,0 +1,67 @@ +Fix for CVE-2014-1545 + +Upstream-Status: Backport + +Backported from nspr-4.10.6.tar.gz. +--- +--- a/pr/src/io/prprf.c ++++ b/pr/src/io/prprf.c +@@ -50,6 +50,10 @@ + #include "prlog.h" + #include "prmem.h" + ++#ifdef _MSC_VER ++#define snprintf _snprintf ++#endif ++ + /* + ** WARNING: This code may *NOT* call PR_LOG (because PR_LOG calls it) + */ +@@ -330,7 +334,7 @@ + ** Convert a double precision floating point number into its printable + ** form. + ** +-** XXX stop using sprintf to convert floating point ++** XXX stop using snprintf to convert floating point + */ + static int cvt_f(SprintfState *ss, double d, const char *fmt0, const char *fmt1) + { +@@ -338,15 +342,14 @@ + char fout[300]; + int amount = fmt1 - fmt0; + +- PR_ASSERT((amount > 0) && (amount < sizeof(fin))); +- if (amount >= sizeof(fin)) { +- /* Totally bogus % command to sprintf. Just ignore it */ ++ if (amount <= 0 || amount >= sizeof(fin)) { ++ /* Totally bogus % command to snprintf. Just ignore it */ + return 0; + } + memcpy(fin, fmt0, amount); + fin[amount] = 0; + +- /* Convert floating point using the native sprintf code */ ++ /* Convert floating point using the native snprintf code */ + #ifdef DEBUG + { + const char *p = fin; +@@ -356,14 +359,11 @@ + } + } + #endif +- sprintf(fout, fin, d); +- +- /* +- ** This assert will catch overflow's of fout, when building with +- ** debugging on. At least this way we can track down the evil piece +- ** of calling code and fix it! +- */ +- PR_ASSERT(strlen(fout) < sizeof(fout)); ++ memset(fout, 0, sizeof(fout)); ++ snprintf(fout, sizeof(fout), fin, d); ++ /* Explicitly null-terminate fout because on Windows snprintf doesn't ++ * append a null-terminator if the buffer is too small. */ ++ fout[sizeof(fout) - 1] = '\0'; + + return (*ss->stuff)(ss, fout, strlen(fout)); + } diff --git a/meta/recipes-support/nspr/nspr/remove-srcdir-from-configure-in.patch b/meta/recipes-support/nspr/nspr/remove-srcdir-from-configure-in.patch new file mode 100644 index 0000000000..bde715c5dc --- /dev/null +++ b/meta/recipes-support/nspr/nspr/remove-srcdir-from-configure-in.patch @@ -0,0 +1,19 @@ +the $srcdir is not defined at the time of gnu-configurize. + +Upstream-Status: Inappropriate [OE-Core specific] + +Signed-off-by: Saul Wold <sgw@linux.intel.com> + +Index: nspr/configure.in +=================================================================== +--- nspr.orig/configure.in ++++ nspr/configure.in +@@ -8,7 +8,7 @@ AC_PREREQ(2.61) + AC_INIT + AC_CONFIG_SRCDIR([pr/include/nspr.h]) + +-AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf) ++AC_CONFIG_AUX_DIR(build/autoconf) + AC_CANONICAL_TARGET + + dnl ======================================================== diff --git a/meta/recipes-support/nspr/nspr/trickly-fix-build-on-x86_64.patch b/meta/recipes-support/nspr/nspr/trickly-fix-build-on-x86_64.patch deleted file mode 100644 index 8ca51e4d1f..0000000000 --- a/meta/recipes-support/nspr/nspr/trickly-fix-build-on-x86_64.patch +++ /dev/null @@ -1,62 +0,0 @@ -trickily fix build failure on x86_64 - -It seems that we can not run the 'autoreconf -f -i' for the nspr, I met -several strange problems while trying to do that, and the previous -author seemed had noticed this, so he wrote: - -do_configure() { - oe_runconf -} - -to avoid running the "autoreconf". But we must modify configure.in to -fix the build failure on x86_64, so both modify configure and -configure.in, once the "autoreconf" can work correctly, we can remove -this patch. - -Signed-off-by: Robert Yang <liezhi.yang@windriver.com> - -Upstream-Status: Inappropriate [configuration] ---- - configure | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/configure b/configure ---- a/configure -+++ b/configure -@@ -4366,9 +4366,7 @@ EOF - PR_MD_ASFILES=os_Linux_ia64.s - ;; - x86_64) -- if test -n "$USE_64"; then -- PR_MD_ASFILES=os_Linux_x86_64.s -- else -+ if test -n "$USE_N32"; then - cat >> confdefs.h <<\EOF - #define i386 1 - EOF -@@ -4376,17 +4374,19 @@ EOF - PR_MD_ASFILES=os_Linux_x86.s - CC="$CC -m32" - CXX="$CXX -m32" -+ else -+ PR_MD_ASFILES=os_Linux_x86_64.s - fi - ;; - ppc|powerpc) - PR_MD_ASFILES=os_Linux_ppc.s - ;; - powerpc64) -- if test -n "$USE_64"; then -+ if test -n "$USE_N32"; then -+ PR_MD_ASFILES=os_Linux_ppc.s -+ else - CC="$CC -m64" - CXX="$CXX -m64" -- else -- PR_MD_ASFILES=os_Linux_ppc.s - fi - ;; - m68k) --- -1.7.1 - diff --git a/meta/recipes-support/nspr/nspr_4.10.3.bb b/meta/recipes-support/nspr/nspr_4.10.8.bb index 0adfe3b3a3..944994e17f 100644 --- a/meta/recipes-support/nspr/nspr_4.10.3.bb +++ b/meta/recipes-support/nspr/nspr_4.10.8.bb @@ -8,21 +8,20 @@ SECTION = "libs/network" SRC_URI = "ftp://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v${PV}/src/nspr-${PV}.tar.gz \ file://remove-rpath-from-tests.patch \ file://fix-build-on-x86_64.patch \ - file://trickly-fix-build-on-x86_64.patch \ + file://remove-srcdir-from-configure-in.patch \ " SRC_URI += "file://nspr.pc.in" -SRC_URI[md5sum] = "bf298e874cf454a3c2f8fe7e671c5d2e" -SRC_URI[sha256sum] = "f25779b1a665dab0090b9c977dc6c29a63320f442956ed78629b66b405cb01e5" +SRC_URI[md5sum] = "8d7c5bd0a5b0a7d0e705be66479030a0" +SRC_URI[sha256sum] = "507ea57c525c0c524dae4857a642b4ef5c9d795518754c7f83422d22fe544a15" S = "${WORKDIR}/nspr-${PV}/nspr" RDEPENDS_${PN}-dev += "perl" TARGET_CC_ARCH += "${LDFLAGS}" -TESTS = "runtests.pl \ - runtests.sh \ +TESTS = " \ accept \ acceptread \ acceptreademu \ @@ -138,13 +137,9 @@ TESTS = "runtests.pl \ xnotify \ zerolen" -inherit autotools-brokensep +PR = "r1" -do_configure() { - gnu-configize --force - mv config.sub config.guess build/autoconf - oe_runconf -} +inherit autotools do_compile_prepend() { oe_runmake CROSS_COMPILE=1 CFLAGS="-DXP_UNIX" LDFLAGS="" CC=gcc -C config export @@ -160,8 +155,11 @@ do_install_append() { sed -i s:OELIBDIR:${libdir}:g ${D}${libdir}/pkgconfig/nspr.pc sed -i s:OEINCDIR:${includedir}:g ${D}${libdir}/pkgconfig/nspr.pc sed -i s:OEEXECPREFIX:${exec_prefix}:g ${D}${libdir}/pkgconfig/nspr.pc - cd ${S}/pr/tests + mkdir -p ${D}${libdir}/nspr/tests + install -m 0755 ${S}/pr/tests/runtests.pl ${D}${libdir}/nspr/tests + install -m 0755 ${S}/pr/tests/runtests.sh ${D}${libdir}/nspr/tests + cd ${B}/pr/tests install -m 0755 ${TESTS} ${D}${libdir}/nspr/tests # delete compile-et.pl and perr.properties from ${bindir} because these are diff --git a/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb b/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb index 540f22330a..bbce9e9af0 100644 --- a/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb +++ b/meta/recipes-support/nss-myhostname/nss-myhostname_0.3.bb @@ -11,16 +11,19 @@ SRC_URI = "http://0pointer.de/lennart/projects/nss-myhostname/nss-myhostname-${P SRC_URI[md5sum] = "d4ab9ac36c053ab8fb836db1cbd4a48f" SRC_URI[sha256sum] = "2ba744ea8d578d1c57c85884e94a3042ee17843a5294434d3a7f6c4d67e7caf2" -inherit autotools +inherit autotools distro_features_check + +# The systemd has its own copy of nss-myhostname +CONFLICT_DISTRO_FEATURES = "systemd" pkg_postinst_${PN} () { sed -e '/^hosts:/s/\s*\<myhostname\>//' \ -e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \ - -i $D/etc/nsswitch.conf + -i $D${sysconfdir}/nsswitch.conf } pkg_prerm_${PN} () { sed -e '/^hosts:/s/\s*\<myhostname\>//' \ -e '/^hosts:/s/\s*myhostname//' \ - -i $D/etc/nsswitch.conf + -i $D${sysconfdir}/nsswitch.conf } diff --git a/meta/recipes-support/nss/files/nss-3.15.1-fix-CVE-2013-1741.patch b/meta/recipes-support/nss/files/nss-3.15.1-fix-CVE-2013-1741.patch deleted file mode 100644 index 21da0c03b5..0000000000 --- a/meta/recipes-support/nss/files/nss-3.15.1-fix-CVE-2013-1741.patch +++ /dev/null @@ -1,92 +0,0 @@ -Upstream-Status: backport -yanjun.zhu <yanjun.zhu@windriver.com> ---- a/nss/lib/util/secport.c -+++ b/nss/lib/util/secport.c -@@ -69,13 +69,22 @@ PORTCharConversionFunc ucs4Utf8ConvertFu - PORTCharConversionFunc ucs2Utf8ConvertFunc; - PORTCharConversionWSwapFunc ucs2AsciiConvertFunc; - -+/* NSPR memory allocation functions (PR_Malloc, PR_Calloc, and PR_Realloc) -+ * use the PRUint32 type for the size parameter. Before we pass a size_t or -+ * unsigned long size to these functions, we need to ensure it is <= half of -+ * the maximum PRUint32 value to avoid truncation and catch a negative size. -+ */ -+#define MAX_SIZE (PR_UINT32_MAX >> 1) -+ - void * - PORT_Alloc(size_t bytes) - { -- void *rv; -+ void *rv = NULL; - -- /* Always allocate a non-zero amount of bytes */ -- rv = (void *)PR_Malloc(bytes ? bytes : 1); -+ if (bytes <= MAX_SIZE) { -+ /* Always allocate a non-zero amount of bytes */ -+ rv = PR_Malloc(bytes ? bytes : 1); -+ } - if (!rv) { - ++port_allocFailures; - PORT_SetError(SEC_ERROR_NO_MEMORY); -@@ -86,9 +95,11 @@ PORT_Alloc(size_t bytes) - void * - PORT_Realloc(void *oldptr, size_t bytes) - { -- void *rv; -+ void *rv = NULL; - -- rv = (void *)PR_Realloc(oldptr, bytes); -+ if (bytes <= MAX_SIZE) { -+ rv = PR_Realloc(oldptr, bytes); -+ } - if (!rv) { - ++port_allocFailures; - PORT_SetError(SEC_ERROR_NO_MEMORY); -@@ -99,10 +110,12 @@ PORT_Realloc(void *oldptr, size_t bytes) - void * - PORT_ZAlloc(size_t bytes) - { -- void *rv; -+ void *rv = NULL; - -- /* Always allocate a non-zero amount of bytes */ -- rv = (void *)PR_Calloc(1, bytes ? bytes : 1); -+ if (bytes <= MAX_SIZE) { -+ /* Always allocate a non-zero amount of bytes */ -+ rv = PR_Calloc(1, bytes ? bytes : 1); -+ } - if (!rv) { - ++port_allocFailures; - PORT_SetError(SEC_ERROR_NO_MEMORY); -@@ -209,6 +222,10 @@ PORT_NewArena(unsigned long chunksize) - { - PORTArenaPool *pool; - -+ if (chunksize > MAX_SIZE) { -+ PORT_SetError(SEC_ERROR_NO_MEMORY); -+ return NULL; -+ } - pool = PORT_ZNew(PORTArenaPool); - if (!pool) { - return NULL; -@@ -224,8 +241,6 @@ PORT_NewArena(unsigned long chunksize) - return(&pool->arena); - } - --#define MAX_SIZE 0x7fffffffUL -- - void * - PORT_ArenaAlloc(PLArenaPool *arena, size_t size) - { -@@ -330,6 +345,11 @@ PORT_ArenaGrow(PLArenaPool *arena, void - PORTArenaPool *pool = (PORTArenaPool *)arena; - PORT_Assert(newsize >= oldsize); - -+ if (newsize > MAX_SIZE) { -+ PORT_SetError(SEC_ERROR_NO_MEMORY); -+ return NULL; -+ } -+ - if (ARENAPOOL_MAGIC == pool->magic ) { - PZ_Lock(pool->lock); - /* Do we do a THREADMARK check here? */ diff --git a/meta/recipes-support/nss/files/nss-3.15.1-fix-CVE-2013-5605.patch b/meta/recipes-support/nss/files/nss-3.15.1-fix-CVE-2013-5605.patch deleted file mode 100644 index 7203d02c78..0000000000 --- a/meta/recipes-support/nss/files/nss-3.15.1-fix-CVE-2013-5605.patch +++ /dev/null @@ -1,18 +0,0 @@ -signed-off-by: Ryan Sleevi <ryan.sleevi@gmail.com> -Upstream-Status: Backport -reference:https://hg.mozilla.org/projects/nss/rev/e79a09364b5e - ---- a/nss/lib/ssl/ssl3con.c -+++ b/nss/lib/ssl/ssl3con.c -@@ -781,6 +781,11 @@ static SECStatus - Null_Cipher(void *ctx, unsigned char *output, int *outputLen, int maxOutputLen, - const unsigned char *input, int inputLen) - { -+ if (inputLen > maxOutputLen) { -+ *outputLen = 0; /* Match PK11_CipherOp in setting outputLen */ -+ PORT_SetError(SEC_ERROR_OUTPUT_LEN); -+ return SECFailure; -+ } - *outputLen = inputLen; - if (input != output) - PORT_Memcpy(output, input, inputLen); diff --git a/meta/recipes-support/nss/files/nss-CVE-2013-1740.patch b/meta/recipes-support/nss/files/nss-CVE-2013-1740.patch deleted file mode 100644 index db3d6f9103..0000000000 --- a/meta/recipes-support/nss/files/nss-CVE-2013-1740.patch +++ /dev/null @@ -1,916 +0,0 @@ -nss: CVE-2013-1740 - -Upstream-Status: Backport - -the patch comes from: -http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-1740 -https://bugzilla.mozilla.org/show_bug.cgi?id=919877 -https://bugzilla.mozilla.org/show_bug.cgi?id=713933 - -changeset: 10946:f28426e944ae -user: Wan-Teh Chang <wtc@google.com> -date: Tue Nov 26 16:44:39 2013 -0800 -summary: Bug 713933: Handle the return value of both ssl3_HandleRecord calls - -changeset: 10945:774c7dec7565 -user: Wan-Teh Chang <wtc@google.com> -date: Mon Nov 25 19:16:23 2013 -0800 -summary: Bug 713933: Declare the |falseStart| local variable in the smallest - -changeset: 10848:141fae8fb2e8 -user: Wan-Teh Chang <wtc@google.com> -date: Mon Sep 23 11:25:41 2013 -0700 -summary: Bug 681839: Allow SSL_HandshakeNegotiatedExtension to be called before the handshake is finished, r=brian@briansmith.org - -changeset: 10898:1b9c43d28713 -user: Brian Smith <brian@briansmith.org> -date: Thu Oct 31 15:40:42 2013 -0700 -summary: Bug 713933: Make SSL False Start work with asynchronous certificate validation, r=wtc - -Signed-off-by: Li Wang <li.wang@windriver.com> ---- - nss/lib/ssl/ssl.def | 7 ++ - nss/lib/ssl/ssl.h | 54 +++++++++++--- - nss/lib/ssl/ssl3con.c | 188 +++++++++++++++++++++++++++++++++++------------ - nss/lib/ssl/ssl3gthr.c | 63 ++++++++++++---- - nss/lib/ssl/sslauth.c | 10 +-- - nss/lib/ssl/sslimpl.h | 22 +++++- - nss/lib/ssl/sslinfo.c | 10 +-- - nss/lib/ssl/sslreveal.c | 9 +-- - nss/lib/ssl/sslsecur.c | 139 ++++++++++++++++++++++++++++------- - nss/lib/ssl/sslsock.c | 12 ++- - 10 files changed, 386 insertions(+), 128 deletions(-) - -diff --git a/nss/lib/ssl/ssl.def b/nss/lib/ssl/ssl.def -index fbf7fc5..e937bd4 100644 ---- a/nss/lib/ssl/ssl.def -+++ b/nss/lib/ssl/ssl.def -@@ -163,3 +163,10 @@ SSL_SetStapledOCSPResponses; - ;+ local: - ;+*; - ;+}; -+;+NSS_3.15.3 { # NSS 3.15.3 release -+;+ global: -+SSL_RecommendedCanFalseStart; -+SSL_SetCanFalseStartCallback; -+;+ local: -+;+*; -+;+}; -diff --git a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h -index 6db0e34..ddeaaef 100644 ---- a/nss/lib/ssl/ssl.h -+++ b/nss/lib/ssl/ssl.h -@@ -121,14 +121,17 @@ SSL_IMPORT PRFileDesc *DTLS_ImportFD(PRFileDesc *model, PRFileDesc *fd); - #define SSL_ENABLE_FALSE_START 22 /* Enable SSL false start (off by */ - /* default, applies only to */ - /* clients). False start is a */ --/* mode where an SSL client will start sending application data before */ --/* verifying the server's Finished message. This means that we could end up */ --/* sending data to an imposter. However, the data will be encrypted and */ --/* only the true server can derive the session key. Thus, so long as the */ --/* cipher isn't broken this is safe. Because of this, False Start will only */ --/* occur on RSA or DH ciphersuites where the cipher's key length is >= 80 */ --/* bits. The advantage of False Start is that it saves a round trip for */ --/* client-speaks-first protocols when performing a full handshake. */ -+/* mode where an SSL client will start sending application data before -+ * verifying the server's Finished message. This means that we could end up -+ * sending data to an imposter. However, the data will be encrypted and -+ * only the true server can derive the session key. Thus, so long as the -+ * cipher isn't broken this is safe. The advantage of false start is that -+ * it saves a round trip for client-speaks-first protocols when performing a -+ * full handshake. -+ * -+ * In addition to enabling this option, the application must register a -+ * callback using the SSL_SetCanFalseStartCallback function. -+ */ - - /* For SSL 3.0 and TLS 1.0, by default we prevent chosen plaintext attacks - * on SSL CBC mode cipher suites (see RFC 4346 Section F.3) by splitting -@@ -653,14 +656,45 @@ SSL_IMPORT SECStatus SSL_SetMaxServerCacheLocks(PRUint32 maxLocks); - SSL_IMPORT SECStatus SSL_InheritMPServerSIDCache(const char * envString); - - /* --** Set the callback on a particular socket that gets called when we finish --** performing a handshake. -+** Set the callback that gets called when a TLS handshake is complete. The -+** handshake callback is called after verifying the peer's Finished message and -+** before processing incoming application data. -+** -+** For the initial handshake: If the handshake false started (see -+** SSL_ENABLE_FALSE_START), then application data may already have been sent -+** before the handshake callback is called. If we did not false start then the -+** callback will get called before any application data is sent. - */ - typedef void (PR_CALLBACK *SSLHandshakeCallback)(PRFileDesc *fd, - void *client_data); - SSL_IMPORT SECStatus SSL_HandshakeCallback(PRFileDesc *fd, - SSLHandshakeCallback cb, void *client_data); - -+/* Applications that wish to enable TLS false start must set this callback -+** function. NSS will invoke the functon to determine if a particular -+** connection should use false start or not. SECSuccess indicates that the -+** callback completed successfully, and if so *canFalseStart indicates if false -+** start can be used. If the callback does not return SECSuccess then the -+** handshake will be canceled. NSS's recommended criteria can be evaluated by -+** calling SSL_RecommendedCanFalseStart. -+** -+** If no false start callback is registered then false start will never be -+** done, even if the SSL_ENABLE_FALSE_START option is enabled. -+**/ -+typedef SECStatus (PR_CALLBACK *SSLCanFalseStartCallback)( -+ PRFileDesc *fd, void *arg, PRBool *canFalseStart); -+ -+SSL_IMPORT SECStatus SSL_SetCanFalseStartCallback( -+ PRFileDesc *fd, SSLCanFalseStartCallback callback, void *arg); -+ -+/* This function sets *canFalseStart according to the recommended criteria for -+** false start. These criteria may change from release to release and may depend -+** on which handshake features have been negotiated and/or properties of the -+** certifciates/keys used on the connection. -+*/ -+SSL_IMPORT SECStatus SSL_RecommendedCanFalseStart(PRFileDesc *fd, -+ PRBool *canFalseStart); -+ - /* - ** For the server, request a new handshake. For the client, begin a new - ** handshake. If flushCache is non-zero, the SSL3 cache entry will be -diff --git a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c -index 61d24d9..f39ba09 100644 ---- a/nss/lib/ssl/ssl3con.c -+++ b/nss/lib/ssl/ssl3con.c -@@ -2535,7 +2535,7 @@ ssl3_SendRecord( sslSocket * ss, - SSL_TRC(3, ("%d: SSL3[%d] SendRecord type: %s nIn=%d", - SSL_GETPID(), ss->fd, ssl3_DecodeContentType(type), - nIn)); -- PRINT_BUF(3, (ss, "Send record (plain text)", pIn, nIn)); -+ PRINT_BUF(50, (ss, "Send record (plain text)", pIn, nIn)); - - PORT_Assert( ss->opt.noLocks || ssl_HaveXmitBufLock(ss) ); - -@@ -6674,36 +6674,73 @@ done: - return rv; - } - -+static SECStatus -+ssl3_CheckFalseStart(sslSocket *ss) -+{ -+ PORT_Assert( ss->opt.noLocks || ssl_HaveSSL3HandshakeLock(ss) ); -+ PORT_Assert( !ss->ssl3.hs.authCertificatePending ); -+ PORT_Assert( !ss->ssl3.hs.canFalseStart ); -+ -+ if (!ss->canFalseStartCallback) { -+ SSL_TRC(3, ("%d: SSL[%d]: no false start callback so no false start", -+ SSL_GETPID(), ss->fd)); -+ } else { -+ PRBool maybeFalseStart; -+ SECStatus rv; -+ -+ /* An attacker can control the selected ciphersuite so we only wish to -+ * do False Start in the case that the selected ciphersuite is -+ * sufficiently strong that the attack can gain no advantage. -+ * Therefore we always require an 80-bit cipher. */ -+ ssl_GetSpecReadLock(ss); -+ maybeFalseStart = ss->ssl3.cwSpec->cipher_def->secret_key_size >= 10; -+ ssl_ReleaseSpecReadLock(ss); -+ -+ if (!maybeFalseStart) { -+ SSL_TRC(3, ("%d: SSL[%d]: no false start due to weak cipher", -+ SSL_GETPID(), ss->fd)); -+ } else { -+ rv = (ss->canFalseStartCallback)(ss->fd, -+ ss->canFalseStartCallbackData, -+ &ss->ssl3.hs.canFalseStart); -+ if (rv == SECSuccess) { -+ SSL_TRC(3, ("%d: SSL[%d]: false start callback returned %s", -+ SSL_GETPID(), ss->fd, -+ ss->ssl3.hs.canFalseStart ? "TRUE" : "FALSE")); -+ } else { -+ SSL_TRC(3, ("%d: SSL[%d]: false start callback failed (%s)", -+ SSL_GETPID(), ss->fd, -+ PR_ErrorToName(PR_GetError()))); -+ } -+ return rv; -+ } -+ } -+ -+ ss->ssl3.hs.canFalseStart = PR_FALSE; -+ return SECSuccess; -+} -+ - PRBool --ssl3_CanFalseStart(sslSocket *ss) { -- PRBool rv; -+ssl3_WaitingForStartOfServerSecondRound(sslSocket *ss) -+{ -+ PRBool result = PR_FALSE; - - PORT_Assert( ss->opt.noLocks || ssl_HaveSSL3HandshakeLock(ss) ); - -- /* XXX: does not take into account whether we are waiting for -- * SSL_AuthCertificateComplete or SSL_RestartHandshakeAfterCertReq. If/when -- * that is done, this function could return different results each time it -- * would be called. -- */ -+ switch (ss->ssl3.hs.ws) { -+ case wait_new_session_ticket: -+ result = PR_TRUE; -+ break; -+ case wait_change_cipher: -+ result = !ssl3_ExtensionNegotiated(ss, ssl_session_ticket_xtn); -+ break; -+ case wait_finished: -+ break; -+ default: -+ PR_NOT_REACHED("ssl3_WaitingForStartOfServerSecondRound"); -+ } - -- ssl_GetSpecReadLock(ss); -- rv = ss->opt.enableFalseStart && -- !ss->sec.isServer && -- !ss->ssl3.hs.isResuming && -- ss->ssl3.cwSpec && -- -- /* An attacker can control the selected ciphersuite so we only wish to -- * do False Start in the case that the selected ciphersuite is -- * sufficiently strong that the attack can gain no advantage. -- * Therefore we require an 80-bit cipher and a forward-secret key -- * exchange. */ -- ss->ssl3.cwSpec->cipher_def->secret_key_size >= 10 && -- (ss->ssl3.hs.kea_def->kea == kea_dhe_dss || -- ss->ssl3.hs.kea_def->kea == kea_dhe_rsa || -- ss->ssl3.hs.kea_def->kea == kea_ecdhe_ecdsa || -- ss->ssl3.hs.kea_def->kea == kea_ecdhe_rsa); -- ssl_ReleaseSpecReadLock(ss); -- return rv; -+ return result; - } - - static SECStatus ssl3_SendClientSecondRound(sslSocket *ss); -@@ -6785,6 +6822,9 @@ ssl3_SendClientSecondRound(sslSocket *ss) - } - if (ss->ssl3.hs.authCertificatePending && - (sendClientCert || ss->ssl3.sendEmptyCert || ss->firstHsDone)) { -+ SSL_TRC(3, ("%d: SSL3[%p]: deferring ssl3_SendClientSecondRound because" -+ " certificate authentication is still pending.", -+ SSL_GETPID(), ss->fd)); - ss->ssl3.hs.restartTarget = ssl3_SendClientSecondRound; - return SECWouldBlock; - } -@@ -6822,14 +6862,50 @@ ssl3_SendClientSecondRound(sslSocket *ss) - goto loser; /* err code was set. */ - } - -- /* XXX: If the server's certificate hasn't been authenticated by this -- * point, then we may be leaking this NPN message to an attacker. -+ /* This must be done after we've set ss->ssl3.cwSpec in -+ * ssl3_SendChangeCipherSpecs because SSL_GetChannelInfo uses information -+ * from cwSpec. This must be done before we call ssl3_CheckFalseStart -+ * because the false start callback (if any) may need the information from -+ * the functions that depend on this being set. - */ -+ ss->enoughFirstHsDone = PR_TRUE; -+ - if (!ss->firstHsDone) { -+ /* XXX: If the server's certificate hasn't been authenticated by this -+ * point, then we may be leaking this NPN message to an attacker. -+ */ - rv = ssl3_SendNextProto(ss); - if (rv != SECSuccess) { - goto loser; /* err code was set. */ - } -+ -+ if (ss->opt.enableFalseStart) { -+ if (!ss->ssl3.hs.authCertificatePending) { -+ /* When we fix bug 589047, we will need to know whether we are -+ * false starting before we try to flush the client second -+ * round to the network. With that in mind, we purposefully -+ * call ssl3_CheckFalseStart before calling ssl3_SendFinished, -+ * which includes a call to ssl3_FlushHandshake, so that -+ * no application develops a reliance on such flushing being -+ * done before its false start callback is called. -+ */ -+ ssl_ReleaseXmitBufLock(ss); -+ rv = ssl3_CheckFalseStart(ss); -+ ssl_GetXmitBufLock(ss); -+ if (rv != SECSuccess) { -+ goto loser; -+ } -+ } else { -+ /* The certificate authentication and the server's Finished -+ * message are racing each other. If the certificate -+ * authentication wins, then we will try to false start in -+ * ssl3_AuthCertificateComplete. -+ */ -+ SSL_TRC(3, ("%d: SSL3[%p]: deferring false start check because" -+ " certificate authentication is still pending.", -+ SSL_GETPID(), ss->fd)); -+ } -+ } - } - - rv = ssl3_SendFinished(ss, 0); -@@ -6844,10 +6920,7 @@ ssl3_SendClientSecondRound(sslSocket *ss) - else - ss->ssl3.hs.ws = wait_change_cipher; - -- /* Do the handshake callback for sslv3 here, if we can false start. */ -- if (ss->handshakeCallback != NULL && ssl3_CanFalseStart(ss)) { -- (ss->handshakeCallback)(ss->fd, ss->handshakeCallbackData); -- } -+ PORT_Assert(ssl3_WaitingForStartOfServerSecondRound(ss)); - - return SECSuccess; - -@@ -9421,13 +9494,6 @@ ssl3_AuthCertificate(sslSocket *ss) - - ss->ssl3.hs.authCertificatePending = PR_TRUE; - rv = SECSuccess; -- -- /* XXX: Async cert validation and False Start don't work together -- * safely yet; if we leave False Start enabled, we may end up false -- * starting (sending application data) before we -- * SSL_AuthCertificateComplete has been called. -- */ -- ss->opt.enableFalseStart = PR_FALSE; - } - - if (rv != SECSuccess) { -@@ -9551,6 +9617,12 @@ ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error) - } else if (ss->ssl3.hs.restartTarget != NULL) { - sslRestartTarget target = ss->ssl3.hs.restartTarget; - ss->ssl3.hs.restartTarget = NULL; -+ -+ if (target == ssl3_FinishHandshake) { -+ SSL_TRC(3,("%d: SSL3[%p]: certificate authentication lost the race" -+ " with peer's finished message", SSL_GETPID(), ss->fd)); -+ } -+ - rv = target(ss); - /* Even if we blocked here, we have accomplished enough to claim - * success. Any remaining work will be taken care of by subsequent -@@ -9560,7 +9632,29 @@ ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error) - rv = SECSuccess; - } - } else { -- rv = SECSuccess; -+ SSL_TRC(3, ("%d: SSL3[%p]: certificate authentication won the race with" -+ " peer's finished message", SSL_GETPID(), ss->fd)); -+ -+ PORT_Assert(!ss->firstHsDone); -+ PORT_Assert(!ss->sec.isServer); -+ PORT_Assert(!ss->ssl3.hs.isResuming); -+ PORT_Assert(ss->ssl3.hs.ws == wait_new_session_ticket || -+ ss->ssl3.hs.ws == wait_change_cipher || -+ ss->ssl3.hs.ws == wait_finished); -+ -+ /* ssl3_SendClientSecondRound deferred the false start check because -+ * certificate authentication was pending, so we do it now if we still -+ * haven't received any of the server's second round yet. -+ */ -+ if (ss->opt.enableFalseStart && -+ !ss->firstHsDone && -+ !ss->sec.isServer && -+ !ss->ssl3.hs.isResuming && -+ ssl3_WaitingForStartOfServerSecondRound(ss)) { -+ rv = ssl3_CheckFalseStart(ss); -+ } else { -+ rv = SECSuccess; -+ } - } - - done: -@@ -10023,9 +10117,6 @@ xmit_loser: - return rv; - } - -- ss->gs.writeOffset = 0; -- ss->gs.readOffset = 0; -- - if (ss->ssl3.hs.kea_def->kea == kea_ecdhe_rsa) { - effectiveExchKeyType = kt_rsa; - } else { -@@ -10090,6 +10181,9 @@ xmit_loser: - return rv; - } - -+/* The return type is SECStatus instead of void because this function needs -+ * to have type sslRestartTarget. -+ */ - SECStatus - ssl3_FinishHandshake(sslSocket * ss) - { -@@ -10099,19 +10193,16 @@ ssl3_FinishHandshake(sslSocket * ss) - - /* The first handshake is now completed. */ - ss->handshake = NULL; -- ss->firstHsDone = PR_TRUE; - - if (ss->ssl3.hs.cacheSID) { - (*ss->sec.cache)(ss->sec.ci.sid); - ss->ssl3.hs.cacheSID = PR_FALSE; - } - -+ ss->ssl3.hs.canFalseStart = PR_FALSE; /* False Start phase is complete */ - ss->ssl3.hs.ws = idle_handshake; - -- /* Do the handshake callback for sslv3 here, if we cannot false start. */ -- if (ss->handshakeCallback != NULL && !ssl3_CanFalseStart(ss)) { -- (ss->handshakeCallback)(ss->fd, ss->handshakeCallbackData); -- } -+ ssl_FinishHandshake(ss); - - return SECSuccess; - } -@@ -11045,7 +11136,6 @@ process_it: - - ssl_ReleaseSSL3HandshakeLock(ss); - return rv; -- - } - - /* -diff --git a/nss/lib/ssl/ssl3gthr.c b/nss/lib/ssl/ssl3gthr.c -index 6d62515..03e369d 100644 ---- a/nss/lib/ssl/ssl3gthr.c -+++ b/nss/lib/ssl/ssl3gthr.c -@@ -275,11 +275,17 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags) - { - SSL3Ciphertext cText; - int rv; -- PRBool canFalseStart = PR_FALSE; -+ PRBool keepGoing = PR_TRUE; - - SSL_TRC(30, ("ssl3_GatherCompleteHandshake")); - -+ /* ssl3_HandleRecord may end up eventually calling ssl_FinishHandshake, -+ * which requires the 1stHandshakeLock, which must be acquired before the -+ * RecvBufLock. -+ */ -+ PORT_Assert( ss->opt.noLocks || ssl_Have1stHandshakeLock(ss) ); - PORT_Assert( ss->opt.noLocks || ssl_HaveRecvBufLock(ss) ); -+ - do { - PRBool handleRecordNow = PR_FALSE; - -@@ -368,20 +374,48 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags) - if (rv < 0) { - return ss->recvdCloseNotify ? 0 : rv; - } -+ if (rv == (int) SECSuccess && ss->gs.buf.len > 0) { -+ /* We have application data to return to the application. This -+ * prioritizes returning application data to the application over -+ * completing any renegotiation handshake we may be doing. -+ */ -+ PORT_Assert(ss->firstHsDone); -+ PORT_Assert(cText.type == content_application_data); -+ break; -+ } - -- /* If we kicked off a false start in ssl3_HandleServerHelloDone, break -- * out of this loop early without finishing the handshake. -- */ -- if (ss->opt.enableFalseStart) { -- ssl_GetSSL3HandshakeLock(ss); -- canFalseStart = (ss->ssl3.hs.ws == wait_change_cipher || -- ss->ssl3.hs.ws == wait_new_session_ticket) && -- ssl3_CanFalseStart(ss); -- ssl_ReleaseSSL3HandshakeLock(ss); -+ PORT_Assert(keepGoing); -+ ssl_GetSSL3HandshakeLock(ss); -+ if (ss->ssl3.hs.ws == idle_handshake) { -+ /* We are done with the current handshake so stop trying to -+ * handshake. Note that it would be safe to test ss->firstHsDone -+ * instead of ss->ssl3.hs.ws. By testing ss->ssl3.hs.ws instead, -+ * we prioritize completing a renegotiation handshake over sending -+ * application data. -+ */ -+ PORT_Assert(ss->firstHsDone); -+ PORT_Assert(!ss->ssl3.hs.canFalseStart); -+ keepGoing = PR_FALSE; -+ } else if (ss->ssl3.hs.canFalseStart) { -+ /* Prioritize sending application data over trying to complete -+ * the handshake if we're false starting. -+ * -+ * If we were to do this check at the beginning of the loop instead -+ * of here, then this function would become be a no-op after -+ * receiving the ServerHelloDone in the false start case, and we -+ * would never complete the handshake. -+ */ -+ PORT_Assert(!ss->firstHsDone); -+ -+ if (ssl3_WaitingForStartOfServerSecondRound(ss)) { -+ keepGoing = PR_FALSE; -+ } else { -+ ss->ssl3.hs.canFalseStart = PR_FALSE; -+ } - } -- } while (ss->ssl3.hs.ws != idle_handshake && -- !canFalseStart && -- ss->gs.buf.len == 0); -+ ssl_ReleaseSSL3HandshakeLock(ss); -+ } while (keepGoing); -+ - - ss->gs.readOffset = 0; - ss->gs.writeOffset = ss->gs.buf.len; -@@ -404,7 +438,10 @@ ssl3_GatherAppDataRecord(sslSocket *ss, int flags) - { - int rv; - -+ /* ssl3_GatherCompleteHandshake requires both of these locks. */ -+ PORT_Assert( ss->opt.noLocks || ssl_Have1stHandshakeLock(ss) ); - PORT_Assert( ss->opt.noLocks || ssl_HaveRecvBufLock(ss) ); -+ - do { - rv = ssl3_GatherCompleteHandshake(ss, flags); - } while (rv > 0 && ss->gs.buf.len == 0); -diff --git a/nss/lib/ssl/sslauth.c b/nss/lib/ssl/sslauth.c -index d2f57bf..cb956d4 100644 ---- a/nss/lib/ssl/sslauth.c -+++ b/nss/lib/ssl/sslauth.c -@@ -60,7 +60,6 @@ SSL_SecurityStatus(PRFileDesc *fd, int *op, char **cp, int *kp0, int *kp1, - sslSocket *ss; - const char *cipherName; - PRBool isDes = PR_FALSE; -- PRBool enoughFirstHsDone = PR_FALSE; - - ss = ssl_FindSocket(fd); - if (!ss) { -@@ -78,14 +77,7 @@ SSL_SecurityStatus(PRFileDesc *fd, int *op, char **cp, int *kp0, int *kp1, - *op = SSL_SECURITY_STATUS_OFF; - } - -- if (ss->firstHsDone) { -- enoughFirstHsDone = PR_TRUE; -- } else if (ss->version >= SSL_LIBRARY_VERSION_3_0 && -- ssl3_CanFalseStart(ss)) { -- enoughFirstHsDone = PR_TRUE; -- } -- -- if (ss->opt.useSecurity && enoughFirstHsDone) { -+ if (ss->opt.useSecurity && ss->enoughFirstHsDone) { - if (ss->version < SSL_LIBRARY_VERSION_3_0) { - cipherName = ssl_cipherName[ss->sec.cipherType]; - } else { -diff --git a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h -index 90e9567..bf0d67f 100644 ---- a/nss/lib/ssl/sslimpl.h -+++ b/nss/lib/ssl/sslimpl.h -@@ -842,6 +842,8 @@ const ssl3CipherSuiteDef *suite_def; - /* Shared state between ssl3_HandleFinished and ssl3_FinishHandshake */ - PRBool cacheSID; - -+ PRBool canFalseStart; /* Can/did we False Start */ -+ - /* clientSigAndHash contains the contents of the signature_algorithms - * extension (if any) from the client. This is only valid for TLS 1.2 - * or later. */ -@@ -1116,6 +1118,10 @@ struct sslSocketStr { - unsigned long clientAuthRequested; - unsigned long delayDisabled; /* Nagle delay disabled */ - unsigned long firstHsDone; /* first handshake is complete. */ -+ unsigned long enoughFirstHsDone; /* enough of the first handshake is -+ * done for callbacks to be able to -+ * retrieve channel security -+ * parameters from the SSL socket. */ - unsigned long handshakeBegun; - unsigned long lastWriteBlocked; - unsigned long recvdCloseNotify; /* received SSL EOF. */ -@@ -1156,6 +1162,8 @@ const unsigned char * preferredCipher; - void *badCertArg; - SSLHandshakeCallback handshakeCallback; - void *handshakeCallbackData; -+ SSLCanFalseStartCallback canFalseStartCallback; -+ void *canFalseStartCallbackData; - void *pkcs11PinArg; - SSLNextProtoCallback nextProtoCallback; - void *nextProtoArg; -@@ -1358,7 +1366,19 @@ extern void ssl3_SetAlwaysBlock(sslSocket *ss); - - extern SECStatus ssl_EnableNagleDelay(sslSocket *ss, PRBool enabled); - --extern PRBool ssl3_CanFalseStart(sslSocket *ss); -+extern void ssl_FinishHandshake(sslSocket *ss); -+ -+/* Returns PR_TRUE if we are still waiting for the server to respond to our -+ * client second round. Once we've received any part of the server's second -+ * round then we don't bother trying to false start since it is almost always -+ * the case that the NewSessionTicket, ChangeCipherSoec, and Finished messages -+ * were sent in the same packet and we want to process them all at the same -+ * time. If we were to try to false start in the middle of the server's second -+ * round, then we would increase the number of I/O operations -+ * (SSL_ForceHandshake/PR_Recv/PR_Send/etc.) needed to finish the handshake. -+ */ -+extern PRBool ssl3_WaitingForStartOfServerSecondRound(sslSocket *ss); -+ - extern SECStatus - ssl3_CompressMACEncryptRecord(ssl3CipherSpec * cwSpec, - PRBool isServer, -diff --git a/nss/lib/ssl/sslinfo.c b/nss/lib/ssl/sslinfo.c -index 9f2597e..d0c23b7 100644 ---- a/nss/lib/ssl/sslinfo.c -+++ b/nss/lib/ssl/sslinfo.c -@@ -26,7 +26,6 @@ SSL_GetChannelInfo(PRFileDesc *fd, SSLChannelInfo *info, PRUintn len) - sslSocket * ss; - SSLChannelInfo inf; - sslSessionID * sid; -- PRBool enoughFirstHsDone = PR_FALSE; - - if (!info || len < sizeof inf.length) { - PORT_SetError(SEC_ERROR_INVALID_ARGS); -@@ -43,14 +42,7 @@ SSL_GetChannelInfo(PRFileDesc *fd, SSLChannelInfo *info, PRUintn len) - memset(&inf, 0, sizeof inf); - inf.length = PR_MIN(sizeof inf, len); - -- if (ss->firstHsDone) { -- enoughFirstHsDone = PR_TRUE; -- } else if (ss->version >= SSL_LIBRARY_VERSION_3_0 && -- ssl3_CanFalseStart(ss)) { -- enoughFirstHsDone = PR_TRUE; -- } -- -- if (ss->opt.useSecurity && enoughFirstHsDone) { -+ if (ss->opt.useSecurity && ss->enoughFirstHsDone) { - sid = ss->sec.ci.sid; - inf.protocolVersion = ss->version; - inf.authKeyBits = ss->sec.authKeyBits; -diff --git a/nss/lib/ssl/sslreveal.c b/nss/lib/ssl/sslreveal.c -index dc14794..d972998 100644 ---- a/nss/lib/ssl/sslreveal.c -+++ b/nss/lib/ssl/sslreveal.c -@@ -77,7 +77,6 @@ SSL_HandshakeNegotiatedExtension(PRFileDesc * socket, - { - /* some decisions derived from SSL_GetChannelInfo */ - sslSocket * sslsocket = NULL; -- PRBool enoughFirstHsDone = PR_FALSE; - - if (!pYes) { - PORT_SetError(SEC_ERROR_INVALID_ARGS); -@@ -93,14 +92,8 @@ SSL_HandshakeNegotiatedExtension(PRFileDesc * socket, - - *pYes = PR_FALSE; - -- if (sslsocket->firstHsDone) { -- enoughFirstHsDone = PR_TRUE; -- } else if (sslsocket->ssl3.initialized && ssl3_CanFalseStart(sslsocket)) { -- enoughFirstHsDone = PR_TRUE; -- } -- - /* according to public API SSL_GetChannelInfo, this doesn't need a lock */ -- if (sslsocket->opt.useSecurity && enoughFirstHsDone) { -+ if (sslsocket->opt.useSecurity) { - if (sslsocket->ssl3.initialized) { /* SSL3 and TLS */ - /* now we know this socket went through ssl3_InitState() and - * ss->xtnData got initialized, which is the only member accessed by -diff --git a/nss/lib/ssl/sslsecur.c b/nss/lib/ssl/sslsecur.c -index 49bb42b..d0df442 100644 ---- a/nss/lib/ssl/sslsecur.c -+++ b/nss/lib/ssl/sslsecur.c -@@ -97,23 +97,13 @@ ssl_Do1stHandshake(sslSocket *ss) - ss->securityHandshake = 0; - } - if (ss->handshake == 0) { -- ssl_GetRecvBufLock(ss); -- ss->gs.recordLen = 0; -- ssl_ReleaseRecvBufLock(ss); -- -- SSL_TRC(3, ("%d: SSL[%d]: handshake is completed", -- SSL_GETPID(), ss->fd)); -- /* call handshake callback for ssl v2 */ -- /* for v3 this is done in ssl3_HandleFinished() */ -- if ((ss->handshakeCallback != NULL) && /* has callback */ -- (!ss->firstHsDone) && /* only first time */ -- (ss->version < SSL_LIBRARY_VERSION_3_0)) { /* not ssl3 */ -- ss->firstHsDone = PR_TRUE; -- (ss->handshakeCallback)(ss->fd, ss->handshakeCallbackData); -+ /* for v3 this is done in ssl3_FinishHandshake */ -+ if (!ss->firstHsDone && ss->version < SSL_LIBRARY_VERSION_3_0) { -+ ssl_GetRecvBufLock(ss); -+ ss->gs.recordLen = 0; -+ ssl_FinishHandshake(ss); -+ ssl_ReleaseRecvBufLock(ss); - } -- ss->firstHsDone = PR_TRUE; -- ss->gs.writeOffset = 0; -- ss->gs.readOffset = 0; - break; - } - rv = (*ss->handshake)(ss); -@@ -134,6 +124,24 @@ ssl_Do1stHandshake(sslSocket *ss) - return rv; - } - -+void -+ssl_FinishHandshake(sslSocket *ss) -+{ -+ PORT_Assert( ss->opt.noLocks || ssl_Have1stHandshakeLock(ss) ); -+ PORT_Assert( ss->opt.noLocks || ssl_HaveRecvBufLock(ss) ); -+ -+ SSL_TRC(3, ("%d: SSL[%d]: handshake is completed", SSL_GETPID(), ss->fd)); -+ -+ ss->firstHsDone = PR_TRUE; -+ ss->enoughFirstHsDone = PR_TRUE; -+ ss->gs.writeOffset = 0; -+ ss->gs.readOffset = 0; -+ -+ if (ss->handshakeCallback) { -+ (ss->handshakeCallback)(ss->fd, ss->handshakeCallbackData); -+ } -+} -+ - /* - * Handshake function that blocks. Used to force a - * retry on a connection on the next read/write. -@@ -206,6 +214,7 @@ SSL_ResetHandshake(PRFileDesc *s, PRBool asServer) - ssl_Get1stHandshakeLock(ss); - - ss->firstHsDone = PR_FALSE; -+ ss->enoughFirstHsDone = PR_FALSE; - if ( asServer ) { - ss->handshake = ssl2_BeginServerHandshake; - ss->handshaking = sslHandshakingAsServer; -@@ -221,6 +230,8 @@ SSL_ResetHandshake(PRFileDesc *s, PRBool asServer) - ssl_ReleaseRecvBufLock(ss); - - ssl_GetSSL3HandshakeLock(ss); -+ ss->ssl3.hs.canFalseStart = PR_FALSE; -+ ss->ssl3.hs.restartTarget = NULL; - - /* - ** Blow away old security state and get a fresh setup. -@@ -331,6 +342,71 @@ SSL_HandshakeCallback(PRFileDesc *fd, SSLHandshakeCallback cb, - return SECSuccess; - } - -+/* Register an application callback to be called when false start may happen. -+** Acquires and releases HandshakeLock. -+*/ -+SECStatus -+SSL_SetCanFalseStartCallback(PRFileDesc *fd, SSLCanFalseStartCallback cb, -+ void *arg) -+{ -+ sslSocket *ss; -+ -+ ss = ssl_FindSocket(fd); -+ if (!ss) { -+ SSL_DBG(("%d: SSL[%d]: bad socket in SSL_SetCanFalseStartCallback", -+ SSL_GETPID(), fd)); -+ return SECFailure; -+ } -+ -+ if (!ss->opt.useSecurity) { -+ PORT_SetError(SEC_ERROR_INVALID_ARGS); -+ return SECFailure; -+ } -+ -+ ssl_Get1stHandshakeLock(ss); -+ ssl_GetSSL3HandshakeLock(ss); -+ -+ ss->canFalseStartCallback = cb; -+ ss->canFalseStartCallbackData = arg; -+ -+ ssl_ReleaseSSL3HandshakeLock(ss); -+ ssl_Release1stHandshakeLock(ss); -+ -+ return SECSuccess; -+} -+ -+SECStatus -+SSL_RecommendedCanFalseStart(PRFileDesc *fd, PRBool *canFalseStart) -+{ -+ sslSocket *ss; -+ -+ *canFalseStart = PR_FALSE; -+ ss = ssl_FindSocket(fd); -+ if (!ss) { -+ SSL_DBG(("%d: SSL[%d]: bad socket in SSL_RecommendedCanFalseStart", -+ SSL_GETPID(), fd)); -+ return SECFailure; -+ } -+ -+ if (!ss->ssl3.initialized) { -+ PORT_SetError(SEC_ERROR_INVALID_ARGS); -+ return SECFailure; -+ } -+ -+ if (ss->version < SSL_LIBRARY_VERSION_3_0) { -+ PORT_SetError(SSL_ERROR_FEATURE_NOT_SUPPORTED_FOR_SSL2); -+ return SECFailure; -+ } -+ -+ /* Require a forward-secret key exchange. */ -+ *canFalseStart = ss->ssl3.hs.kea_def->kea == kea_dhe_dss || -+ ss->ssl3.hs.kea_def->kea == kea_dhe_rsa || -+ ss->ssl3.hs.kea_def->kea == kea_ecdhe_ecdsa || -+ ss->ssl3.hs.kea_def->kea == kea_ecdhe_rsa; -+ -+ return SECSuccess; -+} -+ - /* Try to make progress on an SSL handshake by attempting to read the - ** next handshake from the peer, and sending any responses. - ** For non-blocking sockets, returns PR_ERROR_WOULD_BLOCK if it cannot -@@ -524,6 +600,9 @@ DoRecv(sslSocket *ss, unsigned char *out, int len, int flags) - int amount; - int available; - -+ /* ssl3_GatherAppDataRecord may call ssl_FinishHandshake, which needs the -+ * 1stHandshakeLock. */ -+ ssl_Get1stHandshakeLock(ss); - ssl_GetRecvBufLock(ss); - - available = ss->gs.writeOffset - ss->gs.readOffset; -@@ -590,6 +669,7 @@ DoRecv(sslSocket *ss, unsigned char *out, int len, int flags) - - done: - ssl_ReleaseRecvBufLock(ss); -+ ssl_Release1stHandshakeLock(ss); - return rv; - } - -@@ -1156,7 +1236,7 @@ ssl_SecureRead(sslSocket *ss, unsigned char *buf, int len) - int - ssl_SecureSend(sslSocket *ss, const unsigned char *buf, int len, int flags) - { -- int rv = 0; -+ int rv = 0; - - SSL_TRC(2, ("%d: SSL[%d]: SecureSend: sending %d bytes", - SSL_GETPID(), ss->fd, len)); -@@ -1191,19 +1271,15 @@ ssl_SecureSend(sslSocket *ss, const unsigned char *buf, int len, int flags) - ss->writerThread = PR_GetCurrentThread(); - /* If any of these is non-zero, the initial handshake is not done. */ - if (!ss->firstHsDone) { -- PRBool canFalseStart = PR_FALSE; -+ PRBool falseStart = PR_FALSE; - ssl_Get1stHandshakeLock(ss); -- if (ss->version >= SSL_LIBRARY_VERSION_3_0) { -+ if (ss->opt.enableFalseStart && -+ ss->version >= SSL_LIBRARY_VERSION_3_0) { - ssl_GetSSL3HandshakeLock(ss); -- if ((ss->ssl3.hs.ws == wait_change_cipher || -- ss->ssl3.hs.ws == wait_finished || -- ss->ssl3.hs.ws == wait_new_session_ticket) && -- ssl3_CanFalseStart(ss)) { -- canFalseStart = PR_TRUE; -- } -+ falseStart = ss->ssl3.hs.canFalseStart; - ssl_ReleaseSSL3HandshakeLock(ss); - } -- if (!canFalseStart && -+ if (!falseStart && - (ss->handshake || ss->nextHandshake || ss->securityHandshake)) { - rv = ssl_Do1stHandshake(ss); - } -@@ -1228,6 +1304,17 @@ ssl_SecureSend(sslSocket *ss, const unsigned char *buf, int len, int flags) - goto done; - } - -+ if (!ss->firstHsDone) { -+ PORT_Assert(ss->version >= SSL_LIBRARY_VERSION_3_0); -+#ifdef DEBUG -+ ssl_GetSSL3HandshakeLock(ss); -+ PORT_Assert(ss->ssl3.hs.canFalseStart); -+ ssl_ReleaseSSL3HandshakeLock(ss); -+#endif -+ SSL_TRC(3, ("%d: SSL[%d]: SecureSend: sending data due to false start", -+ SSL_GETPID(), ss->fd)); -+ } -+ - /* Send out the data using one of these functions: - * ssl2_SendClear, ssl2_SendStream, ssl2_SendBlock, - * ssl3_SendApplicationData -diff --git a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c -index cd4a7a7..73e069b 100644 ---- a/nss/lib/ssl/sslsock.c -+++ b/nss/lib/ssl/sslsock.c -@@ -349,6 +349,8 @@ ssl_DupSocket(sslSocket *os) - ss->badCertArg = os->badCertArg; - ss->handshakeCallback = os->handshakeCallback; - ss->handshakeCallbackData = os->handshakeCallbackData; -+ ss->canFalseStartCallback = os->canFalseStartCallback; -+ ss->canFalseStartCallbackData = os->canFalseStartCallbackData; - ss->pkcs11PinArg = os->pkcs11PinArg; - - /* Create security data */ -@@ -2341,10 +2343,14 @@ ssl_Poll(PRFileDesc *fd, PRInt16 how_flags, PRInt16 *p_out_flags) - } else if (new_flags & PR_POLL_WRITE) { - /* The caller is trying to write, but the handshake is - ** blocked waiting for data to read, and the first -- ** handshake has been sent. so do NOT to poll on write. -+ ** handshake has been sent. So do NOT to poll on write -+ ** unless we did false start. - */ -- new_flags ^= PR_POLL_WRITE; /* don't select on write. */ -- new_flags |= PR_POLL_READ; /* do select on read. */ -+ if (!(ss->version >= SSL_LIBRARY_VERSION_3_0 && -+ ss->ssl3.hs.canFalseStart)) { -+ new_flags ^= PR_POLL_WRITE; /* don't select on write. */ -+ } -+ new_flags |= PR_POLL_READ; /* do select on read. */ - } - } - } else if ((new_flags & PR_POLL_READ) && (SSL_DataPending(fd) > 0)) { --- -1.7.9.5 - diff --git a/meta/recipes-support/nss/files/nss-CVE-2014-1492.patch b/meta/recipes-support/nss/files/nss-CVE-2014-1492.patch deleted file mode 100644 index 1be8a17870..0000000000 --- a/meta/recipes-support/nss/files/nss-CVE-2014-1492.patch +++ /dev/null @@ -1,68 +0,0 @@ -nss: CVE-2014-1492 - -Upstream-Status: Backport - -the patch comes from: -http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-1492 -https://bugzilla.mozilla.org/show_bug.cgi?id=903885 - -changeset: 11063:709d4e597979 -user: Kai Engert <kaie@kuix.de> -date: Wed Mar 05 18:38:55 2014 +0100 -summary: Bug 903885, address requests to clarify comments from wtc - -changeset: 11046:2ffa40a3ff55 -tag: tip -user: Wan-Teh Chang <wtc@google.com> -date: Tue Feb 25 18:17:08 2014 +0100 -summary: Bug 903885, fix IDNA wildcard handling v4, r=kaie - -changeset: 11045:15ea62260c21 -user: Christian Heimes <sites@cheimes.de> -date: Mon Feb 24 17:50:25 2014 +0100 -summary: Bug 903885, fix IDNA wildcard handling, r=kaie - -Signed-off-by: Li Wang <li.wang@windriver.com> ---- - nss/lib/certdb/certdb.c | 15 +++++++++------ - 1 file changed, 9 insertions(+), 6 deletions(-) - -diff --git a/nss/lib/certdb/certdb.c b/nss/lib/certdb/certdb.c -index b7d22bd..91877b7 100644 ---- a/nss/lib/certdb/certdb.c -+++ b/nss/lib/certdb/certdb.c -@@ -1381,7 +1381,7 @@ cert_TestHostName(char * cn, const char * hn) - return rv; - } - } else { -- /* New approach conforms to RFC 2818. */ -+ /* New approach conforms to RFC 6125. */ - char *wildcard = PORT_Strchr(cn, '*'); - char *firstcndot = PORT_Strchr(cn, '.'); - char *secondcndot = firstcndot ? PORT_Strchr(firstcndot+1, '.') : NULL; -@@ -1390,14 +1390,17 @@ cert_TestHostName(char * cn, const char * hn) - /* For a cn pattern to be considered valid, the wildcard character... - * - may occur only in a DNS name with at least 3 components, and - * - may occur only as last character in the first component, and -- * - may be preceded by additional characters -+ * - may be preceded by additional characters, and -+ * - must not be preceded by an IDNA ACE prefix (xn--) - */ - if (wildcard && secondcndot && secondcndot[1] && firsthndot -- && firstcndot - wildcard == 1 -- && secondcndot - firstcndot > 1 -- && PORT_Strrchr(cn, '*') == wildcard -+ && firstcndot - wildcard == 1 /* wildcard is last char in first component */ -+ && secondcndot - firstcndot > 1 /* second component is non-empty */ -+ && PORT_Strrchr(cn, '*') == wildcard /* only one wildcard in cn */ - && !PORT_Strncasecmp(cn, hn, wildcard - cn) -- && !PORT_Strcasecmp(firstcndot, firsthndot)) { -+ && !PORT_Strcasecmp(firstcndot, firsthndot) -+ /* If hn starts with xn--, then cn must start with wildcard */ -+ && (PORT_Strncasecmp(hn, "xn--", 4) || wildcard == cn)) { - /* valid wildcard pattern match */ - return SECSuccess; - } --- -1.7.9.5 - diff --git a/meta/recipes-support/nss/nss.inc b/meta/recipes-support/nss/nss.inc index 5afd63914b..6330f4e0a1 100644 --- a/meta/recipes-support/nss/nss.inc +++ b/meta/recipes-support/nss/nss.inc @@ -8,7 +8,7 @@ v3 certificates, and other security standards." HOMEPAGE = "http://www.mozilla.org/projects/security/pki/nss/" SECTION = "libs" -LICENSE = "MPL-1.1 GPL-2.0 LGPL-2.1" +LICENSE = "MPL-2.0 | (MPL-2.0 & GPL-2.0+) | (MPL-2.0 & LGPL-2.1+)" LIC_FILES_CHKSUM = "file://nss/lib/freebl/mpi/doc/LICENSE;md5=491f158d09d948466afce85d6f1fe18f \ file://nss/lib/freebl/mpi/doc/LICENSE-MPL;md5=6bf96825e3d7ce4de25621ae886cc859" @@ -16,17 +16,14 @@ SRC_URI = "\ file://nss-fix-support-cross-compiling.patch \ file://nss-no-rpath-for-cross-compiling.patch \ file://nss-fix-incorrect-shebang-of-perl.patch \ - file://nss-3.15.1-fix-CVE-2013-1741.patch \ - file://nss-3.15.1-fix-CVE-2013-5605.patch \ - file://nss-CVE-2014-1492.patch \ - file://nss-CVE-2013-1740.patch \ + file://nss-fix-nsinstall-build.patch \ " -SRC_URI_append_class-target = "\ +SRC_URI_append = "\ file://nss.pc.in \ file://signlibs.sh \ " inherit siteinfo -PR = "r0" + DEPENDS = "sqlite3 nspr zlib nss-native" DEPENDS_class-native = "sqlite3-native nspr-native zlib-native" RDEPENDS_${PN} = "perl" @@ -150,7 +147,7 @@ do_install() { done } -do_install_append_class-target() { +do_install_append() { # Create empty .chk files for the NSS libraries at build time. They could # be regenerated at target's boot time. for file in libsoftokn3.chk libfreebl3.chk libnssdbm3.chk; do @@ -165,12 +162,14 @@ do_install_append_class-target() { sed -i s:OEEXECPREFIX:${exec_prefix}:g ${D}${libdir}/pkgconfig/nss.pc sed -i s:OELIBDIR:${libdir}:g ${D}${libdir}/pkgconfig/nss.pc sed -i s:OEINCDIR:${includedir}/nss3:g ${D}${libdir}/pkgconfig/nss.pc +} +do_install_append_class-target() { # Create a blank certificate - mkdir -p ${D}/etc/pki/nssdb/ + mkdir -p ${D}${sysconfdir}/pki/nssdb/ touch ./empty_password - certutil -N -d ${D}/etc/pki/nssdb/ -f ./empty_password - chmod 644 ${D}/etc/pki/nssdb/*.db + certutil -N -d ${D}${sysconfdir}/pki/nssdb/ -f ./empty_password + chmod 644 ${D}${sysconfdir}/pki/nssdb/*.db rm ./empty_password } diff --git a/meta/recipes-support/nss/files/nss-fix-incorrect-shebang-of-perl.patch b/meta/recipes-support/nss/nss/nss-fix-incorrect-shebang-of-perl.patch index 547594d5b6..547594d5b6 100644 --- a/meta/recipes-support/nss/files/nss-fix-incorrect-shebang-of-perl.patch +++ b/meta/recipes-support/nss/nss/nss-fix-incorrect-shebang-of-perl.patch diff --git a/meta/recipes-support/nss/nss/nss-fix-nsinstall-build.patch b/meta/recipes-support/nss/nss/nss-fix-nsinstall-build.patch new file mode 100644 index 0000000000..866de07ea8 --- /dev/null +++ b/meta/recipes-support/nss/nss/nss-fix-nsinstall-build.patch @@ -0,0 +1,35 @@ +Fix nss multilib build on openSUSE 11.x 32bit + +While building lib64-nss on openSUSE 11.x 32bit, the nsinstall will +fail with error: + +* nsinstall.c:1:0: sorry, unimplemented: 64-bit mode not compiled + +It caused by the '-m64' option which passed to host gcc. + +The nsinstall was built first while nss starting to build, it only runs +on host to install built files, it doesn't need any cross-compling or +multilib build options. Just clean the ARCHFLAG and LDFLAGS to fix this +error. + +Upstream-Status: Pending + +Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com> +=================================================== +diff --git a/nss/coreconf/nsinstall/Makefile b/nss/coreconf/nsinstall/Makefile +index 1850bcb..5aee84f 100644 +--- a/nss/coreconf/nsinstall/Makefile ++++ b/nss/coreconf/nsinstall/Makefile +@@ -18,6 +18,12 @@ INTERNAL_TOOLS = 1 + + include $(DEPTH)/coreconf/config.mk + ++# nsinstall is unfit for cross-compiling/multilib-build since it was ++# always run on local host to install built files. This change intends ++# to clean the '-m64' from ARCHFLAG and LDFLAGS. ++ARCHFLAG = ++LDFLAGS = ++ + ifeq (,$(filter-out OS2 WIN%,$(OS_TARGET))) + PROGRAM = + else diff --git a/meta/recipes-support/nss/files/nss-fix-support-cross-compiling.patch b/meta/recipes-support/nss/nss/nss-fix-support-cross-compiling.patch index f0b3550bff..f0b3550bff 100644 --- a/meta/recipes-support/nss/files/nss-fix-support-cross-compiling.patch +++ b/meta/recipes-support/nss/nss/nss-fix-support-cross-compiling.patch diff --git a/meta/recipes-support/nss/files/nss-no-rpath-for-cross-compiling.patch b/meta/recipes-support/nss/nss/nss-no-rpath-for-cross-compiling.patch index 7661dc93a0..7661dc93a0 100644 --- a/meta/recipes-support/nss/files/nss-no-rpath-for-cross-compiling.patch +++ b/meta/recipes-support/nss/nss/nss-no-rpath-for-cross-compiling.patch diff --git a/meta/recipes-support/nss/files/nss.pc.in b/meta/recipes-support/nss/nss/nss.pc.in index 200f635c65..200f635c65 100644 --- a/meta/recipes-support/nss/files/nss.pc.in +++ b/meta/recipes-support/nss/nss/nss.pc.in diff --git a/meta/recipes-support/nss/files/signlibs.sh b/meta/recipes-support/nss/nss/signlibs.sh index 1ec79f4576..1ec79f4576 100644 --- a/meta/recipes-support/nss/files/signlibs.sh +++ b/meta/recipes-support/nss/nss/signlibs.sh diff --git a/meta/recipes-support/nss/nss_3.15.1.bb b/meta/recipes-support/nss/nss_3.15.1.bb deleted file mode 100644 index 7b06f00cde..0000000000 --- a/meta/recipes-support/nss/nss_3.15.1.bb +++ /dev/null @@ -1,9 +0,0 @@ -require nss.inc - -SRC_URI += "\ - http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_15_1_RTM/src/${BPN}-${PV}.tar.gz \ -" - -SRC_URI[md5sum] = "fb68f4d210ac9397dd0d3c39c4f938eb" -SRC_URI[sha256sum] = "f994106a33d1f3210f4151bbb3419a1c28fd1cb545caa7dc9afdebd6da626284" - diff --git a/meta/recipes-support/nss/nss_3.17.3.bb b/meta/recipes-support/nss/nss_3.17.3.bb new file mode 100644 index 0000000000..e7d0780fb8 --- /dev/null +++ b/meta/recipes-support/nss/nss_3.17.3.bb @@ -0,0 +1,7 @@ +require nss.inc + +SRC_URI += "\ + http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_17_3_RTM/src/${BP}.tar.gz \ +" +SRC_URI[md5sum] = "fba7489e1b26f2a0bfe5527430fd61e1" +SRC_URI[sha256sum] = "f4d5e9035a2f84f25f35c283de3b0ff60d72e918748de25eaf017ed201fa21d5" diff --git a/meta/recipes-support/pinentry/pinentry_0.9.0.bb b/meta/recipes-support/pinentry/pinentry_0.9.0.bb new file mode 100644 index 0000000000..10b329b15e --- /dev/null +++ b/meta/recipes-support/pinentry/pinentry_0.9.0.bb @@ -0,0 +1,29 @@ +SUMMARY = "Collection of simple PIN or passphrase entry dialogs" +DESCRIPTION = "\ + Pinentry is a collection of simple PIN or passphrase entry dialogs which \ + utilize the Assuan protocol as described by the aegypten project; see \ + http://www.gnupg.org/aegypten/ for details." + +HOMEPAGE = "http://www.gnupg.org/related_software/pinentry/index.en.html" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=cbbd794e2a0a289b9dfcc9f513d1996e" + +PR = "r1" + +inherit autotools + +SRC_URI = "ftp://ftp.gnupg.org/gcrypt/${BPN}/${BPN}-${PV}.tar.bz2" + +SRC_URI[md5sum] = "40a05856cb3accf6679987b7899b0f5a" +SRC_URI[sha256sum] = "90045a07ab8e1a8e1ecf5d19b51691f195525e579fa5d71d7e92c120b05490ab" + +EXTRA_OECONF = "--disable-rpath \ + --disable-dependency-tracking \ + " + +PACKAGECONFIG ??= "ncurses libcap" + +PACKAGECONFIG[ncurses] = "--enable-ncurses --with-ncurses-include-dir=${STAGING_INCDIR}, --disable-ncurses, ncurses" +PACKAGECONFIG[libcap] = "--with-libcap, --without-libcap, libcap" +PACKAGECONFIG[qt4] = "--enable-pinentry-qt4, --disable-pinentry-qt4, qt4-x11" +PACKAGECONFIG[gtk2] = "--enable-pinentry-gtk2, --disable-pinentry-gtk2, gtk+ glib-2.0" diff --git a/meta/recipes-support/ptest-runner/files/ptest-runner b/meta/recipes-support/ptest-runner/files/ptest-runner index 33424134c5..c618f1148d 100644 --- a/meta/recipes-support/ptest-runner/files/ptest-runner +++ b/meta/recipes-support/ptest-runner/files/ptest-runner @@ -1,5 +1,5 @@ #!/bin/sh - +ANYFAILED=no echo "START: $0" for libdir in /usr/lib* @@ -15,9 +15,13 @@ do date "+%Y-%m-%dT%H:%M" echo "BEGIN: $x" cd "$x" - ./run-ptest + ./run-ptest || ANYFAILED=yes echo "END: $x" date "+%Y-%m-%dT%H:%M" done done echo "STOP: $0" +if [ "$ANYFAILED" = "yes" ]; then + exit 1 +fi +exit 0 diff --git a/meta/recipes-support/ptest-runner/ptest-runner_1.0.bb b/meta/recipes-support/ptest-runner/ptest-runner_1.0.bb index 7443811d8c..bc1b0a4d46 100644 --- a/meta/recipes-support/ptest-runner/ptest-runner_1.0.bb +++ b/meta/recipes-support/ptest-runner/ptest-runner_1.0.bb @@ -11,6 +11,8 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d INHIBIT_DEFAULT_DEPS = "1" +S = "${WORKDIR}" + do_install () { mkdir -p ${D}${bindir} install -m 0755 ${WORKDIR}/ptest-runner ${D}${bindir} diff --git a/meta/recipes-support/pth/files/pth-fix-parallel.patch b/meta/recipes-support/pth/files/pth-fix-parallel.patch new file mode 100644 index 0000000000..08edaff157 --- /dev/null +++ b/meta/recipes-support/pth/files/pth-fix-parallel.patch @@ -0,0 +1,48 @@ +From df06b8170745eac347acb95f9f374f257621254f Mon Sep 17 00:00:00 2001 +From: Robert Yang <liezhi.yang@windriver.com> +Date: Thu, 29 Jan 2015 18:11:00 -0800 +Subject: [PATCH] Makefile.in: fix for parallel build + +Fixed: +* do_compile + pth_uctx.c:31:19: fatal error: pth_p.h: No such file or directory + #include "pth_p.h" + ^ +compilation terminated. +make: *** [pth_uctx.lo] Error 1 + +* do_install: + cp: cannot create regular file `image/usr/lib/pkgconfig/#INST@15507#': No such file or directory + +Upstream-Status: Pending +Signed-off-by: Robert Yang <liezhi.yang@windriver.com> +--- + Makefile.in | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index de0390d..381a0ee 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -219,7 +219,8 @@ test_pthread: test_pthread.o test_common.o libpthread.la + + # install the package + install: all-for-install +- @$(MAKE) $(MKFLAGS) install-dirs install-pth @INSTALL_PTHREAD@ install-pkgconfigDATA ++ @$(MAKE) $(MKFLAGS) install-dirs ++ @$(MAKE) $(MKFLAGS) install-pth @INSTALL_PTHREAD@ install-pkgconfigDATA + @touch .done-install >/dev/null 2>&1 || $(TRUE) + @$(MAKE) $(MKFLAGS) what-next + install-dirs: +@@ -432,7 +433,7 @@ TAGS: + ## (AUTOMATICALLY UPDATED - DO NOT EDIT) + ## + +-$(LOBJS): Makefile ++$(LOBJS): Makefile pth_p.h + + # DO NOT REMOVE + pth_attr.lo: pth_attr.c pth_p.h pth_vers.c pth.h pth_acdef.h pth_acmac.h +-- +1.7.9.5 + diff --git a/meta/recipes-support/pth/pth_2.0.7.bb b/meta/recipes-support/pth/pth_2.0.7.bb index 416e788e5d..9037769b79 100644 --- a/meta/recipes-support/pth/pth_2.0.7.bb +++ b/meta/recipes-support/pth/pth_2.0.7.bb @@ -13,13 +13,13 @@ python __anonymous () { } SRC_URI = "${GNU_MIRROR}/pth/pth-${PV}.tar.gz \ - file://pth-add-pkgconfig-support.patch" + file://pth-add-pkgconfig-support.patch \ + file://pth-fix-parallel.patch \ + " SRC_URI[md5sum] = "9cb4a25331a4c4db866a31cbe507c793" SRC_URI[sha256sum] = "72353660c5a2caafd601b20e12e75d865fd88f6cf1a088b306a3963f0bc77232" -PARALLEL_MAKE="" - BINCONFIG = "${bindir}/pth-config" inherit autotools binconfig-disabled pkgconfig diff --git a/meta/recipes-support/serf/serf/env.patch b/meta/recipes-support/serf/serf/env.patch new file mode 100644 index 0000000000..9d073e9abf --- /dev/null +++ b/meta/recipes-support/serf/serf/env.patch @@ -0,0 +1,28 @@ +'scons' cleans the environment which breaks ccache builds because +CCACHEDIR can point to an unexpected location: + +| ccache arm-linux-gnueabi-gcc ... context.c +| ccache: failed to create .../serf/1.3.6-r0/.home/.ccache (No such file or directory) + +Issue is described in + + http://www.scons.org/wiki/ImportingEnvironmentSettings + +and because 'bitbake' cleans environment we can pass it completely +instead of trying to enumerate needed env. + +Upstream-Status: Inappropriate + + +Index: serf-1.3.6/SConstruct +=================================================================== +--- serf-1.3.6.orig/SConstruct ++++ serf-1.3.6/SConstruct +@@ -149,6 +149,7 @@ if sys.platform == 'win32': + env = Environment(variables=opts, + tools=('default', 'textfile',), + CPPPATH=['.', ], ++ ENV = os.environ, + ) + + env.Append(BUILDERS = { diff --git a/meta/recipes-support/serf/serf/norpath.patch b/meta/recipes-support/serf/serf/norpath.patch new file mode 100644 index 0000000000..380f5d00d2 --- /dev/null +++ b/meta/recipes-support/serf/serf/norpath.patch @@ -0,0 +1,42 @@ +The RPATH handling in serf is all wrong for us and we don't need it +anyway so hack around it by removing this for now. + +Upstream-Status: Inappropriate + +RP 2014/7/17 + +Index: serf-1.3.6/SConstruct +=================================================================== +--- serf-1.3.6.orig/SConstruct 2014-07-17 19:57:57.724389150 +0000 ++++ serf-1.3.6/SConstruct 2014-07-17 20:04:21.784399616 +0000 +@@ -218,8 +218,7 @@ + else: + LIBNAMESTATIC = 'serf-${MAJOR}' + +-env.Append(RPATH=libdir, +- PDB='${TARGET.filebase}.pdb') ++env.Append(PDB='${TARGET.filebase}.pdb') + + #for i in env: + # print(str(env[i])) +@@ -371,12 +370,6 @@ + if sys.platform == 'win32': + env.Append(CPPDEFINES=['SERF_HAVE_SSPI']) + +-# On some systems, the -R values that APR describes never make it into actual +-# RPATH flags. We'll manually map all directories in LIBPATH into new +-# flags to set RPATH values. +-for d in env['LIBPATH']: +- env.Append(RPATH=':'+d) +- + # Set up the construction of serf-*.pc + pkgconfig = env.Textfile('serf-%d.pc' % (MAJOR,), + env.File('build/serf.pc.in'), +@@ -446,7 +439,6 @@ + ENV={'PATH' : os.environ['PATH']})) + + # Find the (dynamic) library in this directory +-tenv.Replace(RPATH=thisdir) + tenv.Prepend(LIBS=[LIBNAMESTATIC, ], + LIBPATH=[thisdir, ]) + diff --git a/meta/recipes-support/serf/serf_1.3.8.bb b/meta/recipes-support/serf/serf_1.3.8.bb new file mode 100644 index 0000000000..aa7918b5c3 --- /dev/null +++ b/meta/recipes-support/serf/serf_1.3.8.bb @@ -0,0 +1,26 @@ + +SRC_URI = "http://serf.googlecode.com/svn/src_releases/serf-${PV}.tar.bz2 \ + file://norpath.patch \ + file://env.patch" + +SRC_URI[md5sum] = "2e4efe57ff28cb3202a112e90f0c2889" +SRC_URI[sha256sum] = "e0500be065dbbce490449837bb2ab624e46d64fc0b090474d9acaa87c82b2590" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +DEPENDS = "python-scons-native openssl apr apr-util util-linux expat" + +do_compile() { + ${STAGING_BINDIR_NATIVE}/scons ${PARALLEL_MAKE} PREFIX=${prefix} \ + CC="${CC}" \ + APR=`which apr-1-config` APU=`which apu-1-config` \ + CFLAGS="${CFLAGS}" LINKFLAGS="${LDFLAGS}" \ + OPENSSL="${STAGING_EXECPREFIXDIR}" +} + +do_install() { + ${STAGING_BINDIR_NATIVE}/scons PREFIX=${D}${prefix} LIBDIR=${D}${libdir} install +} + +BBCLASSEXTEND = "native" diff --git a/meta/recipes-support/shared-mime-info/shared-mime-info_1.2.bb b/meta/recipes-support/shared-mime-info/shared-mime-info_1.2.bb deleted file mode 100644 index 11fd6ded64..0000000000 --- a/meta/recipes-support/shared-mime-info/shared-mime-info_1.2.bb +++ /dev/null @@ -1,7 +0,0 @@ -require shared-mime-info.inc - -SRC_URI[md5sum] = "8f90f3f2b8478fa47e70678d34013f99" -SRC_URI[sha256sum] = "a5516ae241b95a948a6749b1cbf65dc20c3bb563a73cc7bedb7065933788bb78" - -SRC_URI =+ "file://parallelmake.patch \ - file://install-data-hook.patch" diff --git a/meta/recipes-support/shared-mime-info/shared-mime-info_1.3.bb b/meta/recipes-support/shared-mime-info/shared-mime-info_1.3.bb new file mode 100644 index 0000000000..4bd81cd831 --- /dev/null +++ b/meta/recipes-support/shared-mime-info/shared-mime-info_1.3.bb @@ -0,0 +1,7 @@ +require shared-mime-info.inc + +SRC_URI[md5sum] = "743720bc4803dd69f55449013d350f31" +SRC_URI[sha256sum] = "4fd49c8c7ca9ecb10c59845094a18dbb73b69c72b4bad3db5e864f2111cb323a" + +SRC_URI =+ "file://parallelmake.patch \ + file://install-data-hook.patch" diff --git a/meta/recipes-support/sqlite/sqlite3_3.8.4.3.bb b/meta/recipes-support/sqlite/sqlite3_3.8.7.4.bb index 938829780a..4c73d304da 100644 --- a/meta/recipes-support/sqlite/sqlite3_3.8.4.3.bb +++ b/meta/recipes-support/sqlite/sqlite3_3.8.7.4.bb @@ -10,10 +10,10 @@ PE = "3" SQLITE_PV = "${@sqlite_download_version(d)}" SRC_URI = "http://www.sqlite.org/2014/sqlite-autoconf-${SQLITE_PV}.tar.gz" -S = "${WORKDIR}/sqlite-autoconf-${SQLITE_PV}" +SRC_URI[md5sum] = "33bb8db0038317ce1b0480ca1185c7ba" +SRC_URI[sha256sum] = "86370f139405fdfe03334fd618171a74e50f589f17ccbe5933361ed1f58359ec" -SRC_URI[md5sum] = "0f5459cde43cb269e5120ecd2c671ced" -SRC_URI[sha256sum] = "e0e995e23a324a5d6ae95d8a836240382a4d7475d09707fc469c8cafcbd48d65" +S = "${WORKDIR}/sqlite-autoconf-${SQLITE_PV}" # Provide column meta-data API BUILD_CFLAGS += "-DSQLITE_ENABLE_COLUMN_METADATA" diff --git a/meta/recipes-support/taglib/taglib_1.9.1.bb b/meta/recipes-support/taglib/taglib_1.9.1.bb index 55e345f1cc..1f278144e3 100644 --- a/meta/recipes-support/taglib/taglib_1.9.1.bb +++ b/meta/recipes-support/taglib/taglib_1.9.1.bb @@ -12,8 +12,6 @@ SRC_URI = "http://taglib.github.io/releases/${BP}.tar.gz" SRC_URI[md5sum] = "0d35df96822bbd564c5504cb3c2e4d86" SRC_URI[sha256sum] = "72d371cd1419a87ae200447a53bff2be219283071e80fd12337928cc967dc71a" -S = "${WORKDIR}/${BP}" - BINCONFIG = "${bindir}/taglib-config" inherit cmake pkgconfig binconfig-disabled @@ -27,6 +25,6 @@ do_configure_prepend () { rm -f ${S}/admin/ltmain.sh rm -f ${S}/admin/libtool.m4.in # Don't have a floating dependeny on boost - sed -i -e "s/atomic.hpp/atomic-not-exist.hpp/" ${S}/ConfigureChecks.cmake + sed -i -e "s/atomic.hpp/atomic-not-exist.hpp/" ${S}/ConfigureChecks.cmake ${S}/taglib/toolkit/trefcounter.cpp } |